1 Servlet
1.1 生命周期方法
1.1.1 void init(ServletConfig):
加载和实例化:当客户端发送一个请求时,Servlet容器(Tomcat)会查找内存中是否存在Servlet实例,如果不存在,就创建一个Servlet实例。如果存在Servlet实例,就直接从内存中取出该实例来响应请求
初始化:初始化Servlet时,可以设置数据库连接参数,建立JDBC连接,或是建立对其他资源的引用。初始化阶段,init()方法被调用
1.1.2 void service(ServletRequest request, ServletResponse response):Servlet初始化后,就处于响应请求的就绪状态
1.1.3 void destory():销毁由容器完成,销毁调用Servlet的destroy()方法
1.2 特性
1.2.1 单例,只创建一个对象,线程不安全,效率是高的
1.2.2 Servlet类我们来写,对象由服务器创建,并且由服务器调用其中的方法
1.3 动态资源,处理请求
1.4 配置
1.4.1 正常是第一次访问服务器时创建servlet,启动时就完成创建
非负整数
1.4.2
访问路径中使用通配符
1.5 创建servlet
1.5.1 实现javax.servlet.servlet接口
1.5.2 继承javax.servlet.genriticservlet类
1.5.3 继承javax.servlet.http.httpservlet类型
httpServletRequest
String getParamater(String paramaterName): 获取请求参数 String geMethod():获取请求方法
String getHeader(String headerName):获取请求头
void setCharacterEncoding(Encoding):设置请求字符编码
httpServletResponse
PrintWriter getWriter():获取字符响应流
ServletOutputStream getOutputStream():获取字节响应流
void setCharacterEncoding(String encoding):获取响应编码
void setHeader(String name,String value): 设置响应头
void getContextType(String contextType): 获取响应头类型
void sendError(int code, String errorMesg): 向客户发送错误响应码和错误信息
1.6 Session
1.6.1 Cookie
cookie是由服务器创建的,浏览器第一次访问,服务会创建一个cookie给浏览器带回去。当浏览器第二次访问时,把cookie带给服务器,服务器用来跟踪浏览器的状态
cookie是键值对组成
cookie的头设置
浏览器发送给服务器的头:Cookie
服务器发送给浏览器的头 : Set-Cookie
Cookie的发送和接收
Servlet发送
Cookie cookie = new Cookie("aaa", "AAA") response.addCookie("aaa") Servlet接收
Cookie[] cookies = request.getCookies() if(cookies != null){ for( Cookie cookie : cookies){ cookie.getName(); cookie.getValue(); } } Cookie的细节
Cookie的maxAge
cookie.setMaxAge(-1) : 只在内存中存活,关闭浏览器cookie就会消失 cookie.setMaxAge(60*60): cookie能够在硬盘中存活1个消失
cookie.setMaxAge(0): 表示这个cookie作废,最终这个cookie在内存和硬盘上不存在
Cookie的path
Cookie的Domain:二级域名
Cookie的保存中文,需要对中文编码解码
1.6.2 Session
HttpSession的作用
会话跟踪
域功能
登入信息回现
原理
Session依赖Cookie
浏览器第一次访问服务器时,服务器会创建一个session对象,同时创建一个cookie,把sessionid放在cookie中给浏览器带回去,只要session还存活,浏览器还存在,下次浏览器再次访问时,浏览器就会通过cookie把sessionID返回给服务器,只要浏览器不关闭,下次就可以共享session中的数据了
由于服务器端创建的cookie只能在浏览器中存活,如果客户关闭浏览器,请求中就没有sessionId,再次访问需要重新创建sessionid放在cookie中给浏览器带回
如果Session超过了最大活动时间,失效,此时即使没有关闭浏览器。浏览器的提供的SessionID也没有用了
设置Session有效活动时间
config> String # getId() : 获取SessionId void setMaxInactiveInterval(time) : 设置session最大不活动时间,默认是30分钟 int getMaxInactiveInterval():获取session可以的最大不活动时间(秒),默认为30分钟。当session在30分钟内没有使用,那么Tomcat会在session池中移除这个session long getCreationTime():返回session的创建时间,返回值为当前时间的毫秒值 long getLastAccessedTime():返回session的最后活动时间,返回值为当前时间的毫秒值 void invalidate():让session失效!调用这个方法会被session失效,当session失效后,客户端再次请求,服务器会给客户端创建一个新的session,并在响应中给客户端新session的sessionId boolean isNew():查看session是否为新。当客户端第一次请求时,服务器为客户端创建session,但这时服务器还没有响应客户端,也就是还没有把sessionId响应给客户端时,这时session的状态为新 URL重写 session依赖Cookie,这是因为服务器需要把sessionId保存到客户端。如果用户的浏览器关闭了Cookie功能,那么session不能使用了!还可以在浏览器关闭了Cookie后使用URL重写的方法保存sessionId,这需要在每个URL后面都加上sessionId!这样用户的请求中就包含了sessionId,服务器就可以通过sessionId找到对应的session对象了 1.7 ServletContext 1.7.1 获取 ServletConfig getServletContext() 服务器启动时会创建一个servletcontext对象,它负责在应用程序间传递数据 GenericSevlet getServletContext() HttpSession getServletContext() ServletContextEvent getServletContext() 1.7.2 域对象功能:所有域对象都有存取数据的功能 void setAttribute(String name , Object value) Object getAttribute(String name) void removeAttribute(String name) Enumernation getAttributeNames() 1.7.3 方法 获取初始化参数的方法 String getInitParameter(String name) 获取资源相关方法 获取绝对路径 this.getServletContext.getRealPath("/a.txt") this.getServletContext.getRealPath("/WEB-INF/b.txt") 获取资源流 InputStream # this.getServletContext.getResourceAsStream("/a.txt") InputStream this.getServletContext.getResourceAsStream("/WEB-INF/b.txt") # 获取指定资源下所有资源路径 Set # this.getServletContext.getResourcePaths("/WEB-INF") InputStream # this.getClassLoader().getResourceAsStream("a.txt")======相对于classes文件目录 InputStream # this.getClass().getReasourceAsStream("a.txt")=======相对于.class文件目录 InputStream # this.getClsss().getReasourceAsStream("/a.txt")========相对于classes文件目录 1.8 Request 1.8.1 处理字符编码问题 request.getParameter("username") String name bytes = = byte[] name.getBytes("ISO-8859-1") name = new String(bytes, "utf-8") 1.8.2 request域方法 1.8.3 request获取请求参数 1.8.4 request获取请求表头的方法 1.8.5 request其他方法 String # getMethod() : 获取请求方法 void # setCharacterEncoding("utf-8") : 设置请求编码 String # getContextPath() : 获取上下文路径, /项目名 String # getRemoteAdrr() : 获取请求的IP地址 1.8.6 请求转发; 一次请求,一次响应,留头不留体 request.getRequestDispatcher("/BServlet").forword(request, response) 1.8.7 请求包含: 一次请求,一次响应,留头留体 requet.getRequestDispatcher("/BServlet").include(request, response) 1.8.8 路径 客户端路径 服务器路径 1.9 Response 1.9.1 处理字符编码问题response.setContextType("text/html",charset="utf-8") 1.9.2 字符流: PrintWriter # response.getWriter() 1.9.3 字节流: ServletOutputStream response.getOutStream() 1.9.4 response.fulshBuffer(): 刷新缓冲流 1.9.5 响应码 302:重定向 response.sendRedirect("www.baidu.com") 200:响应成功 304: 找不到资源 1.10 Servlet三个域对象 1.10.1 request 1.10.2 session 1.10.3 application 1.11 Javaweb四大域 : # 1.11.1 pageContext 这个对象代表页面上下文,该对象主要用于访问JSP之间的共享数据 1.11.2 session 一个会话只创建一个sessionContext对象 void session.setAttribute(String name, Object value) Object session.getAttribute(String name) void session.removeAttribute(String name) 1.11.3 request 一次请求只创建一个requestContext对象 1.11.4 servletContext 一个应用程序只创建一个servletContext对象 2 Filter 2.1 基本知识 2.1.1 创建一个过滤器 自定一个过滤器需要实现Filter接口,实现接口中的方法 web.xml中配置 2.1.2 过滤器的生命周期 void # init(FilterConfig) : 在服务器启动时会创建Filter实例,并且每个类型的Filter只创建一个实例,从此不再创建 在创建完Filter实例后,会马上调用init()方法完成初始化工作,这个方法只会被执行一次 void # doFilter( ServletRequest request, ServletResponse response, FilterChain chain) 参数FilterChain中有一个方法doFilter(ServletRequest,ServletResponse): 表示放行 这个方法会在用户每次访问“目标资源( 如果需要“放行”,那么需要调用FilterChain的doFilter(ServletRequest,ServletResponse)方法,如果不调用FilterChain的doFilter()方法,那么目标资源将无法执行 void # destroy(): 服务器会在创建Filter对象之后,把Filter放到缓存中一直使用,通常不会销毁它 一般会在服务器关闭时销毁Filter对象,在销毁Filter对象之前,服务器会调用Filter对象的destory()方法 2.1.3 参数类型 FilterChain 参数FilterChain中有一个方法doFilter(ServletRequest,ServletResponse): 表示放行 这个方法会在用户每次访问“目标资源( FilterConfig ServletContext getServletContext():获取ServletContext的方法 String getFilterName():获取Filter的配置名称;与 String getInitParameter(String name):获取Filter的初始化配置,与 Enumeration getInitParameterNames():获取所有初始化参数的名称 2.1.4 多个过滤器执行顺序 filter1 start... filter2 start... index.jsp filter2 end... filter1 end... 2.1.5 四种拦截方式 REQUEST FORWARD INCLUDE ERROR 2.2 案例 3 Listener 3.1 基本了解 3.1.1 监听器是个接口,内容由我们实现 第16 / 20页 3.1.2 必须要注册事件源上 3.1.3 监听器中的方法会在特殊事件发生时被调用 3.2 事件源 3.2.1 javaweb域 ServletContext 生命周期监听 ServletContextListener void # contextInitialized(ServletContextEevent sce): 创建servletContext时调用 void contextDestroyed(ServletContextEvent sce): 销毁servletcontext时调用 属性监听 ServletContextAttributeListener void # attributeAdded(ServletContextAtrributeEvent evc): 添加属性时调用 void # atrributeReplaced(ServletContextAttributeEvent evc): 替换属性时调用 void # attributeRemoved(ServletContextAttributeEvent evc): 移除属性时调用 HttpSession 生命周期监听 HttpSessionListener void # sessionCreated(HttpSessionEvent se) 第17 / 20页 void # sessionDestroyed(HttpSessionEvent se) 属性监听 HttpSessionAttributeListener void # attributeAdded(HttpSessionBindingEvent event) void # attributeReplaced(HttpSessionBindingEvent event) void # attributeRemoved(HttpSessionBindingEvent event) ServletRequest 生命周期监听 ServletRequestListener void # requestInittialized(ServletRequestEvent sre) void # requestDestroyed(ServletRequestEvent sre) 属性监听 SevletRequestAttributeListener void # attributeAdded(ServletRequestAttribteEvent srae) void # attributeReplaced(ServletRequestAttributeEvent srae) void # atrributeRemoved(ServletRequestAtributeEvent srac) 3.2.2 javabean HttpSessionBindingListener 第18 / 20页 void # valueBound(HttpSessionBindingEvent hsbe):把java对象加入到session中会调用此方法 void # valueUnbound(HttpSessionBindingEvent hsbe): 当把监听对象从session中移除会调用此对象 HttpSessionActivationListener 先不管HttpSessionActivationListener监听器接口,先来配置Tomcat钝化session的参数,把下面配置文件放到tomcat\conf\catalina\localhost目录下!文件名称为项目名称。 第19 / 20页 void # sessionWillPassivate(HttpSessionEvent se): 当对象感知要被持久化到硬盘中时调用此方法 void # sessionDidActiver(HttpSessionEvent se): 当对象感知要被从硬盘中加载到内存中(活化)时调用 3.3 事件 3.3.1 获取域对象 3.3.2 获取属性名 3.3.3 获取属性值