JavaWeb基础知识总结. (5)

wps8BF2.tmp

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父文件,父文件中的内容等于同写在子文件中。

ServletContext

Servlet三大域对象:

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 获取ServletContext

l 通过ServletConfig的getServletContext()方法来获取!

Ø ServletConfig是init()方法的参数,那只能在init()方法中获取了;

Ø GenericServlet代理了ServletConfig的所有方法,而且还提供了getServletConfig(),所以在GenericServlet的子类中可以使用如下方式来获取ServletContext对象:

² this.getServletContext()

² this.getServletConfig().getServletContext()

Ø HttpSession也有这个方法,session.getServletContext()。

4 域对象:ServletContext

l 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”)来设置编码;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzfdw.html