java Servlets(二)

1.创建servlet对象(通过load-on-startup来决定在什么时候被创建);
2.当servlet对象被创建成功以后,容器马上会调用它的有参的init方法---init只被调用一次;
3.服务客户端请求,客户端发起一个请求,容器就会调用servlet的service方法,并且传入ServletRequest,
ServletResponse对象;------service方法可以被调用多次;
4.当容器关闭或则应用被卸载的时候,servlet对象会被销毁,在销毁之前容器会调用destroy方法,
----destroy只被调用一次;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Datasource中存放的是collection;可以通过new来新建一个,也可以在目录服务器中通过JNDI获取;
跳转:内部跳转和外部跳转;最大区别:请求是否是同一个;
cookie&session:记录用户相关状态;最大区别:存放的位置不同;session可以存放对象.cookie不可以;
JSESSIONID一般是通过cookie写入客户端,如果关闭cookie则不能使用session;所以还有另外的方法;
URL重写:
<a href=state/modifyRelease;jsessionid=XXXXXXXX>modifyRelease</a>
------------------------------------------------------------------------------------------
req.getSession()
从request对象中获取jsessionid,如果根据这个jsessionid找不到一个对应的session
对象,则创建一个新的session对象返回,如果能找到则返回找到的session对象;
req.getSession(boolean create)
如果create为true,等价于req.getSession();
如果create为false,根据request对象传过来的jsessionId查找对应的session对象,如果能找到则返回
找不到则返回null;
六、request、session、application
request生命周期:生于容器接收到请求,死于servlet产生响应;
session生命周期公司
创建:客户端访问一个servlet,在servlet中调用了req.getSession方法;
销毁:1.关闭浏览器进程;
     2.session过期;(在web.xml中指定<session-timeout>10</session-timeout>10钟后过期)
     3.调用session.invalidate()方法;
不建议将大量数据放在内存中,这样会比较消耗服务器内存的;
requestScope=====>HttpServletRequest对象  (Scope:作用范围)
request.setAttribute(name,value)
Object value=request.getAttribute(name);
request.removeAttribute(name)
sessionScope=====>HttpSession对象
session.setAttribute(name,value)
Object value=session.getAttribute(name)
session.removeAttribute(name)
applicationScope=====>ServletContext对象
对于一个应用来说ServletContext对象是唯一的,存放所有用户登陆的共用信息;
创建:应用装载的时候
销毁:应用卸载的时候
sc.setAttribute(name,value)
Object value=sc.getAttribute(name)
sc.removeAttribute(name)
七、Filter:过滤器
对服务器上的特定资源采取措施,进行限制
Filter的应用:延迟登录、编码转换、审计......
Filter的使用步骤:
  1)写Filter类
     implements javax.servlet.Filter接口
     重写Filter接口中的方法init(FilterConfig),
     doFilter(ServletRequest,ServletResponse,FilterChain) , destroy()
  2)在web.xml中进行配置
    <filter>
<filter-name> 自己取,但要和<filter-mapping>中的对应 <filter-name>
<filter-class> Filter类的全限定名 </filter-class>
<init-param>

<param-name>...</param-name>
<param-value>...</param-value>
<init-param>
    </filter>
    在程序中通过FilterConfig.getInitParameter("name")取
    <filter-mapping>
<filter-name> 和<filter>中的对应 </filter-name>
<url-pattern> Filter所限制访问的资源路径 </url-pattern>
    </filter-mapping>
    比如我们将<url-pattern>设为/ch5/*,那么我们在浏览器中访问/ch5下的
    资源时Filter就会自动被调用
Filter的生命周期:
  1)init(FilterConfig)
    由容器调用,并且只调用一次
  2)doFilter(ServletRequest,ServletResponse,FilterChain)
    访问限定资源时,被调用,会被调用多次,注意考虑多线程问题,
    处理方式和Servlet中的一样
  3)destroy()
    由容器调用,并且只调用一次
  FilterChain.doFilter(ServletRequest,ServletResponse):可以认为是处理请求和
  响应的分界限,在chain.doFilter(...)之前处理请求,在chain.doFilter(...)之后
  处理响应
  注意:一旦写了Filter一定要在Filter.doFilter(...)中调用FilterChain.doFilter()
  方法,将请求交由其他资源继续处理
编码转换:
  request.setCharacterEncoding("UTF-8");
  chain.doFilter(request, response);
  response.setCharacterEncoding("UTF-8");
  过滤的url: /*
  相同的资源可以被多个Filter过滤,Filter的执行顺序取决于web.xml中配置的
  <filter-mapping>的顺序
八、监听器
监听器,对特定事件所采取的控制
常见事件:应用服务器的启动/关闭,会话的创建/删除,请求的创建/删除,属性的增加、替换、删
除等
Listener分类
应用级别:
ServletContextListener:
void  contextDestroyed(ServletContextEvent sce):监听应用服务器的关闭
void  contextInitialized(ServletContextEvent sce): 监听应用服务器的启动
ServletContextAttributeListener:
void  attributeAdded(ServletContextAttributeEvent scab):
监听应用级别属性的增加,即ServletContext.setAttribute("user","briup")
void  attributeRemoved(ServletContextAttributeEvent scab):
监听应用级别属性的删除,即ServletContext.removeAttribute(...)
void  attributeReplaced(ServletContextAttributeEvent scab):
监听应用级别属性的替换,即使ServletContext.setAttribute("user","ibm")
会话级别:
HttpSessionListener
void  sessionCreated(HttpSessionEvent se):监听会话的创建
如,HttpServletRequest.getSession()
void  sessionDestroyed(HttpSessionEvent se):监听会话的删除
如,HttpSession.invalidate()
HttpSessionAttributeListener
void  attributeAdded(HttpSessionBindingEvent se)
监听会话级别属性的增加,即HttpSession.setAttribute(...,...)
void  attributeRemoved(HttpSessionBindingEvent se)
监听会话级别属性的删除,即HttpSession.removeAttribute(...)
void  attributeReplaced(HttpSessionBindingEvent se)
监听会话级别属性的替换,即HttpSession.setAttribute(...,...)
请求级别:
ServletRequestListener
void  requestDestroyed(ServletRequestEvent sre):监听请求的删除
void  requestInitialized(ServletRequestEvent sre):监听请求的创建
ServletRequestAttributeListener
void  attributeAdded(ServletRequestAttributeEvent srae)
监听请求级别属性的增加,即HttpServletRequest.setAttribute(...,...)
void  attributeRemoved(ServletRequestAttributeEvent srae)
监听请求级别属性的删除,即HttpServletRequest.removeAttribute(...)
void  attributeReplaced(ServletRequestAttributeEvent srae)
监听请求级别属性的替换,即HttpServletRequest.setAttribute(...)
注:Listener程序不需要我们去调用,它由相应的事件触发执行
配置文件中:<listener>
   <listener-class>ch07.ContextListener</listener-class>
      </listener>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值