JavaWeb三大组件
1 Servlet1.1 生命周期方法1.1.1 void init(ServletConfig):加载和实例化:当客户端发送一个请求时,Servlet容器(Tomcat)会查找内存中是否存在Servlet实例,如果不存在,就创建一个Servlet实例。如果存在Servlet实例,就直接从内存中取出该实例来响应请求初始化:初始化Servlet时,可以设置数据库连接参数,建立JDBC
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,启动时就完成创建
<servlet><load-on-startup>
</load-on-startup></servlet> 非负整数
1.4.2 <url-pattern>
访问路径中使用通配符
<url-pattern>/*<url-pattern>匹配所有
<url-pattern>*.do<url-pattern>匹配扩展名是.do的所有路径
<url-pattern>/servlet/*</url-pattern>匹配/servlet路径候的所有的路径
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有效活动时间
<Session-
config><Session-timeout>30</Session-timeout></Session-config> Session相关API
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中配置
<filter><filter-name>AFilter</filter-name><filter-class>过滤器的全限定名</filter-class></filter><filter-mapping><filter-name>AFilter</filter-name> <url-partten>拦截的资源</url-partten></filter-mapping<
2.1.2 过滤器的生命周期
void # init(FilterConfig) :
在服务器启动时会创建Filter实例,并且每个类型的Filter只创建一个实例,从此不再创建
在创建完Filter实例后,会马上调用init()方法完成初始化工作,这个方法只会被执行一次
void # doFilter( ServletRequest request, ServletResponse response, FilterChain chain)
参数FilterChain中有一个方法doFilter(ServletRequest,ServletResponse): 表示放行
这个方法会在用户每次访问“目标资源(<url->pattern>index.jsp</url-pattern>)”时执行
如果需要“放行”,那么需要调用FilterChain的doFilter(ServletRequest,ServletResponse)方法,如果不调用FilterChain的doFilter()方法,那么目标资源将无法执行
void # destroy():
服务器会在创建Filter对象之后,把Filter放到缓存中一直使用,通常不会销毁它
一般会在服务器关闭时销毁Filter对象,在销毁Filter对象之前,服务器会调用Filter对象的destory()方法
2.1.3 参数类型
FilterChain
参数FilterChain中有一个方法doFilter(ServletRequest,ServletResponse): 表示放行
这个方法会在用户每次访问“目标资源(<url->pattern>index.jsp</url-pattern>)”时执行
FilterConfig
ServletContext getServletContext():获取ServletContext的方法
String getFilterName():获取Filter的配置名称;与<filter-name>元素对应
String getInitParameter(String name):获取Filter的初始化配置,与<init-param>元素对应
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 获取属性值
更多推荐
所有评论(0)