l 它提供了与http协议相关的一些功能。
l 只需要去覆盖doGet()或doPost()即可。这两个方法,如果没有覆盖,默认是响应405!
7 Servlet细节 7.1 Servlet单例、线程不案例l Servlet是的单例的。所以一个Servlet对象可能同时处理多个请求;
l Servlet不是线程安全的。
Ø 尽可能不创建成员变量,因为成员变量多个线程会共享!
Ø 如果非要创建,那么创建功能性的,只读!
7.2 Servlet的创建时间:第一次被请求、启动创建* Servlet可以在第一次请求时被创建,还可以在容器启动时被创建。默认是第一次请求时!
* 在<servlet>添加一个<load-on-startup>大于等于0的整数</load-on-startup>
* 如果有多个Servlet在容器启动时创建,那么<load-on-startup>的值就有用了,创建的顺序使用它的值来排序!
7.3 <url-pattern>的配置l <url-pattern>中可以使用“*”表示所有字符,但它不匹配“/”。它的使用要求:
Ø 它要么在头,要么在尾。不能在中间;
Ø 如果不使用通配符,那么必须使用“/”开头。
l 如果一个访问路径,匹配了多个<url-pattern>,那么谁更加明确就匹配谁。
7.4 web.xml的继承l 每个项目都有一个web.xml,但tomcat下也有一个web.xml,在${CATALINA_HOME}\conf\web.xml
l conf\web.xml是所有项目的web.xml父文件,父文件中的内容等于同写在子文件中。
ServletContextServlet三大域对象:
l ServletContext:范围最大,应用范围!
l HttpSession :会话范围!
l HttpServletRequest:请求范围!
域对象之一
域对象都有存取功能:
setAttribute(“attrName”, attrValue );//put
Object attrValue = getAttribute(“attrName”);//get
removeAttribute(“attrName”);//remove
1 ServletContext的作用l 存取域属性,ServletContext是一个域对象;
l 可以用来获取应用初始化参数;
l 获取资源
ServletContext的生命周期l ServletContext在容器启动时就被创建了;
l ServletContext在容器关闭时才会死!
l 一个项目只有一个ServletContext对象。
3 获取ServletContextl 通过ServletConfig的getServletContext()方法来获取!
Ø ServletConfig是init()方法的参数,那只能在init()方法中获取了;
Ø GenericServlet代理了ServletConfig的所有方法,而且还提供了getServletConfig(),所以在GenericServlet的子类中可以使用如下方式来获取ServletContext对象:
² this.getServletContext()
² this.getServletConfig().getServletContext()
Ø HttpSession也有这个方法,session.getServletContext()。
4 域对象:ServletContextl void setAttribute(String name, Object value):存储属性;
l Object getAttribute(String name):获取属性;
l void removeAttribute(String name):移除属性;
l Enumeration getAttributeNames():获取所有属性名称;
5 获取初始化参数一个 项目不只是可以配置servlet的初始化参数,还可以配置应用初始化参数
下面就是在web.xml中配置应用的初始化参数,这些参数需要使用ServletContext来获取
<context-param>
<param-name>p1</param-name>
<param-value>v1</param-value>
</context-param>
<context-param>
<param-name>p2</param-name>
<param-value>v2</param-value>
</context-param>
l String getInitParameter(String name):通过参数名获取参数值;
l Enumeration getInitParameterNames():获取所有参数的名称;
6 获取资源l 获取真实路径:getRealPath(String path):路径必须以“/”开头!它相对当前项目所在路径的。
l 获取指定路径下的所有资源路径:Set set = sc.getResourcePaths(“/xxx”)
l 获取资源流:InputStream in = sc.getResourceAsStream(“/xxx”)
7 Class和ClassLoader获取资源User.class如何变成Class<User>的呢,由ClassLoader完成的!把硬盘上的User.class加载到内存,变成Class对象。
使用它们获取资源流!它们相对类路径(classpath)
request&response 对象 response 1. response简介l response的类型为HttpServletResponse,它是Servlet的service()方法的参数。
l 当客户端发出请求时,tomcat会创建request和rsponse来调用Servlet的service()方法,每次请求都会创建新的request和response。
l response是用来向客户端完成响应。
2 response的两个流,用来响应正文l response.getWriter() ,返回值为PrintWriter,用响应字符数据。
l response.getOutputStream(),返回值为ServletOutputStream,用来响应字节数据。
l 在一个请求范围内,这两个流不能同时使用!不然会输出非法状态异常。
3 response字符流的编码问题l response的字符流默认使用ISO-8859-1编码,可以使用response.setCharaceterEncoding(“utf-8”)来设置编码;