3522vip-澳门新葡亰平台官网-www.3522vip.com

3522vip☞(www.rivieraquest.com)能够为大家带来真正的真钱享受,澳门新葡亰平台官网开创业内先河,注册,开户,登录开始体验不同的娱乐世界,全国第一家以娱乐产品为主体对象的专业平台,菲律宾全资子公司成立,天天免费68周周再送168。

3522vip > 计算机编程 > 页面再次来到或向下,能够保持原页面不改变,

原标题:页面再次来到或向下,能够保持原页面不改变,

浏览次数:170 时间:2019-12-27

自家做的是一个webapp,比方,小编在a页面输入有个别关键字点击查询,笔者用的是ajax须求,恳求成功,对回到结果作者做了分页管理,因为是手提式有线电话机端访问,所以滑动到底层就接触央求的新闻,当自家滑动了成都百货上千页时,见到第5页的某条音信,点击走入看详细的情况跳到了页面b,这时候笔者在b页面再次来到a页面时,a页面是重复加载的,全体结果都并未有前日自己的必要是再次来到a页面时,页面保持在小编在第5页点击那条音信地点,並且前面包车型客车5页结果也都存在

在页面中逐级进行点击央求以下页面:a.html->b.html->c.html

  在伊始明日的博文以前率先为和睦庆祝一下融洽有了多少个客官,也会有了同僚的褒贬,说真话因为这些欢悦了好久!哈哈,好了在最早几如今的主旨以前,首先大家要求驾驭以下几点:

window.location.href 做跳转 window.history.go(-1卡塔尔国;window.history.back(卡塔尔(قطر‎; 方法时,会向服务器举办须要,依据服务器记录的伏乞举办跳转,由此会准确重回对应的页面a.html。

    a. HTTP 合同是无状态的议和,WEB 服务器本身无法鉴定区别出哪些供给是同贰个浏览器发出的,浏览器的每三次呼吁都以孤立的;

window.location.replace 做跳转 window.history.go(-1卡塔尔(قطر‎;window.history.back(卡塔尔(قطر‎; 方法时,不会向服务器进行伏乞,因而只会跳转至a.html,未能再次回到到上级b.html。

    b. 作为服务器必须能够使用风度翩翩种体制来唯大器晚成标志贰个客商,同临时间记录该客商的动静;

    c. WEB 应用中的会话是指三个顾客端浏览器与 WEB 服务器之间三番一回发出的意气风发类别央浼和响应进度;

    d. WEB 应用的对话状态是指 WEB 服务器与浏览器会话过程中发出的情景消息,依靠会话状态 WEB 服务器能够把归属同一会话中的后生可畏雨后春笋的乞求和响应进度关联起来;

    e. Cookie 机制采纳的是在客商端保持 HTTP 状态消息的方案,在浏览器访谈 WEB 服务器的有些财富时,由 WEB 服务器在 HTTP 响应音讯头中附带传送给浏览器的贰个小文本文件,后生可畏旦WEB 浏览器保存了某些 Cookie,那么她在以       后历次访谈该 WEB 服务器时,都会在 HTTP 央浼头元帅以此 Cookie 回传给 WEB 服务器

1.  Cookie

  1卡塔尔国. 实现原理:WEB 服务器通过在 HTTP 响应头音信中扩展 Set-Cookie 响应头字段将 库克ie 音讯发送给浏览器,浏览器则经过在 HTTP 恳求消息中加进 Cookie 乞求头字段将 Cookie 回传给 WEB 服务器

  2卡塔尔(英语:State of Qatar). 第三回访问浏览器不设有 库克ie,服务器给浏览器响适时给其增长库克ie,第二遍呼吁的时候便会活动抬高 Cookie,服务器便会依赖此 cookie 消息辨别顾客境况,以弥补 HTTP 公约的无状态弱点  

  1.1 Cookie 应用实例之顾客的自行登入

    a. 客商登入后会跳转到二个招待页面,大器晚成段时间之内大家再一次拜望迎接页面时得以不用登入,不过过了 Cookie 的有效期大家访谈应接页面包车型地铁时候就须求去登入

    b. 首先大家写一个报到页面,然后交给须要到 servlet,在 servlet 中决断 cookie 中是不是有值,若未有值或然是 cookie 失效,可能是第二回访问,然后将客商登陆音讯保存到 cookie 中;若有值则去推断该 cookie 中是不是有合作的 cookie,若有则彰显接待页面,不然回到登录页面(登入页面中唯有客户名,未有密码,在实际中大家对密码供给张开加密管理),演示如下:

图片 1

    e. 代码如下(我们在 JSP 中模仿 Servlet,未有单独去新建 Servlet):

    login.jsp

 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 2 <html>
 3 <head>
 4     <title>Login</title>
 5 </head>
 6 <body>
 7 <form action="welcom.jsp" method="post">
 8     UserName: <input type="text" name="name"><br>
 9     <button type="submit">Submit</button>
10 </form>
11 </body>
12 </html>

  welcom.jsp

 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: yin‘zhao
 4   Date: 2017/11/15
 5   Time: 9:30
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 9 <html>
10 <head>
11     <title>Welcom</title>
12 </head>
13 <body>
14 <h3>
15     <%
16         /*
17         * 获取用户名和cookie,如果用户名不为空(从登录页面而来)则打印欢迎消息
18         * 如果用户名为空但cookie 不为空,且cookie 的name 为所要求的同样打印欢迎消息
19         * 如果都为空则重定向到登录页面
20         * */
21 
22         String userName = request.getParameter("name");
23         if (userName != null) {
24             Cookie cookie1 = new Cookie("name", userName);
25             cookie1.setMaxAge(30);
26             response.addCookie(cookie1);
27         } else {
28 //            获取所有的 Cookie
29             Cookie[] cookies2 = request.getCookies();
30             if (cookies2 != null && cookies2.length > 0) {
31                 for (Cookie cookie : cookies2) {
32 //                    寻找相匹配的 Cookie
33                     if (cookie.getName().equals("name")) {
34 //                        使得 userName 为所匹配的 Cookie 的值
35                         userName = cookie.getValue();
36                     }
37                 }
38             }
39         }
40 
41         if (userName != "" && userName != null) {
42 //            打印欢迎消息
43             out.print("Hello"   userName);
44         } else {
45 //            如果用户名为空则重定向到登录页面
46             response.sendRedirect("login.jsp");
47         }
48     %>
49 </h3>
50 </body>
51 </html>

  1.2 呈现近来浏览记录(只展示 5 条)

    a. 在突显页面显示出商品项目清单,点击商品后转到详细情形页面,然后再度归来到页面此商品将交易会示到历史记录中

    b. 假如所浏览的是此前所浏览过的那么就供给将此商品更新到最新的记录中,即最终叁个,演示如下

图片 2

  代码如下(依然接收 jsp 模仿 servlet)

 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: yin‘zhao
 4   Date: 2017/11/15
 5   Time: 8:59
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%--
 9     从 Cookie 中获取书的信息并显示,如果 Cookie 的 name 是以 book 开始的就将其显示到页面
10 --%>
11 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
12 <html>
13 <head>
14     <title>Cookie</title>
15 </head>
16 <body>
17 <a href="book.jsp?book=javaWeb">JavaWeb</a><br>
18 <a href="book.jsp?book=Java">Java</a><br>
19 <a href="book.jsp?book=Oracle">Oracle</a><br>
20 <a href="book.jsp?book=Mysql">Mysql</a><br>
21 <a href="book.jsp?book=JDBC">JDBC</a><br>
22 <a href="book.jsp?book=C">C</a><br>
23 <a href="book.jsp?book=R">R</a><br>
24 <a href="book.jsp?book=Hibernate">Hibernate</a><br>
25 <a href="book.jsp?book=Ajax">Ajax</a><br>
26 <a href="book.jsp?book=Spring">Spring</a><br>
27 
28 <h2>
29     <%
30         Cookie[] cookies = request.getCookies();
31         for (Cookie cookie : cookies) {
32             if (cookie.getName().startsWith("book")) {
33                 out.print(cookie.getValue()   "<br>");
34             }
35         }
36     %>
37 </h2>
38 </body>
39 </html>

 1 <%@ page import="java.util.ArrayList" %>
 2 <%@ page import="java.util.List" %>
 3 <%--
 4     把书的信息以 Cookie 传回浏览器,如果以 book 开头的 cookie name 属性大于 5, 那么删除一个,如果新来的book
 5     已经存在,那么将其放到最后,如果不存在则删除第一个
 6 --%>
 7 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 8 <html>
 9 <head>
10     <title>Book</title>
11 </head>
12 <body>
13 <h3>
14     <%
15         String bookName = request.getParameter("book");
16 //        存储相同的 Cookie
17         Cookie tempCookie = null;
18 //        获得所有的 Cookie
19         Cookie[] cookies = request.getCookies();
20 //        存储Cookie 的 name 属性以 book 开头的并存储在 List 中
21         List<Cookie> cookieList = new ArrayList<Cookie>();
22 
23 //        遍历所有的 Cookie,将所有以 book 开头的存储在 List 中,并为 tempCookie 赋值
24         for (Cookie cookie1 : cookies) {
25             if (cookie1.getName().startsWith("book")) {
26                 cookieList.add(cookie1);
27                 if (cookie1.getValue().equals(bookName)) {
28                     tempCookie = cookie1;
29                 }
30             }
31         }
32 
33         System.out.println(tempCookie);
34 
35 //        如果 List 的 size 大于等于 5,且不存在相同的 Cookie 那么就删除第一个
36 //        要知道加入新的一个要么全部不相同且大于 5 删除第一个,要么存在相同的删除相同的
37 //        心得: 最后就是总删除一个,所以我们可以把删除的那个单独为其赋值
38         if (cookieList.size() > 5 && tempCookie == null) {
39             tempCookie = cookieList.get(0);
40         }
41         if (tempCookie != null) {
42             tempCookie.setMaxAge(0);
43 //            另一个不足为提的错误是没有将设置过的Cookie加入到Response中,因为服务器端设置了Cookie,客户端,
44 //            也就是浏览器是不知道的,所以对Cookie的所有修改都需要调用Response的addCookie方法给客户端响应,“存”回浏览器,这样,浏览器才会更改Cookie 集合
45             response.addCookie(tempCookie);
46         }
47 
48 //        获取调用 Servlet 的 Path, 但 JSP 底层就是一个 Servlet,所以会打印文件名
49 //        out.print(request.getServletPath());
50 //        将新传入的 cookie 返回
51         Cookie cookie = new Cookie("book"   bookName, bookName);
52         response.addCookie(cookie);
53     %>
54 </h3>
55 <h3><%=bookName%>
56 </h3>
57 <a href="index.jsp">Return...</a>
58 </body>
59 </html>

 

  以上就是自己所对 cookie 的敞亮和调谐练习的小应用,接下去我们早先上课 session

  1. session

   1卡塔尔国.  Session 在 WEB 开垦情形下的语义是指黄金年代类用来在顾客端与劳务器端之间维持状态的消除措施,有的时候候 Session 也用来指那中国化学工业进出口总集团解方案的存放构造

   2卡塔尔(英语:State of Qatar). 假使浏览器发三个 session 并从未带别的标记,服务器便会新建一个session 对象,服务器再次回到响应的时候会以 cookie的不二等秘书籍赶回标志头(JSessionId),下三遍倡议 cookie 会把这么些标志 id 带回去,就能够找到钦命的 session,只要浏览器不关就能向来在 cookie存取数据

   3卡塔尔. Session 通过 sessionId 来区分区别的顾客,session以cookie 或 U昂科威L 重写为基

   4卡塔尔国. 础在先后中得以设置 cookie(JSESSIONID)的持久化,保障重启浏览器的不会又一次发送

   5卡塔尔(英语:State of Qatar). HttpSession 的生命周期之创立 Session

            a. 浏览器访问服务端的其余叁个JSP,服务器不显然会应声创制一个 HttpSession 对象

         b. 若当前 JSP 是浏览器访谈当前 WEB 能源的首先个能源且 JSP 的 page 指令的 session 设为 false,那么服务器就不会为 JSP 创立二个HttpSession 对象(Page 指令的 session 属性为 false 是指 JSP 页面包车型客车包括变量不可用,但足以经过呈现的不二等秘书技去创立。)

         c. 若当前 JSP 不是顾客端访谈的第三个,且别的页面已经创制了一个 HttpSession’ 对象,则服务器也不会为当前 JSP 页面创造二个 HttpSession 对象, 而会把和当下页面会话关联的可怜 HttpSession 对象回来

         d. 对于 Servlet 借使首先个访谈的能源,则只有调用了 request.getSession 或 request。getSession(true卡塔尔(英语:State of Qatar) 才会创制一个对象

  6卡塔尔. HttpSession 的生命周期之销毁 session

    a. 超出 HttpSession 的晚点时间,调用  session.setMaxInactiveInterval(5卡塔尔(英语:State of Qatar)  设置失效时间,单位为秒

    b. 服务器调用  sesion.invalidate(卡塔尔(قطر‎  方法,

    c. 服务器卸载了当下 WEB 应用

  7卡塔尔. Servlet 中怎样收获 HttpSession 对象

         a.  request.getsession(boolean卡塔尔国   boolean 为false ,表示若没有和当前JSP 页面关联的 HttpSession则赶回 null,若有则赶回对象;为 true 表示料定重返,若未有提到页面则服务器成立多少个,那时的 true 可归纳

   8卡塔尔国. Session 应用案例之购物车

    a. 顾客筛选所要购买的商品,并填写订单音信后在购买页面显示顾客所要购买的物料音信和客户音讯(由于是两个央求跨页面,所以我们不能够将音信存到 request 中)

    b. 代码如下(以下是本身自个儿所写的代码,有一点繁琐,代码注释中有友好写代码进度中所犯的不当和更加好的缓和方案,小编这里就不贴出留给有意思味的温馨去施行):

index.jsp(由于此案例而不是三个央浼所以大家再度利用反射使得全部乞求利用二个Servlet 和事情发生以前所用到的雷同)

 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 2 <html>
 3 <head>
 4     <title>FirstPage</title>
 5 </head>
 6 <body>
 7 <h3>请选择你要购买的书籍</h3>
 8 <table cellpadding="10">
 9     <form action="books.do" method="post">
10         <tr>
11             <th>书名</th>
12             <th>购买</th>
13         </tr>
14         <tr>
15             <td>Oracle</td>
16             <td><input type="checkbox" name="book" value="Oracle"></td>
17         </tr>
18         <tr>
19             <td>Spring</td>
20             <td><input type="checkbox" name="book" value="Spring"></td>
21         </tr>
22         <tr>
23             <td>Mysql</td>
24             <td><input type="checkbox" name="book" value="Mysql"></td>
25         </tr>
26         <tr>
27             <td>SqlServer</td>
28             <td><input type="checkbox" name="book" value="SqlServer"></td>
29         </tr>
30         <tr><td>
31             <button type="submit">Submit</button>
32         </td></tr>
33     </form>
34 </table>
35 </body>
36 </html>

 

books 方法

1     protected void books(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
2         HttpSession session = request.getSession();
3         String[] values = request.getParameterValues("book");
4 
5         for (String value : values) {
6             session.setAttribute("book"   value, value);
7         }
8         response.sendRedirect("buyBook.jsp");
9     }

 

buyBook.jsp

 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 2 <html>
 3 <head>
 4     <title>BuyBooks</title>
 5 </head>
 6 <body>
 7   <h3>请输入您的基本信息</h3>
 8   <table cellpadding="10">
 9       <form action="buyBook.do" method="post">
10           <tr>
11               <td>基本信息</td>
12           </tr>
13           <tr>
14               <td>UserName: </td>
15               <td><input type="text" name="userName"></td>
16           </tr>
17           <tr>
18               <td>Address: </td>
19               <td><input type="text" name="address"></td>
20           </tr>
21           <tr>
22               <td>CardNum: </td>
23               <td><input type="text" name="cardNum"></td>
24           </tr>
25           <tr>
26               <td><button type="submit">Submit</button></td>
27           </tr>
28       </form>
29   </table>
30 </body>
31 </html>

 

buyBook 方法

 1     protected void buyBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 2         HttpSession session = request.getSession();
 3         Enumeration<String> enumeration = request.getParameterNames();
 4 
 5         while(enumeration.hasMoreElements()) {
 6             String name = enumeration.nextElement();
 7             session.setAttribute("buy"   name, request.getParameter(name));
 8         }
 9 
10         response.sendRedirect("SubmitOrder.jsp");
11     }

 

 

SubmitOrder.jsp

 1 <%@ page import="java.util.Enumeration" %>
 2 <%@ page import="java.util.List" %>
 3 <%@ page import="java.util.ArrayList" %><%--
 4   Created by IntelliJ IDEA.
 5   User: yin‘zhao
 6   Date: 2017/11/16
 7   Time: 18:05
 8   To change this template use File | Settings | File Templates.
 9 --%>
10 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
11 <html>
12 <head>
13     <title>SubmitOrder</title>
14 </head>
15 <body>
16 <h3>订单信息确认</h3>
17 <h4><%
18     Enumeration<String> enumeration = session.getAttributeNames();
19     List<String> bookList = new ArrayList<String>();
20     String userName = null;
21     String address = null;
22     String cardNum = null;
23 
24     while (enumeration.hasMoreElements()) {
25         String atrName = enumeration.nextElement();
26         if (atrName.startsWith("book")) {
27             String atrVal = (String) session.getAttribute(atrName);
28             bookList.add(atrVal);
29         }
30 
31         if (atrName.startsWith("buyuser")) {
32             String atrVal = (String) session.getAttribute(atrName);
33             userName = atrVal;
34         }
35         if (atrName.startsWith("buyadd")) {
36             String atrVal = (String) session.getAttribute(atrName);
37             address = atrVal;
38         }
39         if (atrName.startsWith("buycard")) {
40             String atrVal = (String) session.getAttribute(atrName);
41             cardNum = atrVal;
42         }
43     }
44 %></h4>
45 <table cellpadding="10" border="1" cellspacing="0">
46     <tr>
47         <td>UserName</td>
48         <td><%= userName%>
49         </td>
50     </tr>
51     <tr>
52         <td>Address</td>
53         <td><%= address%>
54         </td>
55     </tr>
56     <tr>
57         <td>CardNum</td>
58         <td><%= cardNum%>
59         </td>
60     </tr>
61     <tr>
62         <td>购买项目</td>
63         <td>
64             <%
65                 for (String bookName : bookList) {
66             %>
67             <%= bookName %>
68             <%= "<br><br>"%>
69             <%
70                 }
71             %>
72         </td>
73     </tr>
74 </table>
75 </body>
76 </html>

 

  完整 servlet 代码以至协和的不当和不足

 1 package com.java.session.cart.servlet;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.http.HttpServlet;
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 import javax.servlet.http.HttpSession;
 8 import java.io.IOException;
 9 import java.lang.reflect.InvocationTargetException;
10 import java.lang.reflect.Method;
11 import java.util.ArrayList;
12 import java.util.Enumeration;
13 import java.util.List;
14 
15 
16 /**
17  * 小结:
18  * 1. 首先对于多选框他们的 name 属性应该一致,获取其值的时候直接 getParameterValues(name) 返回一个数组
19  *    将获得的值直接加入 session 中,不用分开加;
20  * 2. 对于第二个页面的多个属性应该考虑到将其封装为一个类,比如 Customer,然后为 session 赋值的时候
21  *    直接用 getParameter(name) 获取到,将他们初始化为 customer 对象,将 customer 对象加入 session
22  *    属性
23  * 3. 第三个页面获取 session 属性的时候就可以直接获取 customer 对象和第一步的数组,并将其写到页面
24  *
25  * 我的错误:
26  *    对于多选框的没有将其 name 属性设置为一样的;
27  *    使用 getParameterNames() 方法,误导自己后面只知道使用 getParameterNames() 方法,很不好;
28  *    没有很好的用到面向对象的编程思想;
29  */
30 public class CartServlet extends HttpServlet {
31     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
32         String servletPath = request.getServletPath();
33         String methodName = servletPath.substring(1).substring(0, servletPath.length() - 4);
34 
35         try {
36             Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
37             method.invoke(this, request, response);
38         } catch (NoSuchMethodException e) {
39             e.printStackTrace();
40         } catch (IllegalAccessException e) {
41             e.printStackTrace();
42         } catch (InvocationTargetException e) {
43             e.printStackTrace();
44         }
45     }
46 
47     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
48         doPost(request, response);
49     }
50     protected void books(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
51         HttpSession session = request.getSession();
52         String[] values = request.getParameterValues("book");
53 
54         for (String value : values) {
55             session.setAttribute("book"   value, value);
56         }
57         response.sendRedirect("buyBook.jsp");
58     }
59 
60     protected void buyBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
61         HttpSession session = request.getSession();
62         Enumeration<String> enumeration = request.getParameterNames();
63 
64         while(enumeration.hasMoreElements()) {
65             String name = enumeration.nextElement();
66             session.setAttribute("buy"   name, request.getParameter(name));
67         }
68 
69         response.sendRedirect("SubmitOrder.jsp");
70     }
71 }

 

  9卡塔尔国. session 标准案例之消除重复提交难题

    a. 什么是再度提交

      1卡塔尔(英语:State of Qatar). 在表单提交到三个 servlet,而 servlet 又经过央浼转载的格局响应一个 jsp 页面,那时地址栏里面还保留着 servlet 的路子。在响应页面点击 “刷新”

      2卡塔尔(قطر‎. 在响应页面未达到时再一次点击 “提交开关”

      3卡塔尔. 点击重回再点击提交,也算是重复提交

    b. 怎么样幸免双重提交

      1卡塔尔(英语:State of Qatar). 在表单中做二个符号,提交到 Servlet 时,检查标记是还是不是留存且是还是不是和预约义的相近,若黄金年代致则受理,并销毁,若不均等或未有标志则响应消息再次提交

  代码如下:

index.jsp

 1 <%@ page import="java.util.Date" %><%--
 2   Created by IntelliJ IDEA.
 3   User: yin‘zhao
 4   Date: 2017/11/20
 5   Time: 14:51
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%--
 9     在此页面将 token 值存储在隐藏域和 session 属性中,提交到 servlet 并在 servlet 中校验,且校验成功,然后
10     成功页面返回再提交,由于有缓存,java 代码将不会执行,所以 session 属性域中就不会有值,所以就会出错
11 --%>
12 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
13 <html>
14 <head>
15     <title>LoginPage</title>
16 </head>
17 <body>
18   <h4><%
19       /*随表单一块提交的标识*/
20       String tokenValue = String.valueOf(new Date().getTime());
21       /*将此标识存入 session 中*/
22       session.setAttribute("token", tokenValue);
23   %></h4>
24   <form action="<%=request.getContextPath()%>/tokenServlet" method="post">
25       <%--将标识放入隐藏表单中,随表单一块提交到 servlet,在 servlet 中和 session 域中的标识进行比较 --%>
26       <input type="hidden" name="token" value=<%=tokenValue%>>
27       name: <input type="text" name="name"><br><br>
28       <button type="submit">Submit</button>
29   </form>
30 </body>
31 </html>

 

TokenServet.java

 1 package com.java.token.servlet;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.http.HttpServlet;
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 import javax.servlet.http.HttpSession;
 8 import java.io.IOException;
 9 
10 /*
11 * 从登录页面到这里提交,校验是否为重复提交,若是则给出错误页面,若不是则给出正确的响应页面。
12 * */
13 public class TokenServlet extends HttpServlet {
14     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
15         HttpSession session = request.getSession();
16         String tokenValue = request.getParameter("token");
17         String attribute = String.valueOf(session.getAttribute("token"));
18 
19         if (tokenValue != null && tokenValue.equals(attribute)) {
20 //            如果标识一直将其移除,并转发到成功页面
21             session.removeAttribute("token");
22         } else {
23 //            若不一致或不存在结束当前方法并重定向到错误页面
24             response.sendRedirect(request.getContextPath()   "/token.jsp");
25             return;
26         }
27 
28         request.getRequestDispatcher("/success.jsp").forward(request, response);
29     }
30 
31     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
32         doPost(request, response);
33     }
34 }

 

success.jsp

 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: yin‘zhao
 4   Date: 2017/11/20
 5   Time: 16:35
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 9 <html>
10 <head>
11     <title>Success</title>
12 </head>
13 <body>
14 
15   <h3>Hello <%= request.getParameter("name")%></h3>
16 </body>
17 </html>

    10卡塔尔(قطر‎. 利用 session 实现验证码功效

      a. 在原表单页面,生成一个验证码图片,生成图片的同不常候将其字符归入到 session 中;

      b. 在原表单页面,定义二个文本域,用于输入验证码

      c. 在对象 servlet 中,获取 session 和表单域中的验证码值

      d. 相比多个值是或不是风度翩翩律,若一致则受理须求,并井session 属性消逝

      e. 若不生龙活虎致,则一贯通过重定向的秘诀赶回原表单页面,并提醒客商“验证码错误”

        1卡塔尔. 演示如下

图片 3

        2卡塔尔(قطر‎. 代码如下

ValidateColorServlet.java(用于生成验证码,该 Servlet 算是难题吧,别的代码逻辑和前面包车型地铁案例差不离)

 1 package com.java.token.servlet;
 2 
 3 import javax.imageio.ImageIO;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.ServletOutputStream;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 import java.awt.*;
10 import java.awt.image.BufferedImage;
11 import java.io.IOException;
12 import java.util.Random;
13 
14 /**
15  * 产生随机验证码
16  */
17 public class ValidateColorServlet extends HttpServlet {
18 
19     //    定义验证图片的宽和高,以及验证图片中字符数
20     private int width = 152;
21     private int height = 40;
22     private int codeCount = 6;
23 
24     //    验证字符的高度
25     private int fontHeight = 0;
26 
27     //    验证码中单个字符基线,即:验证码中的单个字符位于验证码图形左上角的 (codeX, codeY)位置处
28     private int codeX = 0;
29     private int codeY = 0;
30 
31     //    验证码由哪些字符组成
32     char[] codeSequence = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz23456789".toCharArray();
33 
34     //    初始化验证码图形属性
35     public void init() {
36         fontHeight = height - 2;
37         codeX = width / (codeCount   2);
38         codeY = height - 4;
39     }
40 
41     public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
42 //        定义一个类型为 BufferedImage.TYPE_INT_BGR 类型的图像缓存
43         BufferedImage buffImg;
44         buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
45 
46 //        在 buffImg 中创建一个 Graphics2D 图像
47         Graphics2D graphics2D = buffImg.createGraphics();
48 
49 //        设置一个颜色,是 graphics2D 后续使用这个颜色
50         graphics2D.setColor(Color.white);
51 //        填充一个指定的矩形,x - 要填充矩形的 x 坐标,y - 要填充矩形的 y 坐标,width 要填充矩形的宽,height - 要填充矩形的高
52         graphics2D.fillRect(0, 0, width, height);
53 //        创建一个 font 对象,name 字体名称,style font 的样式常量,size font的点大小
54         Font font = new Font("", 1, fontHeight);
55 //        Graphics2D 使用此字体
56         graphics2D.setFont(font);
57 
58         graphics2D.setColor(Color.black);
59 
60 //        绘制指定矩形矩形的边框,比构建宽和高大一个像素
61         graphics2D.drawRect(0, 0, width - 1, height - 1);
62 
63 //        产生干扰线
64         Random random = new Random();
65         graphics2D.setColor(Color.cyan);
66 
67         for (int i = 0; i < 55; i  ) {
68             int x = random.nextInt(width);
69             int y = random.nextInt(height);
70             int x1 = random.nextInt(20);
71             int y1 = random.nextInt(20);
72             graphics2D.drawLine(x, y, x   x1, y   y1);
73         }
74 //        创建 StringBuffer 对象,保存随机产生的验证码
75         StringBuffer stringBuffer = new StringBuffer();
76         for (int i = 0; i < codeCount; i  ) {
77             String randCode = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);
78 //            把随机数放入到 StringBuffer
79             stringBuffer.append(randCode);
80 
81 //            将字符绘制到图像
82             graphics2D.setColor(Color.PINK);
83             graphics2D.drawString(randCode, (i   1) * codeX, codeY);
84         }
85 
86 //        将 StringBuffer 存入 session 中
87         request.getSession().setAttribute("CHECK_CODE_KEY", stringBuffer.toString());
88 
89 //        禁止图像缓存
90         response.setHeader("Pragma", "no-cache");
91         response.setHeader("Cache-Control", "no-cache");
92         response.setDateHeader("Expires", 0);
93 //        将图像输出到输出流中
94         ServletOutputStream sos = response.getOutputStream();
95         ImageIO.write(buffImg, "jpeg", sos);
96         sos.close();
97     }
98 }

 

login.jsp

 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: yin‘zhao
 4   Date: 2017/11/20
 5   Time: 18:12
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 9 <html>
10 <head>
11     <title>Login</title>
12 </head>
13 <body>
14 <h3><%
15     String message = String.valueOf(session.getAttribute("message"));
16     if (message.equals("null")) {
17         message = "";
18     }
19     out.print(message);
20 %></h3>
21   <form action="<%=request.getContextPath()%>/checkCodeServlet" method="post">
22       Name: <input type="text" name="name"><br><br>
23       Code: <input type="text" name="CHECK_CODE_KEY"><br><br>
24       <img src="<%=request.getContextPath()%>/validateColorServlet"><br><br>
25       <button type="submit">Submit</button>
26   </form>
27 </body>
28 </html>

 

CheckCodeServlet.java

 1 package com.java.token.servlet;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.http.HttpServlet;
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 import javax.servlet.http.HttpSession;
 8 import java.io.IOException;
 9 
10 /**
11  * Created by shkstart on 2017/11/20.
12  */
13 public class CheckCodeServlet extends HttpServlet {
14     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
15         HttpSession session = request.getSession();
16         String sessionAttr = String.valueOf(session.getAttribute("CHECK_CODE_KEY"));
17         System.out.println(sessionAttr);
18         String nameValue = request.getParameter("CHECK_CODE_KEY");
19 
20         if (nameValue != null && nameValue.equalsIgnoreCase(sessionAttr)) {
21             session.removeAttribute("CHECK_CODE_KEY");
22         } else {
23             session.setAttribute("message", "验证码错误");
24             System.out.println(sessionAttr);
25             response.sendRedirect(request.getContextPath()   "/checkCode/login.jsp");
26             return;
27         }
28 
29         request.getRequestDispatcher("/checkCode/success.jsp").forward(request, response);
30     }
31 
32     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
33         doPost(request, response);
34     }
35 }

 

success.jsp

 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: yin‘zhao
 4   Date: 2017/11/20
 5   Time: 18:12
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 9 <html>
10 <head>
11     <title>Success</title>
12 </head>
13 <body>
14   <h3>Hello <%= request.getParameter("name")%></h3>
15 </body>
16 </html>

 

  那么些是自己前面因为一些事拖延没写的内容,这一次补上,有不当只怕歧义的地点还望我们提议,多谢!

  本周的开始和结果将会赶紧补上,还望谅解!

 

本文由3522vip发布于计算机编程,转载请注明出处:页面再次来到或向下,能够保持原页面不改变,

关键词: 3522vip

上一篇:想要学前端的小伙伴看过了(3522vip由浅到深)

下一篇:没有了