Servlet(二)

 

ServletConfig对象
  9.1 作用
    ServletConfig对象: 主要是用于加载servlet的初始化参数。在一个web应用可以存在多个ServletConfig对象(一个Servlet对应一个ServletConfig对象)
  9.2 对象创建和得到
    创建时机: 在创建完servlet对象之后,在调用init方法之前创建。
    得到对象: 直接从有参数的init方法中得到!!!

  9.3 servlet的初始化参数配置

    <servlet>
      <servlet-name>ConfigDemo</servlet-name>
      <servlet-class>gz.itcast.f_config.ConfigDemo</servlet-class>
      <!-- 初始参数: 这些参数会在加载web应用的时候,封装到ServletConfig对象中 -->
      <init-param>
        <param-name>path</param-name>
        <param-value>e:/b.txt</param-value>
      </init-param>
    </servlet>


注意: servlet的参数只能由当前的这个sevlet获取!!!!

ServletConfig的API:
java.lang.String getInitParameter(java.lang.String name) 根据参数名获取参数值
java.util.Enumeration getInitParameterNames() 获取所有参数
ServletContext getServletContext() 得到servlet上下文对象
java.lang.String getServletName() 得到servlet的名称

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 //@WebServlet("/DemoAction") 
10 public class DemoAction  extends HttpServlet{
11 
12     private static final long serialVersionUID = 1L;
13 
14     @Override
15     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
16         String str=this.getInitParameter("abc");
17         System.out.println(str);
18     }
19 
20     
21 }
注意:注解@Web("/DemoAction")和web.xml中的信息配置不能同时存在,不然会报空指针异常
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
 3  
 4  <servlet>
 5         <servlet-name>DemoAction</servlet-name>
 6         <servlet-class>com.uplooking.controller.DemoAction</servlet-class>
 7         <init-param>
 8             <param-name>abc</param-name>
 9             <param-value>123</param-value>
10         </init-param>
11         <load-on-startup>1</load-on-startup>
12 </servlet>  
13 
14 <servlet-mapping>
15         <servlet-name>DemoAction</servlet-name>
16         <url-pattern>/DemoAction</url-pattern>
17 </servlet-mapping>
18  
19   <display-name>180911</display-name>
20   <welcome-file-list>
21     <welcome-file>index.html</welcome-file>
22     <welcome-file>index.htm</welcome-file>
23     <welcome-file>index.jsp</welcome-file>
24     <welcome-file>default.html</welcome-file>
25     <welcome-file>default.htm</welcome-file>
26     <welcome-file>default.jsp</welcome-file>
27   </welcome-file-list>
28 </web-app>

从浏览器键入URL:http://localhost:8081/180911/DemoAction

执行结果:会从web.xml中去读取param-value的值

 

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletConfig;
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 //@WebServlet("/DemoAction")
12 public class DemoAction  extends HttpServlet{
13 
14     ServletConfig config;
15     private static final long serialVersionUID = 1L;
16 
17     @Override
18     public void init(ServletConfig config) throws ServletException { //调用init的含参的函数
19         this.config=config; 
20     }
21 
22     @Override
23     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
24         //this是指ServletConfig的对象config
25         //String str=this.getInitParameter("abc");
26         //此处this必须改成config,调用全局变量config,this不再指上述的ServletConfig的对象config,否则会报空指针异常
27         String str=config.getInitParameter("abc"); 
28         System.out.println(str);
29     }
30 }

或者将init()带参函数,使用默认内容,不改变this,也可以执行

@Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config); 
    }

执行结果和上述一样。(结果:123)

带有无参init方法,自带封装好内容

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletConfig;
 6 
 7 import javax.servlet.ServletException;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 
12 //@WebServlet("/DemoAction")
13 public class DemoAction  extends HttpServlet{
14 
15     ServletConfig config;
16     private static final long serialVersionUID = 1L;
17 
18     @Override
19     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
20          //this是指ServletConfig的对象config
21         String str=this.getInitParameter("abc");
22         System.out.println(str);
23     }
24 
25     @Override
26     public void init() throws ServletException {
27         // TODO Auto-generated method stub
28         super.init();
29     }
30 }

执行结果一样

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import java.util.Enumeration;
 6 
 7 import javax.servlet.ServletException;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 
12 //@WebServlet("/DemoAction")
13 public class DemoAction  extends HttpServlet{
14 
15     ServletConfig config;
16     private static final long serialVersionUID = 1L;
17 
18     @Override
19     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
20          //this是指ServletConfig的对象config
21        String str=this.getInitParameter("abc");
22         System.out.println(str);
23         Enumeration<String> strs=this.getInitParameterNames();
24         while(strs.hasMoreElements()) {
25             str=strs.nextElement();
26             System.out.println(str+"     "+this.getInitParameter(str));
27         }
28     }
29 
30     @Override
31     public void init() throws ServletException {
32         // TODO Auto-generated method stub
33         super.init();
34     }    
35 }

从浏览器键入URL:http://localhost:8081/180911/DemoAction

执行结果:

 

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 import java.util.Properties;
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 public class DemoAction  extends HttpServlet{
11     private static final long serialVersionUID = 1L;
12 
13     @Override
14     public void init() throws ServletException {
15         super.init();
16     }
17 
18     @Override
19     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
20         String str=this.getInitParameter("path");    
21         Properties p=new Properties();
22 p.load(this.getClass().getClassLoader().getResourceAsStream(str));
23         String user=p.getProperty("DBUSER");
24         System.out.println(user);
25 }

dbconfig.properties中数据

1 DBDRIVER=com.mysql.jdbc.Driver
2 DBUSER=root
3 DBPWD=12345
4 InitialPoolSize=30

读取DBUSER中的值

从浏览器键入URL:http://localhost:8081/180911/DemoAction

执行结果:

 ServletContext对象
            10.1 引入
        ServletContext对象 ,叫做Servlet的上下文对象。表示一个当前的web应用环境。一个web应用中只有一个ServletContext对象。
            10.2 对象创建和得到
            创建时机:加载web应用时创建ServletContext对象。
            得到对象: 从ServletConfig对象的getServletContext方法得到
                    
                我们设计:
                    创建ServletConfig对象
                    public void init( ServletConfig config,ServletContext context ){  多了一个参数
                        得到ServletConfig对象
                        得到ServletContext对象;
                    }

                Sun公司设计
                    1)创建ServletContext对象      ServletContext  context = new ServletContext()        

                    2)创建ServletConfig对象   ServetConfig config = new ServletConfig();
                                              config.setServletContxt(context);
                    class  ServletConfig{
                            ServletContext context;
                            public ServletContext getServletContxt(){
                                return contxt;
                            }
                    }

                    public void init( ServletConfig config ){
                        得到ServletConfig对象
                        从ServletConfig对象中得到ServletContext对象
                        SerlvetContext context = config.getServletContext();
                    }
                

            10.1 ServletContext对象的核心API(作用)
        
            java.lang.String getContextPath()   --得到当前web应用的路径

            java.lang.String getInitParameter(java.lang.String name)  --得到web应用的初始化参数
            java.util.Enumeration getInitParameterNames()  

            void setAttribute(java.lang.String name, java.lang.Object object) --域对象有关的方法
            java.lang.Object getAttribute(java.lang.String name)  
            void removeAttribute(java.lang.String name)  

            RequestDispatcher getRequestDispatcher(java.lang.String path)   --转发(类似于重定向)

            java.lang.String getRealPath(java.lang.String path)     --得到web应用的资源文件
            java.io.InputStream getResourceAsStream(java.lang.String path)  

            10.3 得到web应用路径
                java.lang.String getContextPath()  用在请求重定向的资源名称中
            10.4得到web应用的初始化参数(全局)
            java.lang.String getInitParameter(java.lang.String name)  --得到web应用的初始化参数
            java.util.Enumeration getInitParameterNames()  

                web应用参数可以让当前web应用的所有servlet获取!!!
            10.5域对象有关的方法
                域对象:作用是用于保存数据,获取数据。可以在不同的动态资源之间共享数据。

                    案例:   
                    Servlet1                   Servlet2
                    name=eric                     
                response.sendRedirect("/Servlet2?name=eric")             String request.getParameter("name");
                    保存到域对象中            从域对象获取
                    Student                  
                方案1: 可以通过传递参数的形式,共享数据。局限:只能传递字符串类型。
                方案2: 可以使用域对象共享数据,好处:可以共享任何类型的数据!!!!!

                ServletContext就是一个域对象!!!!

            保存数据:void setAttribute(java.lang.String name, java.lang.Object object)                    
            获取数据: java.lang.Object getAttribute(java.lang.String name)  
            删除数据: void removeAttribute(java.lang.String name)  

            ServletContext域对象:作用范围在整个web应用中有效!!!

                    所有域对象:
                        HttpServletRequet 域对象
                        ServletContext域对象
                        HttpSession 域对象
                        PageContext域对象    

读取web.xml中context中的param-value的值:

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.util.Properties;
 6 
 7 import javax.servlet.ServletContext;
 8 import javax.servlet.ServletException;
 9 import javax.servlet.annotation.WebServlet;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13 
14 @WebServlet("/DemoAction1")
15 public class DemoAction1 extends HttpServlet{
16 
17     private static final long serialVersionUID = 1L;
18 
19     
20     @Override
21     public void init() throws ServletException {
22         super.init();
23     }
24 
25 
26     @Override
27     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
28         //this.getSreletConfig().getServletContext();
29         ServletContext context=this.getServletContext();
30         String root=context.getInitParameter("root");
31         System.out.println("root="+root);
32         
33             //项目路径
34             String contextPath=context.getContextPath();
35             System.out.println(contextPath);
36             
37             //真实路径(绝对路径)
38             String realPath=context.getRealPath("");
39             System.out.println(realPath);
40             
41             InputStream in=context.getResourceAsStream("/WEB-INF/classes/dbconfig.properties");
42             Properties p=new Properties();
43 //            p.load(this.getClass().getClassLoader().getResourceAsStream(str));
44             p.load(in);
45             String user=p.getProperty("DBUSER");
46             System.out.println(user);
47     }
48 }

 

web.xml中context的信息配置

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
 3  
 4  <context-param>
 5          <param-name>root</param-name>
 6          <param-value>123</param-value>
 7  </context-param>
 8  
 9   <display-name>180911</display-name>
10   <welcome-file-list>
11     <welcome-file>index.html</welcome-file>
12     <welcome-file>index.htm</welcome-file>
13     <welcome-file>index.jsp</welcome-file>
14     <welcome-file>default.html</welcome-file>
15     <welcome-file>default.htm</welcome-file>
16     <welcome-file>default.jsp</welcome-file>
17   </welcome-file-list>
18 </web-app>

 从浏览器键入URL:http://localhost:8081/180911/DemoAction1

执行结果:

 10.6 转发
             RequestDispatcher getRequestDispatcher(java.lang.String path)

            1)转发
                 a)地址栏不会改变
                 b)转发只能转发到当前web应用内的资源
                c)可以在转发过程中,可以把数据保存到request域对象中

            2)重定向            
                a)地址栏会改变,变成重定向到地址。
                b)重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。
                c)不能再重定向的过程,把数据保存到request中。

            结论: 如果要使用request域对象进行数据共享,只能用转发技术!!!


            总结:
                Servlet编程:
                    Servlet生命周期(重点)
                    其他都是应用的东西(敲代码练习)
1、转发

示意图:

 

 

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 @WebServlet("/DemoAction2")
12 public class DemoAction2 extends HttpServlet{
13 
14     private static final long serialVersionUID = 1L;
15 
16     @Override
17     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
18 //        this.getServletContext().getRequestDispatcher(path); 等同于下面的语句,直接封装好,简洁
19 //        req.getServletContext().getRequestDispatcher(path);
20         //转到另一个资源
21         //转发一次资源 状态200 foward携带的是request和response的数据
22         //携带的必须是本地工程内的资源,若是外地资源,则会报错404
23         req.getRequestDispatcher("index.jsp").forward(req,resp);
24         //req.getRequestDispatcher("www.baidu.com").forward(req,resp);-->外部资源,报错404
25     }
26     
27 
28 }

 index.jsp中

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10         天王盖地虎,宝塔镇河妖
11 </body>
12 </html>

 

从浏览器键入URL:http://localhost:8081/180911/

执行结果:

 从浏览器键入URL:http://localhost:8081/180911/DemoAction2

执行结果:


重定向

示意图:

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 @WebServlet("/DemoAction2")
12 public class DemoAction2 extends HttpServlet{
13 
14     private static final long serialVersionUID = 1L;
15 
16     @Override
17     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
18         //重定向URL(内部资源)
19         //发送状态码
20         //第一种方式:
21       resp.setStatus(302);
22       resp.setHeader("location", "index.jsp");
23         //第二种方式:
24     //resp.sendRedirect("index.jsp");
25     }
26        //可以访问外部资源
27     //resp.sendRedirect("www.baidu.com");
28 }

 从浏览器键入URL:http://localhost:8081/180911/DemoAction2

执行结果:

 注意form表单提交问题

1、转发的form表单提交问题:

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 @WebServlet("/DemoAction2")
12 public class DemoAction2 extends HttpServlet{
13 
14     private static final long serialVersionUID = 1L;
15 
16     @Override
17     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
18        //转发 form表单提交问题 此处index.jsp还是/index.jsp都一样
19     req.getRequestDispatcher("index.jsp").forward(req,resp);    
20 
21     }
22 }

 index.jsp中:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10         天王盖地虎,宝塔镇河妖
11         <form action="DemoAction2">      //注意:当有多个文件,比如还有user文件时,要调用user中的DemoAction,需要写成“user/DemoAction2”!!!
12             <input type="submit"  value="提交1(不带斜杠)">                  
13         </form>
14         <br>
15         <form action="/DemoAction2">     //带斜杠会改变文件的路径
16             <input type="submit"  value="提交2(带斜杠)">
17         </form>
18 </body>
19 </html>

从浏览器键入URL:http://localhost:8081/180911/

提交1执行结果:

提交2执行结果:

 2、重定向的form表单提交问题:

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 @WebServlet("/DemoAction2")
12 public class DemoAction2 extends HttpServlet{
13 
14     private static final long serialVersionUID = 1L;
15     @Override
16     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {    
17       //重定向 form提交问题 将index.jsp变成/index.jsp
18       resp.sendRedirect("/index.jsp");
19 
20     }
21 }

从浏览器键入URL:http://localhost:8081/180911/DemoAction2

执行结果:

 四、四大通讯作用域
    1.page   只适合当前页面
    2.request   一次通讯 重定向时会丢失数据 适合一次通讯 清亮 例如:查询数据
    3.session   包时通讯 数据有生命周期 可以自己设定 默认是15分钟 适合重复使用的数据 例如 登陆
    4.application  服务器运行 就一直存在 适合一些常量数据

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 @WebServlet("/RequestAction")
12 public class RequestAction extends HttpServlet{
13     private static final long serialVersionUID = 1L;
14         public RequestAction() {
15             super();
16         }
17         @Override
18         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
19             //request作用域 一次有效
20             //设置数据
21             request.setAttribute("msg","我是RequestAction作用域");
22         
23             //转发   只能通过转发传递出去
24             request.getRequestDispatcher("msg.jsp").forward(request,response);
25         
26         }
27 }

msg.jsp文件

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"  isELIgnored="false"  %>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10         <!-- EL表达式 -->
11         <!-- jsp java表达式 -->
12         ${requestScope.msg}
13 </body>
14 </html>

从浏览器键入URL:http://localhost:8081/180911/RequestAction

执行结果:

 



 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 @WebServlet("/RequestAction")
12 public class RequestAction extends HttpServlet{
13     private static final long serialVersionUID = 1L;
14         public RequestAction() {
15             super();
16         }
17         @Override
18         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
19             //request作用域 一次有效
20             //设置数据
21             request.setAttribute("msg","我是RequestAction作用域");
22             
23             //重定向 会丢失Request作用域的数据
24             response.sendRedirect("msg.jsp");    
25         }    
26 }

从浏览器键入URL:http://localhost:8081/180911/RequestAction

执行结果:     

Session

1、转发

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 import javax.servlet.http.HttpSession;
11 
12 @WebServlet("/SessionAction")
13 public class SessionAction extends HttpServlet {
14     private static final long serialVersionUID = 1L;
15         public SessionAction() {
16             super();
17         }
18         @Override
19         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
20             //session 作用域
21             //包时 在制定时间内有效 消耗比较大 生成在同一个浏览器内有效
22             //获取session
23             HttpSession session=request.getSession();
24             session.setAttribute("msg","我是session作用域");
25             
26             //转发
27             request.getRequestDispatcher("msg.jsp").forward(request,response);
28             }
29    }     

 

在web.xml中写入

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"  isELIgnored="false"  %>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10         <!-- EL表达式 -->
11         <!-- jsp java表达式 -->
12         ${sessionScope.msg}、
13         <!-- 前端接收Session的内容 -->
14 </body>
15 </html>

 

从浏览器键入URL:http://localhost:8081/180911/SessiontAction(信息存在)

执行结果:    

 

从浏览器键入URL:http://localhost:8081/180911/msg.jsp(信息存在)

执行结果:   

 

 更换浏览器键入URL:http://localhost:8081/180911/msg.jsp(信息不存在)

执行结果:   

 

 更换浏览器键入URL:http://localhost:8081/180911/SessionAction(信息存在)

执行结果:  

2、重定向

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 import javax.servlet.http.HttpSession;
11 
12 @WebServlet("/SessionAction")
13 public class SessionAction extends HttpServlet {
14     private static final long serialVersionUID = 1L;
15         public SessionAction() {
16             super();
17         }
18         @Override
19         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
20             //session 作用域
21             //包时 在制定时间内有效 消耗比较大 生成在同一个浏览器内有效
22             //获取session
23             HttpSession session=request.getSession();
24             session.setAttribute("msg","我是session作用域");
25             
26            //重定向  不会丢失 可是设置时效
27             response.sendRedirect("msg.jsp");
28         }
29 }

从浏览器键入URL:http://localhost:8081/180911/SessiontAction(信息存在,不会失效)

执行结果:

 设置Seeeion时效,应用在登陆7天后,登录信息后失效。

两种方法:

1、在程序中设置时效,优先级最高,单位为秒

1             //设置session时效 优先级最高 以秒为单位
2             session.setMaxInactiveInterval(5);

例如:

 

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 import javax.servlet.http.HttpSession;
11 
12 @WebServlet("/SessionAction")
13 public class SessionAction extends HttpServlet {
14     private static final long serialVersionUID = 1L;
15         public SessionAction() {
16             super();
17         }
18         @Override
19         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
20             //session 作用域
21             //包时 在制定时间内有效 消耗比较大 生成在同一个浏览器内有效
22             //获取session
23             HttpSession session=request.getSession();
24             session.setAttribute("msg","我是session作用域");
25             
26             //设置session时效 优先级最高 以秒为单位
27             session.setMaxInactiveInterval(5);
28             
29             //重定向  不会丢失 可是设置时效
30              response.sendRedirect("msg.jsp");
31         }
32 
33 }

执行结果:我是session作用域5秒后消失

2、在web.xml中设置时效,优先级第二,单位为分

1 <!-- 设置session时效  单位是分 优先级排第二 程序中设置时效为第一 -->
2 <session-config>
3          <session-timeout>5</session-timeout>
4  </session-config>

注销Session

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 import javax.servlet.http.HttpSession;
11 
12 @WebServlet("/RemoveAction")
13 public class RemoveAction extends HttpServlet {
14     private static final long serialVersionUID = 1L;
15         public RemoveAction() {
16             super();
17         }
18         @Override
19         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
20             //session 作用域
21             //包时 在制定时间内有效 消耗比较大 生成在同一个浏览器内有效
22             //获取session
23             HttpSession session=request.getSession();
24             //第一种移除
25             //session.removeAttribute("msg");
26             //第二种移除  使无效
27             session.invalidate(); 
28             request.getRequestDispatcher("msg.jsp").forward(request,response);
29         }
30 }

msg.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"  isELIgnored="false"  %>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10         <!-- EL表达式 -->
11         <!-- jsp java表达式 -->
12         ${sessionScope.msg}<a href="RemoveAction" >退出</a>
13 </body>
14 </html>

从浏览器键入URL:http://localhost:8081/180911/SessiontAction

执行结果:

 

点击退出:

 

从浏览器键入URL:http://localhost:8081/180911/msg.jsp(信息不存在)

执行结果:

 

Application

 1 package com.uplooking.controller;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletContext;
 6 import javax.servlet.ServletException;
 7 import javax.servlet.annotation.WebServlet;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 
12 
13 @WebServlet("/ApplicationAction")
14 public class ApplicationAction extends HttpServlet {
15     private static final long serialVersionUID = 1L;
16         public ApplicationAction() {
17             super();
18         }
19         @Override
20         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
21             //application 作用域  消耗特别大 与服务器共生死
22             //获取application 作用域
23             ServletContext context=request.getServletContext();
24             context.setAttribute("user","老王");
25             request.getRequestDispatcher("msg.jsp").forward(request,response);
26         }
27 }

web.xml中

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"  isELIgnored="false"  %>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10         <!-- EL表达式 -->
11         <!-- jsp java表达式 -->
12         ${user}
13 </body>
14 </html>

从浏览器键入URL:http://localhost:8081/180911/ApplicationAction

执行结果:

 

从浏览器键入URL:http://localhost:8081/180911/msg.jsp

执行结果:

 

更换浏览器,从浏览器键入URL:http://localhost:8081/180911/msg.jsp(信息依然存在)

执行结果:

 

posted @ 2018-09-11 21:40  echola_mendes  阅读(166)  评论(0编辑  收藏  举报