javaWeb编程_Servlet03

一、JavaWeb四大域对象的作用范围:

在javaWeb编程中,可以在四个不同大小的可访问范围(时间、空间)中设置属性对象,即将一个对象绑定到一个字符串上。

1、pageContext:

作用范围为jsp页面本身,是最小的一个作用范围。

对应内置对象是pageContext,EL中可以用pageScope获取此对象。

设置该范围属性的写法是:pageContext.setAttribute(String,Object);

2、HttpServletRequest   request:

作用范围:只在一次请求链中有效(包括将此请求转发到其他的页面),也即是从客户端发来一次请求开始,到    服务端响应结束。

常用的几个方法:

 void     request.setAttribute( String,Object);

该方法把对象和一个String 型的键值绑定在一起,可以通过request.getAttribute( String);方法取出。

Object     request.setAttribute( String);

该方法可以把之前设置的属性取出来。

void request.removeAttribute(String);

该方法可以移除之前绑定的对象

Enumerationrequest.getAttributeNames();

该方法返回request域中所有属性的枚举

例如:

这里设置了两个属性 username ,password ,当前servlet 转发到testRequset.jsp页面中,在testRequset.jsp页面中可以取出这里设置的值,但是直接去访问testRequset.jsp页面 的值取出来就是空值,这里就充分体现了只在一次请求链中有效。

3、HttpSession session

     (1)session简单介绍:

              在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

  (2)session和cookie的区别

    .Cookie是把用户的数据写给用户的浏览器。

    .Session技术把用户的数据写到用户独占的session中。

    .Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。

  (3)浏览器和服务器:

     浏览器发送一次请求到服务器,服务器首先判断,该浏览器是否携带一个sessionId值,如果这次请求没有携带

一个sessionId值,服务器就知道这是第一次访问服务器。

     浏览器开始与该服务器开始建立会话,服务器会在响应请求的同时,将产一个SessionId,作为该次会话的标识,再把该sessionId发送给浏览器,浏览器就拥有一个sessionId值了,当浏览器再次访问时,将会判断出给此次请求携带sessionId,代表这不是一个新的请求。

  (4)常用的方法:

        session.getId();
        session.setAttribute(String, Object);
        session.getAttribute("String");

     tomcat 默认 session的有效时间是30分钟,可在tomcat的配置文件service.xml设置

      <session-config>

          <session-timeout>time</session-timeout>

     <session-config>该配置对服务器里运行的项目都有效。

     对单个项目的配置,在单个项目中web.xml中添加:

      <session-config>

          <session-timeout>time</session-timeout>

     <session-config>该配置对单个项目有效。

 (5)session的作用范围:

     作用范围是一次会话。(在没超过session的最大有效时间和没销毁session(没调用invalidate方法,或没关闭浏览器和服务器)的情况下

  (6)使session无效的方法:

    a、session.invalidate()执行后,session无效。

    b、session的最大等待时间过后,session无效.

    c、关闭浏览器后,session无效.

    d、关闭服务器后,session无效

  只要浏览器和服务器都没有配对的Sessionid就表示session无效。

 1session中对象的有效时间是30分钟或可直接设置,那其中绑定的的各对象是先后失效的,先绑定的先失效。如果要立即销毁整个session可以调用invalidate(),其中各对象也全部清除

   2、有的服务器可以做到启动后恢复之前的session。即服务器正常关闭,再启动,Session对象会进行钝化和活化操作。同时如果服务器钝化的时间在session默认销毁时间之内,则活化后session中的一些对象还是存在的,否则认为已经被释放了

4、ServletContext:

 (1) 一个Web应用程序中所有的session都共享到一个ServletContext对象,所以该对象称为application对象.

  (2)ServletContext对象在web.xm中用<context-param>用来声明应用范围(整个WEB项目)内的上下文初始化参数。

  1. <context-param>  
  2.   <param-name>contextConfigLocation</param-name>  
  3.   <param-value>contextConfigLocationValue></param-value>  
  4. </context-param>

param-name 设定上下文的参数名称。必须是唯一名称

param-value 设定的参数名称的值

在Servlet里面可以获取代码如下:

   ServletContext application = this.getServletContext();

   //创建application对象

    String contextConfigLocation= application.getInitParameter("contextConfigLocation");

    //通过application对象调用getInitParameter方法来获取值

 3、作用范围:整个Web程序

 总结:作用范围从小到大依次为:PageContextServletRequestSessionServletContext

二、ServletConfig:

  1、在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。(配置在某个servlet标签>

    例如:

      

    在SecondServlet中配置了两个两个参数  Country 和 city 在该servlet类中调用.getInitParameter("country")就可以得到存的值

   当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。

  2、java代码获取config对象的方法:

   ServletConfig config = this.getServletConfig();

   3、常用的几个方法:

  config.getInitParameter(String name)返回对应key的value

   String getServletName();返回该Servlet在配置文件中的名字

   enumerationgetInitParameterName()返回所有参数的名字的一个枚举。


今天的内容就到这了,明天会继续写servlet的笔记,过滤器(Filter)的内容就明天再写了。

 

三、过滤器(Filter)

 

  filter翻译为过滤器。在web项目中,经常需要在正式处理请求前,做一些特殊的处理或常用的例程,于是就发明了这个filter

 filter能做的事情主要包括如下:

1)过滤非法文字和信息;

2)设置统一字符编码;

3)对用户进行登录验证;

4)改变图片文件格式;

5)对相应内容做压缩处理;

6)对XML的输出使用XSLT来进行转换。

步骤一

    通过在web.xml<filter>元素和<filter-mapping>元素来配置filter以决定用户请求的URL应被哪些filter来处理一次:

             

<filter>

<filter-name>HelloFilter</filter-name>

<filter-class>com.eat.servlet.HelloFilter</filter-class>

</filter>

 

<filter-mapping>

<filter-name>HelloFilter</filter-name>

<url-pattern>/eat</url-pattern>

</filter-mapping>


 这个例子中,当用户输入的url和“/eat”匹配时,系统就会使用名为“HelloFilter”的filter先处理这个请求后再将请求传递下去。

步骤二:编写filter

1.我们的filter类需要实现父接口javax.servlet.Filter

2.实现父接口的各个方法。包括init(),doFilter(),destroy()。这3个方法说明如下:

1init()方法和destroy()方法分别用来初始化和销毁时调用。

init()方法在 Filter生命周期中仅执行一次。服务器启动时就会执行。

destory()方法在Filter的生命周期中仅执行一次,即Web容器卸载Filter对象之前调用它。主要做释放资源的操作。

 

2doFilter(req,resp,chain)方法。

    它用来实现过滤,所有的处理代码都放置在该方法中。doFilter()方法接收3个参数,分别是requestresponse、和chain,其中requestresponse用来传递给下一个Filter(如果有多个Filter)或者JSP或者Servletchain参数则通过调用自己的doFilter方法来将请求向下传递,如果没有调用doFilter()方法,则相当于阻止了本次请求

 filter的生命周期

    http服务器(如tomcat)的内部会创建出一个Filter类的对象,这个对象有它自己的创建、调用过滤方法、消亡的过程,也即它的生命周期,这个生命周期的说明如下。

1.服务器启动时就会创建出Filter对象,然后立即调用init()方法来进行一些初始化操作;

2.每当用户的请求来临时,为过滤用户请求而调用doFilter()方法;

3.当这个Filter对象要销毁时,就先调用destroy()方法后再释放此对象。(什么时候会销毁呢?一旦http服务器停止时就会销毁,但是实验中直接从eclipse中停止tomcat时可能不太容易观察到销毁时发生的现象。而是可以通过在eclipse里改变项目代码,此时项目重新发布时会引起tomcat释放以前的各个对象再重建这些对象。)

 

 url匹配

    如果我们要使所有的请求都被某个过滤器进行过滤,那么我们可以使用一个全匹配的url写法,即/*”,示例如下:

<filter-mapping>

<filter-name>HelloFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

    这种情况可以用到比如一个站点要想防ddos攻击,那么这段代码就可以统一做到一个过滤器当中,而这个过滤器是应该能够针对所有的请求都起作用的,因此适合使用/*

    许多的框架也是通过配置filter,并使用/*来将所有的url请求导向到框架自己的处理例程中。




  





     

       


  



 


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值