zoukankan      html  css  js  c++  java
  • 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(信息依然存在)

    执行结果:

  • 相关阅读:
    System.Net.Http.HttpClient POST 未能创建 SSL/TLS 安全通道
    SQL Server用户权限查询
    IIS 7 Deploy .Net Framework 4.8 Application
    System.Net.Http.HttpClient 模拟登录并抓取弹窗数据
    HtmlAgilityPack Sample
    嵌套 struct & class 的遍历
    SQL循环插入测试数据
    windows文本转语音 通过java 调用python 生成exe可执行文件一条龙
    Centos8 删除了yum.repos.d 下面的文件
    nacos 配置
  • 原文地址:https://www.cnblogs.com/echola/p/9630551.html
Copyright © 2011-2022 走看看