JavaWeb的Servlet、ServletContext
一、Servlet是什么?他是一个处理网页请求或者提交数据的处理容器,每个Servlet是独特的,用来处理不同的网页请求方式,同
时Servlet容器内部又是单例多线程的,对多个网页的同一请求采取多线程方式快速处理,在使用时要注意线程安全问题。
二、自定义Servlet需要的步骤:
1、自定义Servlet继承于HttpServlet,重写doGet()和doPost()
2、在WebRoot的WEB-INF的web.xml下配置Servlet
以下为配置格式:
<servlet>
<servlet-name>别名(任取,但需与以下servlet-mapping的别名一致)</servlet-name>
<servlet-class>com.firstServlet</servlet-class> <!--(项目工程src下的类路径)-->
</servlet>
<servlet-mapping>
<servlet-name>别名</servlet-name>
<url-pattern>/firstServlet</url-pattern> <!--设置浏览器访问的路径-->
<!--真正浏览器的访问路径还得在前面加上项目名即http:localhost:8080/项目名/此处路径-->
</servlet-mapping>
1、 若想设置Servlet在服务器启动时就创建只需在<servlet>里添加:<load-on-startup>0</load-on-startup>即可,此处0为启动
优先级,Servlet启动顺序按优先级从小到大依次启动(优先级必须为非负整数)。
2、 配置Servlet初始化参数方法:
<servlet>
.......
<init-param>
<param-name>paramName</param-name>
<param-value>paramValue</param-value>
</init-param>
</servlet>
三、Servlet生命周期
init() :进行初始化工作
service():提供服务响应请求,自动判断调用doGet或者doPost方法
destory():Servlet被销毁的时候调用
调用顺序:构造器->init()->service()->destory()
四、Servlet的常用方法:
doGet(HttpServletRequest request, HttpServletResponse response):处理get请求,默认启动方
doPost(HttpServletRequest request, HttpServletResponse response):处理post请求
getServletConetext():获取ServletContext对象
五、ServletContext对象(上下文对象)
服务器会为每个web项目创建一个ServletContext对象,该对象在服务器启动时创建,在服务器关闭时销毁。
作用:进行Servlet之间的数据传递
ServletContext对象拥有的方法:
setAttribute(String name,Object Key):使用键值对方式存入数据对象
getAttribute(String name):通过键名取出数据对象
removeAttribute(String name):通过键名删除已存入的数据对象
getAttributeNames():取出所有键名
getInitParameter(String name):通过键名取出全局初始化参数值(ServletConfig里同样方法获得当前Servlet
初始化参数)
全局初始化参数配置:
<web-app> <context-param> <param-name>cluster</param-name> <param-value>false</param-value> </context-param> ....... </web-app>
getRealPath(String path):通过文件名获取文件的绝对路径
getResourceAsStream(String path):通过文件名获取文件的输入流对象(InputStream)
getResource(String path):通过文件名获取文件的网址URL对象
getResourcePaths(String path):通过文件名获取当前文件名目录下的所有资源的路径的Set集合
六、获取src路径(类路径WEB-INF\classes)下的资源:所有src下的文件都会在映射在WEB-INF\classes里
第一种:getClass().getClassLoader().getResourceAsStream是从src路径(即classes路径)开始的,同时路径不用"/"开头
第二种:getClass().getResourceAsStream是分俩种情况:
"/"开头是从src路径(即classes路径)开始的,
不用"/"开头是从当前包路径下开始的
若想返回上级路径使用../