JavaWeb中的域对象

对于JavaWeb应用,都需要很多个Servlet来完成不同页面的不同请求处理,那么对于数据就出现一个共享问题,可能多个Servlet都需要一个页面的数据,这一个页面的数据不可能去请求多个Servlet,那么域对象就会帮我们解决这个问题,完成不同Servlet之间数据的共享问题。
ServletContext
ServletContext是全局域对象
生命周期
当web应用被加载到容器时,创建ServletContext全局域对象,代表整个web应用,当服务器关闭或web应用被移除时,ServletContext对象才会被销毁
作用
整个web应用中的Servlet都可以共享全局域对象,所以Servlet之间可以通过ServletContext来实现通信
应用

  • 多个Servlet之间实现数据共享
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //可以通过配置对象获取ServletContext(全局域对象)
        //该对象由服务器创建,服务器启动该对象就会被创建
        String name="张三";
        ServletContext sc = this.getServletContext();
        //将数据存放到sc全局域对象中
        sc.setAttribute("name",name);
    }
    //第二个Servlet
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取到name对象
        ServletContext servletContext = this.getServletContext();
        System.out.println((String) servletContext.getAttribute("name"));//张三
    }
  • 获取web应用的初始化参数
String username = servletContext.getInitParameter("username");//获取web.xml中初始化参数的方法
        System.out.println(username);
  • 通过全局域对象进行内部的请求转发
  • 读取资源文件
    ServletContext.getRealPath(),ServletContext.getResourceAsStream()
    非Servlet获取资源文件,需要使用类加载器将资源文件加载到内存中。
Properties properties = new Properties();
        //web项目中普通的类读取src下的文件
        InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
        properties.load(in);

Session与Cokkie
会话跟踪是web程序用来跟踪整个会话的技术。
Cookie是在客户端记录用户信息
Session是在服务器端记录用户信息

web程序中,一个用户的所有请求操作属于一次会话,另一个用户请求操作属于另一次会话 ,但是web程序是使用http协议传递数据的,在数据交换完毕后,服务器与客户端建立的连接就会关闭,再次请求会建立新的连接,但是新的连接需要使用上次连接的数据这就需要引入会话域。

Cookie就相当于一个“通行证”,在客户端用来保存服务器返回的数据,当下次访问服务器时会将Cookie中的数据一起带上给服务器,而服务器就可以通过获取Cookie中的数据就能进行逻辑处理。

Cookie有不可跨域名性
不同的网站会给用户返回不同的Cookie数据,但是在再次访问不同的网站时只会带上各自网站的Cookie,从而保障用户的数据安全。

Cookie的有效期
Cookie中有MaxAge()属性,可以设置浏览器保存的Cookie数据的时间,单位是秒,保存时间过后,浏览器会自动删除Cookie数据。maxAge()为负数的情况下,代表Cookie数据在本次浏览器窗口以及子窗口中有效,关闭浏览器该数据也不会被保存。

Session机制就是在服务器上保存用户的信息,返回给用户一个id,用户再次访问时,Http协议的Cookie头会带上该id,然后服务器获取到id就可以获得该用户的信息。
Session也是一种key-value的属性对,通过getAttribute(Stringkey)和setAttribute(String key,Objectvalue)方法读写客户状态信息。Servlet里通过request.getSession()方法获取该客户的Session

Session的生命周期
Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。

Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE静态资源并不会创建Session。如果没有生成Session,也可以使用request.getSession(true)强制生成Session。

Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。

Session需要浏览器的支持,因为Session需要Cookie作为识别标志,服务端会向客户端发送一个名为JSESSIONID的Cookie,用来记录服务端Session的id,根据这个id区别用户。
浏览器也有功能可以禁止Cookie,也就是禁止浏览器记录Cookie数据,这时就需要URL地址重写
URL地址重写:
为了解决浏览器不支持Cookie,可以将JESSIONID写入到URL地址中,服务器就可以通过解析地址来获取到JESSIONID,这样就可以防止浏览器不支持Cookie也可以通过Session来获取用户信息。

Cookie与Session的区别

  • Cookie将数据存放在客户端,Session将数据存放在服务端
  • Cookie安全性不高,用户可以通过分析Cookie数据也可以进行修改
  • Session会在一定时间保存在服务器,但是当用户访问过多,会给服务器带来压力

request
请求域
request是在一次请求链中的对象。
浏览器在对服务器的一次请求中,如果在服务器内部进行请求转发,也属于一次请求;要是服务器内部是重定向,那么就是两次请求,那么在请求域中存放的数据也不能被共享。
在一次请求中,可以通过getAttribute、setAttribute这两个方法获取,存储数据。
pageContext
pageContext是JSP页面的对象
生命周期
对JSP页面请求的时候创建,响应结束后销毁
pageContext对象封装了8大隐式对象,通过它可以获得其它的8个对象。

getException()返回Exception。
getPage()返回Page。
getRequest()返回request。
getResponse()返回response。
getServletConfig()返回config。
getServletContext()返回application。
getSession()返回session。
getOut()返回out。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值