JAVA遇见HTML--JSP篇

1.Javaweb

    ①Web应用程序是一种可以通过Web访问的应用程序。

    ②JavaWeb简介:

            静态网页:

                    表现形式:网页中的内容是固定的、不会更新。

                            不一定没有动态元素。

                    所需技术:HTML、CSS。

            动态网页:

                    表现形式:网页中的内容通过程序动态显示、自动更新(从数据库读出的)。

                            动态网页的动态指的是能与用户进行交互,比如登录时输入正确的用户名和密码,系统会提示登录成功。

                    所需技术:HTML、CSS、数据库、高级语言(Java、PHP)、JS、XML等。


2.Tomcat

    ①tomcat服务器,常见的web服务器。可以解析常见的标签语言。

            是当今最流行的Servlet/JSP容器,免费、成熟、开源。

    

     ②WEB-INF是Java的WEB应用的安全目录。客户端无法访问此目录里的网页文件,只有服务器端才能访问。

         index.jsp:默认被第一个访问的页面(在一个项目中),也可通过左下图方式修改。使用localhost:端口号访问。

        

        Sources:可以管理项目的目录结构,并且能通过不同的颜色标识文件夹的用途!(有时候class类运行不起来,用之解决问题)

    ③修改虚拟路径(即本地访问网页的URL):Run--Edit Configurations--Deployment...然后修改Application context修改即可。

    ④一个Tomcat服务器上可以运行多个实例应用,但是每个实例应用之间要用不同的端口。

        默认情况下,Tomcat的端口号为8080。

        与其他服务器端口造成冲突,可修改默认端口号,在Tomcat--conf--server.xml文件中,将其中的8080更改成其他的端口号。

    <Connector port="8080"

        ......

    />

3.JSP页面组成

    JSP:全名为Java Server Pages,是一个简化的Servlet设计,JSP和Servlet都是在服务端执行的。

            它实现了在Java当中使用HTML标签。

            JSP是一种动态网页技术标准,也是JavaEE的标准。

    

其中:

    ①指令

            page指令:通常位于JSP页面的顶端,同一个页面可以有多个page指令。

                    <%@page 属性1="属性值1" 属性2="属性值1,属性值2"...%>

                            language:指定JSP页面使用的脚本语言,默认值是java。

                            import:通过该属性来引用脚本语言中使用到的类文件,默认值无。(即导入包)

                            contentType:用来指定JSP文件生成的页面所采用的编码方式,默认值是text/html,ISO-8859-1。

                                    ISO-8859-1默认是英文,页面中不能出现中文。若是输入中文,会出现乱码。

                                    contentType的charset是指服务器发给客户端时的输出内容编码,更常用。

                            pageEncoding是jsp文件本身的编码。

            include指令:将一个外部文件嵌入到当前Jsp文件中,同时解析这个页面中的JSP语句。

            taglib指令:使用标签库定义新的自定义标签,在JSP页面中启用定制行为。

    ②注释

            HTML的注释

                    <!-- 我是注释,客户端在源代码里可以看见我。 -->

                    HTML注释注释不了JSP代码。

            JSP的注释

                    <%-- 我是JSP(服务端)注释.客户端啥都看不见哦。 --%>

                    ps:这是服务端注释,在客户端查看源代码时可以看见空行(注释的痕迹)。

            JSP脚本中的注释

                    <%

                            // 一行Java注释。

                            /*多行Java注释*/

                    %>

                    脚本注释也可以看到1行注释的痕迹(查看源代码时)。

    ③声明

            在JSP页面中定义变量或者方法。

            <%! Java代码%>

    ④脚本脚本中只能写Java代码表达。

            <%

                    out.println("keep studying");

             %>

            在脚本中只能用Java注释/JSP注释。

    ⑤表达式

            在JSP页面中执行的表达式。

            <%= 表达式 %>// 表达式不以分号结束。

    <%@ page contentType="text/html;charset=gbk" language="java" %>
    <html>
    <head>
        <title>配置wuwu</title>
    </head>

    <body>
        <h>啦啦啦,坚持下去。</h>
        <!-- 我是HTML注释。 -->
        <%-- 我是JSP注释。 --%>
        <%
          // 我是java单行注释。
          /*
          *我是Java多行注释。
          */
        %>// 脚本注释。
        <%!
          String today = "learn it by heart and use it greatly";
        %>
        今天,我学到了<%= today %>;
        2+3= <%= 2+3 %>
    </body>
    </html>

        

        JSP最终是编译成Servlet来执行的,在编译前会生成一个Java类:Servlet本质也是一个java类。

        -- JSP声明<%! ... %>会被用来生成Java类的成员变量,如int i=i+1; String str="张三"; 

        -- JSP脚本<% ... %>会被用来生成JSP Service方法里面的方法代码,包括局部变量声明,脚本中带分号。

        -- JSP表达式<%= 表达式 %>也会被用来生成输出的方法代码,例如out.print("你好"+str);

    ⑥JSP的页面周期:

          

         第一次请求jsp页面时,首先被执行的方法是构造方法。第一次请求时,JSP引擎会把这个JSP文件转换成为一个Servlet。                 Servlet是一个类,创建它的实例,就会调用Servlet的构造方法。

    基础总结:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>

    <body>
        <h1>九九乘法表</h1>
        <%!
            // 返回99乘法表对应的HTML代码,并且通过表达式调用。
            // 方法1:
            String print() {
                String s ="";
                for(int i=1;i<=9;i++) {
                    int k=0;
                    for(int j=1;j<=i;j++) {
                        k=i*j;
                        s += i+"*"+j+"="+k+"&nbsp;&nbsp;";
                    }// 完成一次内层for循环,打印出一行。
                    s += "<br>";
                }
                return s;
            }
            // 方法2:
            void print0(JspWriter out) throws IOException {
                for(int i=1;i<=9;i++) {
                    int k=0;
                    for(int j=1;j<=i;j++) {
                        k=i*j;
                        out.println(i+"*"+j+"="+k+"&nbsp;&nbsp;");
                    }
                    out.println("");
                }
            }
            // JSP内置对象OUT,使用脚本方式打印乘法表。
        %>
        <%= print() %<!-- 有返回值的函数。 -->
        <% print0(out); %><!-- 直接调用函数打印。 -->
    </body>
    </html>


4.内置对象简介:

    JSP内置对象是Web容器创建的1组对象,不使用new关键字就可以使用。     

 <%
     int[] value = {60,70,80};
     for(int i:value) {
         out.println(i);
     }
 %>

    JSP的9大内置对象:

    Web程序的请求响应模式:用户发送请求(request)、服务器给用户响应(response)。

            如登录页面:点击登录向服务器发送请求,在请求对象中封装了用户名和密码。

                                服务器端接收用户的请求,判断用户名和密码后,给客户端发送响应页面。

    缓冲区:Buffer,即内存的一块区域用来保存临时数据。

    

①out对象:是JspWriter类的实例,向客户端输出内容常用的对象。

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>out内置对象</title>
    </head>
    
    <body>
        <%
            out.println("<h1>终南别业</h1>");
            out.println("行到水穷处、坐看云起时。");
            out.getBufferSize();// 返回缓存区总大小。
            out.getRemaining();// 返回缓冲区剩余多少。
            out.isAutoFlush();// 返回缓冲区满时,是自动清空还是抛出异常。
            // out.clear();// 清除缓存区的内容,在flush之后调用会抛出异常。
            // 在输出前若清除缓存区数据,则得不到输出内容。
            out.flush();// 将缓存区的内容输出到客户端。
            out.clearBuffer();// 清除缓存区的内存,在flush之后调用不会抛出异常。
            int remain = out.getRemaining();
        %>
            缓冲区大小:<%= out.getBufferSize() %>
            缓冲区剩余大小:<%= out.getRemaining() %>
            是否自动清除缓冲区:<%= out.isAutoFlush() %>
            清除后缓冲区剩余大小:<%=remain%>
        <%
            out.close();// 关闭输出流。
        %>
    </body>
    </html>

    

 ①②③:

            get与post:表单提交的两种方式。

    <form name="表单名" action="动作" method="(提交方式)post/get">。

            action:表示这个表单提供给哪个动作(后端内容)去处理。

            get:以明文的方式通过URL提交数据,数据在URL中可以看到。提交的数据<=2KB。安全性较低但是效率比post方式高。

                  适合提交数据量不大,安全性不高的数据。比如:搜索、查询等功能。

            post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息。(比如:注册、修改、上传)

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>login</title>
    </head>

    <body>
        <form  method="get" action="dologin.jsp">
            账户:<input  type="text"  name="usename" values="wjy"/>
            密码:<input  type="password"  name="password"  values="123456"/>
            <input type="submit" value="登录">
    </body>
    </html>
    ......
    <head>
        <title>dologin</title>
    </head>
    <body>
        <h>登录成功</h>   
    </body>
    </html>

    

    

②request对象

            客户端请求信息被封装在request对象中,通过它能了解到客户的需求,然后做出响应,它是HttpServletRequest类的实例。

            request对象具有请求域,即完成客户端的请求之前,该对象一直有效。常用方法:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>表单</title>
    </head>

    <body>
        <form action="②request内置对象.jsp" method="post" />
        用户:
        <input type="text" name="usename">
        爱好:
        <input type="checkbox" value="看书" name="like">看书
        <input type="checkbox" value="旅游" name="like">旅游
        <input type="checkbox" value="运动" name="like">运动
        <input type="checkbox" value="购物" name="like">购物
        <input type="submit" value="提交">
        <br>
        <a href="②request内置对象.jsp?usename=测试URL传参数">测试URL传参数</a>
        <!-- 没传爱好信息,抛出空指针异常。 -->
        <!-- url传参默认字符集为utf-8,传递中文不会出现异常 -->
    </body>
    </html>

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>request内置对象</title>
    </head>

    <body>
        <!-- 提交表单时,默认使用ISO...字符集,要想改变: -->
        <%
            request.setCharacterEncoding("utf-8");
                // 用来确保发往服务器的参数以汉字的编码来提取,设置从request中取得的值或从数据库中取出的值。
                // 将设置的请求字符编码设置为utf-8。
                // 指定后可以通过request.getParameter()获取自己想要的字符串。
                // 如果没有提前指定,则会按照服务器端默认的"iso-8859-1"来进行编码。
                // 该方法只对post请求有效,对get请求无效。
                // 对于get请求,应该在server.xml中指定:URIEncoding=utf-8。
                // 注意:在执行request.setCharacterEncoding()之前不能执行request.getParameter()方法。
                // 原因:应该是在执行第一个getParameter()的时候,java将会按照编码分析所有的提交内容。
                // 而后续的getParameter()不再进行分析,所以setCharacterEncoding()无效。
                // 而对于GET方法提交表单是,提交的内容在URL中,一开始就已经按照编码分析提交内容,setCharacterEncoding()自然就无效。
            request.setAttribute("password","123456");
        %>
        用户名:<%= request.getParameter("usename") %>
        获得密码属性的值:<%= request.getAttribute("password") %>
        请求体的MIME类型:<%= request.getContentType() %>
        请求文件的长度:<%= request.getContentLength() %>
        请求的上下文路径:<%= request.getContextPath() %>
        请求的真实路径:<%= request.getRealPath("request.jsp") %>
        协议类型及版本号:<%= request.getProtocol() %>
        服务器主机名:<%= request.getServerName() %>
        服务器端口号:<%= request.getServerPort() %>
        请求客户端的IP地址:<%= request.getRemoteAddr() %>
        返回请求的字符编码方式:<%= request.getCharacterEncoding() %>
        爱好:
        <%
            String[] s2 = request.getParameterValues("like");
            if(s2!=null) {
                for (String s0 : s2) {
                    out.println(s0);
                }
            }
        %>
    </body>
    </html>

    

    

③response对象:包含了响应客户请求的有关信息,很少被直接使用,是HttpServletResponse类的实例。

         此对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其他页面的response对象对当前页面无效。

        

        请求重定向和请求转发区别

                请求转发:服务器行为,request.getRequestDispatcher("...").forward(request,response);

                        是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。

                请求重定向:客户端行为,response.sendRedirect("...");

                        等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变。

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>response内置对象</title>
    </head>

    <body>
        <%
            // 设置响应的MIMI类型。
            response.setContentType("text/html;charset=UTF-8");
                // 设置响应给客户端的内容的编码。
                // 一般使用response.setContentType()方法来设置HTTP响应的编码,
                // 同时指定了浏览器显示的编码,因为他在执行该方法通知服务器端以指定编码进行编码后,
                // 会自动调用response.setCharacterEncoding()方法来通知浏览器以指定编码来解码,
                // 使用此方法要在response.getWriter()执行之前或response提交之前。

            response.setCharacterEncoding("utf-8");
            
            PrintWriter outer = response.getWriter();
            out.println("Where is zbw?");
            outer.println("He is ...");// 总是提前于内置的out对象输出。
            // 想要内置out对象出现在前面,就强制缓存输出。
            out.println("Where is zbw?");
            out.flush();
            outer.print("He is ...");
            // 请求重定向,让客户端发一个新请求,跳转。
            // 用时要先注释掉out.flush();
            response.sendRedirect("get.jsp");
        %>
    </body>
    </html>

    

④session对象

        JSP的一个内置对象,是HttpSession类的实例。

        session表示客户端与服务器的一次会话,会话保存在服务器的内存里。

               一个会话指从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束。

        session是一个特定的时间概念。            

                session对象在第一个JSP页面被装载时自动创建,完成会话期管理。

                当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种方法知道这是一个客户,就需要session对象。

                在每次会话中,有一个服务器创建的sessionid,每次客户端向服务端发送请求时,都会将此sessionid携带过去,服务端会对此进行校验。

                除非本次会话的所有页面都关闭后,再重新访问某个Jsp或Servlet将会创建新的会话。

                        原有会话还存在,旧的sessionid存在于服务器端,等待销毁。

        在服务器的内存中保存着不同用户的session,与用户一一对应。

    <%@ page import="java.text.SimpleDateFormat" %>
    <%@ page import="java.util.Date" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>session对象</title>
    </head>

    <body>
        <h1>session对象的使用</h1>
        <%
            SimpleDateFormat s = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            Date d = new Date(session.getCreationTime());
            session.setAttribute("usename","wjy");
            // 使用指定名称将对象绑定到此会话。
            session.setAttribute("password","you guess");
            session.setAttribute("age",19);
            session.setMaxInactiveInterval(12);
            // 设置会话最长时间为12s。
        %>
        获取session创建时间:<%= s.format(d) %>
        获取session的ID编号:<%= session.getId() %>    
        <% --返回创建时,JSP引擎为它设的唯一编号。 --%>
        获取从session中获取用户名:<%= session.getAttribute("username") %>    
        <%--如果没有对象绑定在该名称下,则返回null。--%>
        获取session中保存的属性:
        <%
            String[] ss = session.getValueNames();
            for(String sss : ss) {
                out.println(sss+"&nbsp;&nbsp;");
            }
        %>    
        <%-- 返回一个包含此session的所有可用属性的数组。 --%>
        获取会话的最长时间:<%= session.getMaxInactiveInterval() %>
    </body>
    </html>

    

      12秒后编号改变:

       session的销毁方式

           ①调用session.invalidate()方法。

           ②session过期(超时)。

           ③服务器重新启动。

           若在末尾调用第一个方法,即页面一执行完,会话就被销毁。

       控制session对象的超时时间

           ①session.setMaxInactiveInterval(时间);// 单位是秒。

           ②在web.xml中配置:

   <session-config>
       <session-timeout>
           10// 单位是分钟。
       </session-timeout>
   </session-config>

⑤application对象:是ServletContext实例。

        实现了用户间的数据共享,可存放全局变量。

        开始于服务器的启动、终止于服务器的关闭。

        在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作。

                在任何地方对application对象属性的操作,都将影响其他用户对此的访问,它属于整个服务器。

    类比静态类。

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
         <title>application内置对象</title>
    </head>

    <body>
        <%
            application.setAttribute("usename","wjy");
            // 使用指定名称将对象绑定到此会话。
            application.setAttribute("password","you guess");
            application.setAttribute("age","19");
        %>
        用户名是:<%= application.getAttribute("usename") %>
        <!-- 运行完session页面后,这里就会得到用户名、密码、年龄等。 -->
        密码是:<%= application.getAttribute("password") %>
        <%-- 返回与此会话中指定名称绑定在一起的对象,如果没有对象绑定在该名称下,则返回null。 --%>
        application中的属性有:
        <%
            Enumeration<String> e = application.getAttributeNames();
            while(e.hasMoreElements()) {
                out.println(e.nextElement());
                out.println("<br>");
            }// 返回所有可用属性名的枚举
        %>
        JSP&Servlet引擎及版本号:<%= application.getServerInfo() %>
    </body>
    </html>

⑥page对象

        page对象就是指向当前JSP页面本身,有点像类中的this指针,它是Java.lang.object类的实例。

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>page内置对象</title>
    </head>
    
    <body>
        返回此Object的类:
        <%= page.getClass() %>
        返回Object的hash码:
        <%= page.hashCode() %>
        把Object对象转换成String类的对象:
        <%= page.toString()+"&nbsp;&nbsp;" %>
        <!-- 打印出:文件存储路径+类名+hascode。 -->
        判断此Object是否与指定的Object对象相等:
        <%= page.equals(page) %>
    </body>
    </html>

  

⑦pageContext对象

        提供了对JSP页面内所有的对象及名字空间的访问。

        可以访问到本页所在的session,也可以取本页面所在的application的某一条属性、相当于页面中所有功能的集大成者。

        此对象的本类名也叫pageContext。

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>pageContext内置对象</title>
    </head>

    <body>
        返回当前页中的 Httpsession对象(session)的用户名/密码/年龄:
        在当前位置包含①out内置对象.jsp文件:
        <% pageContext.include("①out内置对象.jsp"); %>
        <!-- 用时要注释掉out.close();!! -->
        <%= pageContext.getSession().getAttribute("usename") %><br>
        <%= pageContext.getSession().getAttribute("password") %><br>
        <%= pageContext.getSession().getAttribute("age") %><br>
        返回当前页的 ServletRequest对象 (request):
        <%= pageContext.getRequest() %>
        返回当前页的 ServletResponse对象(response):
        <%= pageContext.getResponse() %>
        返回当前页的Object对象(page):
        <% Object p = pageContext.getPage(); %>
        <%= p %>
        <!-- 设置time属性及属性值: -->
        <% pageContext.setAttribute("time",50); %>
        在指定范围内取time属性的值:
        <%= pageContext.getAttribute("time") %>// 50。
        返回time属性的作用范围:
        <%= pageContext.getAttributesScope("time") %>// 1。
    </body>
    </html>
    ......

    <head>
        <title>pageContext内置对象</title>
    </head>

    <body>
        使当前页面重导到④session内置对象.jsp页面:
        <% pageContext.forward("④session内置对象.jsp"); %>
    </body>
    </html>

    

⑧config对象:     

         a.config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的。

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

             当servlet配置初始化参数之后,web容器在创建servlet实例对象时,自动将这些初始化参数封装到ServletConfig对象中。

             并在调用servlet的init方法时,将ServletConfig对象传递给Servlet,即可通过该对象得到当前servlet的初始化参数信息。

             此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)。

         c.如果希望jsp页面可以获得为自己本页面设置的配置信息,则必须通过为该jsp配置的路径来访问该页面,因为只有这样访问jsp页面才会让配置参数起作用。

         d.config对象是ServletConfig的实例。

             返回含有服务器相关信息的ServletContext对象:ServletContext getServletContext();

             获取配置参数的方法:String getInitParameter(String name);

             返回Servlet初始化所需所有参数的枚举:Enumeration getInitParameterNames();

        e.实例(获得初始化参数)

            在web.xml中配置Servlet时,可以配置一些初始化参数。

    <servlet-mapping>
        <servlet-name>Hello4</servlet-name>
        <url-pattern>Servlet.initParam</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>Hello4</servlet-name>
        <servlet-class>Servlet.initParam</servlet-class>
        <init-param>
            <param-name>username</param-name>
            <param-value>wjy</param-value>
        </init-param>
        <init-param>
            <param-name>passowrd</param-name>
            <param-value>123456</param-value>
        </init-param>
    </servlet>

            JSP代码:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>init param</title>
    </head>
    <body>
        <a href="../Servlet/initParam">get方法提交参数</a>
    </body>
    </html>

            Servlet代码(获取初始化参数):

                在Servlet中可以通过ServletConfig接口提供的方法来取得这些参数。

        package Servlet;
        import javax.servlet.ServletException;
        import javax.servlet.http.HttpServlet;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        import java.io.IOException;
        import java.io.PrintWriter;
        /**
        * @Auther: wjy
        * @Date: 2018/10/14 20:19
        * @Description: 获得初始化参数。
        */
        public class initParam extends HttpServlet {

            private String username;
            private String password;

            @Override
            protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                doGet(request,response);
            }

            @Override
            protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                response.setContentType("text/html;charset=utf-8");
                PrintWriter out = response.getWriter();
                out.print("用户名:"+this.getUsername());
                out.print("密码:"+this.getPassword());
            }

            @Override
            public void init() throws ServletException {
                // 获得初始化参数,并将值赋给username、password。
                this.setUsername(this.getInitParameter("username"));
                this.setPassword(this.getInitParameter("password"));
            }

            public String getUsername() {
                return username;
            }
            public void setUsername(String username) {
                this.username = username;
            }
            public String getPassword() {
                return password;
            }
            public void setPassword(String password) {
                this.password = password;
            }
        }

⑨exception对象

        exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就会产生这个对象。

        如果一个JSP页面要应用此对象,就必须把isErrorPage设为true(即只有异常处理页面才可以运行该对象),否则无法编译。

        它实际上是java.lang.Throwable的对象。

        web无法直接访问处理异常的页面!!

    <%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="⑨exception内置对象.jsp"%>
    <html><!-- 若发生异常,交给此页面处理。 -->
    <head>
        <title>Title</title>
    </head>
    
    <body>
        <!-- 配置算术异常,即运行时异常 -->
        <% System.out.println(100/0); %>
    </body>
    </html>

    <%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
    <html><!-- 有is...="true"才能使用exception对象 -->
    <head>
        <title>exception内置对象</title>
    </head>
    <body>
        异常消息:<%= exception.getMessage() %><br>
        异常简要描述:<%= exception.toString() %><br>
        异常轨迹:<%= exception.getStackTrace() %><br>
    </body>
    </html>

5.Cookie详解

    ①http是超文本传输协议,也是无状态协议

        http协议具有无状态性,即服务器不记得你,不管你访问多少次

            当浏览器发送请求给服务器的时候,服务器响应客户端请求。

            但是当同一个浏览器再次发送请求给服务器的时候,服务器并不知道它刚才访问过。

    ②保存用户状态的两大机制:

            Session、Cookie

            所谓Cookie(小甜饼),是Web服务器保存在客户端的一系列文本信息。

    ③Cookie的常见用途:

            a.可以记录浏览记录。

            b.可以保存登录记录(如n时间内自动登录)。

            c."购物车"的处理,详情见 轻量级Java EE......之JSP/Servlet

    ④Cookie的作用:

            a.对特定对象的追踪

            b.保存用户网页浏览记录与习惯

            c.简化登录。

    ⑤使用Cookie:

            创建Cookie对象:Cookie newCookie = new Cookie(String key, Object value);

            写入Cookie对象:response.addCookie(newCookie);

            读取Cookie对象:Cookie[] cookies = request.getCookies();

            JSP中创建与使用Cookie:

                    void setMaxAge(int expiry):设置cookie的有效期,以秒为单位。

                    int getMaxAge():获取cookie的有效时间,以秒为单位。

                    void setValue(String value):创建cookie后,对cookie进行赋值。

                    String getName():获取cookie的名称。

                    String getValue():获取cookie的值。(名称对应值!!!)

     ⑥

猜你喜欢

转载自blog.csdn.net/qq_41979043/article/details/82987192