一.Servlet作用: 1.接受请求数据 2.处理请求 3.完成响应(转发或者重定向)
二.Serlvet生命周期: 1.默认情况下,Servlet会在第一次被访问时,由服务器创建.如果需要一启动服务器就创建Serlvet,需要在web.xml中配置(在中配置,其中给出一个非负整数!) 2.一个Servlet,服务器只创建一个对象,因为Servlet是单例 3.在Servlet被创建后,会立刻调用Servlet的初始化方法void init(SerlvetConfig),并且一生只会调用一次这个方法.所以可以把Serlvet初始化的准备放在init方法中. 4.当服务器接受到请求时,会调用Servlet的service方法来处理请求.服务器接收到一个请求,就会调用一次,所以这个方法会被调用多次. 5.当服务器被关闭时,Servlet会调用destroy()方法,只执行一次,所以可以把释放资源的代码放到destroy中.
三.HttpServletRequest方法: String getParameter(String paramName):获取指定请求参数的值; String getMethod():获取请求方法,例如GET或POST; String getHeader(String name):获取指定请求头的值; void setCharacterEncoding(String encoding):设置请求体的编码!因为GET请求没有请求体,所以这个方法只只对POST请求有效。当调用request.setCharacterEncoding(“utf-8”)之后,再通过getParameter()方法获取参数值时,那么参数值都已经通过了转码,即转换成了UTF-8编码。所以,这个方法必须在调用getParameter()方法之前调用!
四.HttpServletResponse方法:
PRintWriter getWriter():获取字符响应流,使用该流可以向客户端输出响应信息。 例如response.getWriter().print(“<h1>Hello javaWeb!</h1>”);
ServletOutputStream getOutputStream():获取字节响应流,当需要向客户端响应字节数据时,需要使用这个流,例如要向客户端响应图片;
void setCharacterEncoding(String encoding):用来设置字符响应流的编码,例如在调用setCharacterEncoding(“utf-8”);之后,再response.getWriter()获取字符响应流对象,这时的响应流的编码为utf-8,使用response.getWriter()输出的中文都会转换成utf-8编码后发送给客户端;
void setHeader(String name, String value):向客户端添加响应头信息,例如setHeader(“Refresh”, “3;url=http://www.itcast.cn”),表示3秒后自动刷新到http://www.itcast.cn;
void setContentType(String contentType):该方法是setHeader(“content-type”, “xxx”)的简便方法,即用来添加名为content-type响应头的方法。content-type响应头用来设置响应数据的MIME类型,例如要向客户端响应jpg的图片,那么可以setContentType(“image/jepg”),如果响应数据为文本类型,那么还要台同时设置编码,例如setContentType(“text/html;chartset=utf-8”)表示响应数据类型为文本类型中的html类型,并且该方法会调用setCharacterEncoding(“utf-8”)方法;
void sendError(int code, String errorMsg):向客户端发送状态码,以及错误消息。例如给客户端发送404:response(404, “您要查找的资源不存在!”)。
五.ServletConfig: ServletConfig对象对应web.xml文件中的元素,ServletConfig对象是由服务器创建的,然后传递给Servlet的init()方法,你可以在init()方法中使用它
String getServletName():获取Servlet在web.xml文件中的配置名称,即指定的名称; ServletContext getServletContext():用来获取ServletContext对象 String getInitParameter(String name):用来获取在web.xml中配置的初始化参数,通过参数名来获取参数值; Enumeration getInitParameterNames():用来获取在web.xml中配置的所有初始化参数名称;
五.Servlet细节 不要在Servlet中创建成员!创建局部变量即可! 可以创建无状态成员! 可以创建有状态的成员,但状态必须为只读的!
六.ServletContext: 1.一个项目只有一个ServletContext对象! 2.我们可以在N多个Servlet中来获取这个唯一的对象,使用它可以给多个Servlet传递数据! 3.与天地同寿!!!这个对象在Tomcat启动时就创建,在Tomcat关闭时才会死去! 4.ServletContext对象的作用:是在整个Web应用的动态资源之间共享数据!例如在AServlet中向ServletContext对象中保存一个值,然后在BServlet中就可以获取这个值,这就是共享数据了。 5.获取ServletContext: 在Servlet中获取ServletContext对象: 在void init(ServletConfig config)中:ServletContext context = config.getServletContext();,ServletConfig类的getServletContext()方法可以用来获取ServletContext对象; 在GenericeServlet或HttpServlet中获取ServletContext对象: GenericServlet类有getServletContext()方法,所以可以直接使用this.getServletContext()来获取;
七. 域对象的功能 ServletContext是JavaWeb四大域对象之一: PageContext; ServletRequest; Httpsession; ServletContext; 所有域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据,下面是ServletContext对象用来操作数据的方法: void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性,例如:servletContext.setAttribute(“xxx”, “XXX”),在ServletContext中保存了一个域属性,域属性名称为xxx,域属性的值为XXX。请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性与Map相同; Object getAttribute(String name):用来获取ServletContext中的数据,当前在获取之前需要先去存储才行,例如:String value = (String)servletContext.getAttribute(“xxx”);,获取名为xxx的域属性; void removeAttribute(String name):用来移除ServletContext中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做; Enumeration getAttributeNames():获取所有域属性的名称;
八.获取资源相关方法
获取真实路径(*) 还可以使用ServletContext对象来获取Web应用下的资源,例如在hello应用的根目录下创建a.txt文件,现在想在Servlet中获取这个资源,就可以使用ServletContext来获取。
获取a.txt的真实路径:String realPath = servletContext.getRealPath(“/a.txt”),realPath的值为a.txt文件的绝对路径:F:/tomcat6/webapps/hello/a.txt; 获取b.txt的真实路径:String realPath = servletContext.getRealPath(“/WEB-INF/b.txt”);
九获取类路径下资源 获取类路径资源,类路径对一个JavaWeb项目而言,就是/WEB-INF/classes和/WEB-INF/lib/每个jar包! Class ClassLoader: 这里要讲的是获取类路径下的资源,对于JavaWeb应用而言,就是获取classes目录下的资源。
InputStream in = this.getClass().getResourceAsStream("/xxx.txt"); System.out.println(IOUtils.toString(in)); InputStream in = this.getClass().getClassLoader().getResourceAsStream("xxx.txt"); System.out.println(IOUtils.toString(in));Class类的getResourceAsStream(String path): 路径以“/”开头,相对classes路径; 路径不以“/”开头,相对当前class文件所有路径,例如在cn.itcast.servlet.MyServlet中执行,那么相对/classes/cn/itcast/servlet/路径; ClassLoader类的getResourceAsStream(String path): 相对classes路径;
新闻热点
疑难解答