文章目錄
- 1.cookie:再次時請求頭攜帶cookie到服務端
- 2.登陸案例_記住我:js訪問瀏覽器數據用document
- 3.session:根據sessionid,服務器才能找到session(session對象在服務器內存中增加壓力)
- 4.登錄案例_驗證碼:request.getSession().setAttribute("code",sb.toString())
- 5.web中的k-v存儲們:同一域名下可以互相調用
- 5.1 localStorage/sessionStorage:關閉網頁后,sessionStorage被自動刪除,且不支持跨標簽頁,跨瀏覽器更不支持。
- 5.2 session:同一個瀏覽器下打開不同標簽共享cookie,因而共享了session。新瀏覽器會清除所有cookie,獲取不到session內容了
- 6.登錄案例_jsp引入:(String) request.getAttribute(" ")
- 7.EL:${ } = get
- 8.JSTL:全用標簽
- 9.登錄案例_直接訪問success邏輯問題:request.getSession().get/setAttribute
1.cookie:再次時請求頭攜帶cookie到服務端
如下localhost是域名,不包含協議和端口。
瀏覽器的設置中搜索cookies - 網站設置 - localhost。
如下方式只能查看當前域名的cookies,如上方式可以查所有域名cookies。
Map是很多個鍵值對,Entry同Map但就一個鍵值對。Cookies(類)在瀏覽器和服務器之間發來發去,所以不能超過4K,太大會卡。 cookie的域名過濾第一遍,訪問資源位置即cookie的路徑過濾第二遍。
只有localhost(域名)默認cookie存活時間是瀏覽器打開到關閉(不是窗口),如下改為30天(游客訪問京東購物車一般也為30天)。在瀏覽器的設置里搜索清除瀏覽數據。
如下name雖相同,但是路徑不同,不會覆蓋。name相當于文件名,value相當于文件內容,同路徑同name就會覆蓋。
如上瀏覽器現在有兩個cookies:一個是 / product galaxyNote7,另一個是 /abc product huawei。這兩個cookies都會被攜帶進如下/abc…服務器。
2.登陸案例_記住我:js訪問瀏覽器數據用document
如下瀏覽器自帶在設置中搜索:密碼。如下兩個cookies,一個保存用戶名,另一個保存密碼。
//改進【Java34】中 login.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>登錄頁面
</title><link href="css/bootstrap.min.css" rel="stylesheet"><link href="css/login.css" rel="stylesheet"><script src="js/jquery.js"></script><script src="js/bootstrap.js"></script><script> var getCookie = function (key) { return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;}</script><script> $(function () { var name = getCookie("name"); var pwd = getCookie("pwd");if(name && pwd){ $("#name").val(name) $("#pwd").val(pwd)$("#remember").prop("checked",true) }})</script><script>function changeImg(img) { var time = new Date().getTime(); img.src = "/codeServlet?time="+time }</script>
</head>
<body><div class="container"><form class="form-signin" action="/LoginServlet"><h2 class="form-signin-heading text-center">登錄頁面
</h2><input type="text" id="name" name="username" class="form-control" placeholder="用戶名" required autofocus><input type="password" id="pwd" name="password" class="form-control" placeholder="密碼" required><input type="text" placeholder="驗證碼" name="code" class="form-control"><img src="/codeServlet" alt="" onclick="changeImg(this)"> <br><input type="checkbox" id="remember" name="remember" value="yes"> 記住我
<button class="btn btn-lg btn-primary btn-block" type="submit">登錄
</button></form></div>
</body>
</html>
package com.itheima.login.web;
import com.itheima.login.service.LoginService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;@WebServlet(urlPatterns
= "/LoginServlet")
public class LoginServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request
, HttpServletResponse response
) throws ServletException, IOException {doGet(request
, response
);}@Overrideprotected void doGet(HttpServletRequest request
, HttpServletResponse response
) throws ServletException, IOException {String code
= request
.getParameter("code");
String rightCode
= (String) request
.getSession().getAttribute("code"); if(!rightCode
.equalsIgnoreCase(code
)){ request
.getRequestDispatcher("/error.html").forward(request
,response
); }String username
= request
.getParameter("username"); String password
= request
.getParameter("password");LoginService service
= new LoginService();boolean result
= service
.login(username
,password
); if(result
){String remember
= request
.getParameter("remember"); if("yes".equals(remember
)){Cookie nameCookie
= new Cookie("name", username
); Cookie pwdCookie
= new Cookie("pwd", password
);nameCookie
.setMaxAge(60*60*24*30); pwdCookie
.setMaxAge(60*60*24*30);response
.addCookie(nameCookie
);response
.addCookie(pwdCookie
);}response
.sendRedirect("/success.html"); }else{ request
.getRequestDispatcher("/error.html").forward(request
,response
); }}
}
如下在控制臺輸出,在html中一樣,用于數據回顯。
3.session:根據sessionid,服務器才能找到session(session對象在服務器內存中增加壓力)
病歷本session,session記錄大量信息,直接進行傳遞會卡,所以用cookie傳sessionid(Cookie將sessionid傳來傳去,4k不宜過大,Cookie用sessionid標記用戶)。cookie默認生命周期是會話即關閉瀏覽器同理session也是。
如下掛號這一行代碼都一樣,小域對象request獲取大域對象session。< session - config > 是在tomcat軟件解壓后的conf文件夾里的web.xml(如訂單30分鐘不付款就會自動取消了)。
解決關閉瀏覽器cookie就沒了?用Session持久化方案覆蓋了tomcat默認生成的cookie即上面灰字(因為session默認保留30分鐘,所以sessionid即cookie設為30分鐘)。
如下刪除后每次訪問,生成的sessionid都是不一樣的。
4.登錄案例_驗證碼:request.getSession().setAttribute(“code”,sb.toString())
如下紅字:一個存,一個取,該用什么載體實現存取?如最右邊。如下是兩次請求,不是一次請求鏈,所以request不行。存在session里好處:30分鐘后自動沒了。
login.html和LoginServlet.java見前面第二章節中。
package com.itheima.login.web;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;@WebServlet("/codeServlet")
public class CodeServlet extends HttpServlet {protected void doPost(HttpServletRequest request
, HttpServletResponse response
) throws ServletException, IOException {doGet(request
, response
);}protected void doGet(HttpServletRequest request
, HttpServletResponse response
) throws ServletException, IOException {int height
= 50;int width
= 70;String data
= "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";Random random
= new Random();BufferedImage image
= new BufferedImage(width
, height
, BufferedImage.TYPE_INT_RGB
);Graphics g
= image
.getGraphics();g
.setColor(Color.BLACK
);g
.fillRect(0, 0, width
, height
);g
.setColor(Color.WHITE
);g
.fillRect(1, 1, width
- 2, height
- 2);g
.setFont(new Font("宋體", Font.BOLD
| Font.ITALIC
, 25));StringBuffer sb
= new StringBuffer();for (int i
= 0; i
< 4; i
++) {g
.setColor(new Color(random
.nextInt(255), random
.nextInt(255), random
.nextInt(255)));int index
= random
.nextInt(data
.length());String str
= data
.substring(index
, index
+ 1);g
.drawString(str
, width
/ 6 * (i
+ 1), 20);sb
.append(str
);}request
.getSession().setAttribute("code",sb
.toString()); System.out
.println("作弊:" + sb
.toString());for (int i
= 0; i
< 3; i
++) {g
.setColor(new Color(random
.nextInt(255), random
.nextInt(255), random
.nextInt(255)));g
.drawLine(random
.nextInt(width
), random
.nextInt(height
), random
.nextInt(width
), random
.nextInt(height
));g
.drawOval(random
.nextInt(width
), random
.nextInt(height
), 2, 2);}ImageIO.write(image
, "jpg", response
.getOutputStream());}
}
5.web中的k-v存儲們:同一域名下可以互相調用
F12 - Application - 左側如下一條cookies。在console中輸入document.cookie查看數據信息:document.cookie="kkk=vvv"設置cookie,點擊如下http://www.baidu…可查看到kkk vvv信息。
同域名可用:打開另一個標簽,同樣百度頁面甚至可以搜索一些內容,F12 - Application - 左側Cookies中同樣可看到"kkk=vvv",注意不能跨瀏覽器。Cookies既然有k v的作用了,那客戶端里為什么還要有local storage和session storage呢?
因為每次進行請求時,如下請求百度首頁,可以看到request header中會攜帶cookies信息,每次請求時都會將全量的cookies信息作為請求的一部分進行上傳如下圖所示,這樣cookies存儲的數據不能太大,太大的話每次進行提交浪費帶寬。
5.1 localStorage/sessionStorage:關閉網頁后,sessionStorage被自動刪除,且不支持跨標簽頁,跨瀏覽器更不支持。
所以在Html5中提出新的概念用localstorage進行存儲,localstorage和cookies用法一致:1.console中輸入localStorage.setItem("kk","vv"),同理在Application中點開如上Local Storage中http://www.baidu…查看到kk vv信息。2.console中輸入sessionStorage.setItem("k","v"),同理在Application中點開Session Storage中http://www.baidu…查看到k v信息,sessionStorage.getItem(“k”)。
5.2 session:同一個瀏覽器下打開不同標簽共享cookie,因而共享了session。新瀏覽器會清除所有cookie,獲取不到session內容了
打開XAMPP的Apache服務。
1.如下設置session。
2.如下在另一個頁面讀取session,說明session設置在服務端。
session存在服務端能唯一辨識客戶端,如下打開新的無痕(inprivate)窗口(相當于新的瀏覽器),無法讀到。新瀏覽器必須先訪問localhost。
php版本的session運行的原理是什么?通過cookie記錄sessionid如下,php服務端為每個客戶端起一個phpsessid,這個id在服務端對應數據存儲區域,再次訪問cookie中有phpsessid,服務端解析到這個瀏覽器對應的一片區域的存儲內容。服務端存儲結構:phpsessid-[k-v],每個瀏覽器分到一個不同id,因而各個數據是獨立存儲的。
存儲在服務端的session有什么好處呢?最大好處是這個數據在客戶端沒有任何信息,只有它自己的標識id,這個id是沒有任何用的,也是隨時變化的。客戶端不能通過腳本修改服務端的session,前面的localstorage這些都可以通過setItem的js腳本修改增加,session無法修改,安全性更高,適合用戶敏感型數據的記錄,存在客戶端的這三種適合頁面端的常用數據的記錄。
6.登錄案例_jsp引入:(String) request.getAttribute(" ")
A和B對瀏覽器來說,不是同一個網頁,B會覆蓋A。錯誤提示信息是在LoginServlet里,傳遞到B,所以有數據傳遞用請求轉發。login.html對應紅色橫線,但.html寫不了java的request.getA…
如下右邊瀏覽器沒有解析。
點擊烏龜默認訪問index.jsp,因為index.jsp被刪了,所以自動跳出瀏覽器顯示404。
如上路徑就是如下,原來ROOT路徑下為空(發布項目需要發在ROOT路徑下),如下訪問下服務器中的hello.jsp生成org/…
tomcat將hello.jsp翻譯成hello_jsp.java再編譯運行,只要證明hello_jsp這個類是servlet,則hello.jsp就是servlet。hello_jsp extend org…包名.類名:把tomcat中lib目錄下jasper.jar解壓,證明HttpJspBase.class是servlet就行,拖到idea中自動反編譯成.java文件。
如下HttpJspBase.class反編譯繼承了HttpServlet,所以是Servlet。
如下是在上面的類中,子類必須重寫_jspService,等價于service方法。
<%@ page
import="java.io.PrintWriter" %>
<%@ page contentType
="text/html;charset=UTF-8" language
="java" %>
<%-- 如上一行文檔聲明
: 響應體的格式和編碼
, 語言默認翻譯成java
--%>
<%-- JSP的主體代碼 是 html 。 如何在html混入java
: 三種注釋語法:
--%>
<%--1. 腳本片段
!!!最常用
1. 核心
: 會被翻譯到
Servlet的service方法中
2. 語法
: <% 代碼
%>2. 腳本表達式
1. 核心
: 簡化 out
.print
2. 語法
: <%="要輸出的內容"%>3. 腳本聲明
1. 核心
: 會被翻譯到
Servlet的成員位置
(聲明方法
,成員屬性
)2. 語法
: <%! 代碼
%>
--%>
<html>
<head><title>Title</title
>
</head
>
<body><div><hr><%out
.print("out");System.out
.println("xx");PrintWriter writer
= response
.getWriter();
System.out
.println("out:" + out
);System.out
.println("writer:" + writer
);%><hr><%out
.print("xx");%><%="yy"%><hr> <%!public void method01(){ }%><%method01(); %></div
>
</body
>
</html
>
如下解決問題:請求轉發,將【Java31】中驗證碼輸錯改進(再次掛號得到之前本子設的code信息,與前端輸入的比較)。
如下也在LoginServlet.java中請求轉發,將【Java31】中用戶名和密碼輸錯改進。
//login.html改為login.jsp(新建jsp文件的第一行保留),前面不變
<body>
<div class="container"><form class="form-signin" action="/LoginServlet"><h2 class="form-signin-heading text-center">登錄頁面
</h2><%--TODO: JSP --%>
<span style="color: red"><%String errorMsg = (String) request.getAttribute("errorMsg"); //errorMsg由LoginServlet.java中請求轉發而來if(errorMsg != null){ //剛進來A頁面,沒錯誤,為nullout.print(errorMsg);}%>
</span><%-- todo: EL--%>
<input type="text" id="name" name="username" class="form-control" placeholder="用戶名" required autofocus value="${cookie.name.value}"><input type="password" id="pwd" name="password" class="form-control" placeholder="密碼" required value="${cookie.pwd.value}"><input type="text" placeholder="驗證碼" name="code" class="form-control"><img src="/codeServlet" alt="" onclick="changeImg(this)"> <br><%-- 用戶名+密碼 cookie 不為null,checked --%>
<input type="checkbox" id="remember" name="remember" value="yes" ${cookie.name.value !=null && cookie.pwd.value !=null ? "checked" : ""}> 記住我
<button class="btn btn-lg btn-primary btn-block" type="submit">登錄
</button></form>
</div>
</body>
</html>
LoginServlet.java相當于A模塊(Servlet),login.jsp相當于B模塊(Servlet),兩者都在服務器里,通過request請求轉發。
7.EL:${ } = get
//el.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title
</title>
</head>
<body> <div><%//四大域對象pageContext.setAttribute("name1","value1");request.setAttribute("name2","value2");session.setAttribute("name3","value3");application.setAttribute("name4","value4");//下行沒必要,因為request在service方法里是形參,默認由tomcat創建好了pageContext.getRequest() %><%String name1 = (String) pageContext.getAttribute("name1");out.print(name1); //在這個頁面點瀏覽器小圖標即localhost:8080/el.jsp,網頁顯示value1%>${name1} //同上兩行
<hr><%-- 標準,Scope范圍意思 --%>${pageScope.name1}${requestScope.name2}${sessionScope.name3}${applicationScope.name4}
<hr>${name1}${name2}${name3}${name4}
<hr><%
// pageContext.setAttribute("name","value1"); //一般不會用相同的name
// request.setAttribute("name","value2");
// session.setAttribute("name","value3"); //這行注釋了,只要瀏覽器沒關,一直存在session里。application.setAttribute("name","value4");%>${name} //只能顯示一個,從小域對象到大。
</div>
</body>
</html>
//el02.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title
</title>
</head>
<body><div><%/** el 簡化從cookie中的取值操作* 1. ${cookie.xx} -> 獲得name=xx的cookie對象* 2. ${cookie.xx.name} -> cookie.getName()* 3. ${cookie.xx.value} -> cookie.getValue() (常用)* */Cookie nameCookie = new Cookie("key", "admin");response.addCookie(nameCookie);%>
<hr><%Cookie[] cookies = request.getCookies(); // 以前這樣取cookies for (Cookie cookie : cookies) {String name = cookie.getName();if("key".equals(name)){String value = cookie.getValue();System.out.println(cookie); // 打印對象System.out.println(name+"-"+value);}}%>
<hr>${cookie.key}${cookie.key.name} ${cookie.key.value}
</div>
</body>
</html>
如下第一行是cookie對象,如下是上面傳統打印結果。
如下是上面el打印結果,沒換行。
如下把key
如下是回顯用戶名和密碼改進,最后添加value表示初始值。
同理如下滿足條件的話,初始時就鉤住記住我。
//el_03.jsp<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title
</title>
</head>
<body><div><%request.setAttribute("n1",10);request.setAttribute("n2",4);%>${n1} , ${n2}
<br> ${n1/n2} , ${n1 >= n2} ${n1 ge n2}
<br> //greater than or equals 同上行 ${n1>n2?"大" : "小"}
<hr> <%/** empty 表達式 (EL表達式最主要簡化從域對象中取值操作)* 1. 容器,沒有元素, true* 2. 對象,沒有地址 true* */String str = "";ArrayList
<String> list = new ArrayList<>();Object obj = null;request.setAttribute("str",str);request.setAttribute("list",list);request.setAttribute("obj",obj);%>${empty str} ${empty list}${not empty obj}
</div>
</body>
</html>
8.JSTL:全用標簽
如下放入lib文件夾并右擊add as library。
//jstl.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--<%@taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>--%>
<%--前綴: c , uri= core (四大定制標簽庫: java核心, xml,sql...)uri引用的哪個標簽庫, 前綴是用來區分關鍵字出自哪個標簽庫的,如下 c
--%>
<html>
<head><title>Title
</title><c:if test=""></c:if>
</head>
<body><div><span style="color: red"><%for (int i = 0; i < 5; i++) {out.print(i); //在網頁上打印}%>
</span><span style="color: green"><%for (int i = 0; i < 5; i++) {out.print(i);}%>
</span></div><div><span style="color: blue"><c:forEach var="i" begin="0" end="4">${i}
</c:forEach></span></div>
</body>
</html>
//jstl02.jsp
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Collections" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>Title
</title>
</head>
<body><div><%int n = 10; request.setAttribute("n",n); //n存域對象if(n > 5){out.print(true);}%>
<hr><c:if test="${n > 5}"> //test后面是el表達式,el就是簡化從域對象中取值操作,所以上面存入域對象。true
</c:if><hr><% for (int i = 1; i <= 9; i+=2) { //步進表達式out.println(i);}%>
<br><c:forEach var="i" begin="1" end="9" step="3" varStatus="status">${i} - ${status.count} <%-- 循環次數 --%>
<br></c:forEach><hr><%ArrayList
<String> list = new ArrayList<>();Collections.addAll(list,"zs","ls","ww");request.setAttribute("list",list);for (String s : list) {out.println(s);}%>
<br><c:forEach var="s" items="${list}">${s}
</c:forEach></div>
</body>
</html>
9.登錄案例_直接訪問success邏輯問題:request.getSession().get/setAttribute
如下login.jsp是門。success頁面需要從session域對象里取值,要寫java代碼,所以用success.jsp(有,正常訪問)。
將第一節改進的LoginServlet .java再改進如下:進門先做標記:如一些銀行類APP長時間沒用,再點擊賬戶查詢等會提示會話已超時/過期(默認30分鐘)。若30分鐘內成功通過登陸頁面進到success.jsp,服務器和瀏覽器都沒關,只是網頁窗口關了,再次訪問success.jsp,能成功進去。
//success.jsp,不是login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="description" content=""><meta name="author" content=""><link rel="icon" href="../../favicon.ico"><title>Dashboard Template for Bootstrap
</title><link href="css/bootstrap.min.css" rel="stylesheet"><link href="css/dashboard.css" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top"><div class="container-fluid"><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"><span class="sr-only">Toggle navigation
</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button><a class="navbar-brand" href="#">Project name
</a></div><div id="navbar" class="navbar-collapse collapse"><ul class="nav navbar-nav navbar-right"><li><a href="#">Dashboard
</a></li><li><a href="#">Settings
</a></li><li><a href="#">Profile
</a></li><li><a href="#">Help
</a></li></ul><form class="navbar-form navbar-right"><input type="text" class="form-control" placeholder="Search..."></form></div></div>
</nav><div class="container-fluid"><div class="row"><div class="col-sm-3 col-md-2 sidebar"><ul class="nav nav-sidebar"><li class="active"><a href="#">Overview
<span class="sr-only">(current)
</span></a></li><li><a href="#">Reports
</a></li><li><a href="#">Analytics
</a></li><li><a href="#">Export
</a></li></ul><ul class="nav nav-sidebar"><li><a href="">Nav item
</a></li><li><a href="">Nav item again
</a></li><li><a href="">One more nav
</a></li><li><a href="">Another nav item
</a></li><li><a href="">More navigation
</a></li></ul><ul class="nav nav-sidebar"><li><a href="">Nav item again
</a></li><li><a href="">One more nav
</a></li><li><a href="">Another nav item
</a></li></ul></div><div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main"><h1 class="page-header">主頁
</h1><%--TODO: jstl 屋內判斷:沒有標記的趕出去--%><%-- <%String name = (String) request.getSession().getAttribute("name");if(name == null){request.setAttribute("errorMsg","請先登錄");request.getRequestDispatcher("/login.jsp").forward(request,response);}out.print("歡迎你," + name);%>--%>// 如下用 jstl標簽和el表達式 改進上面
<c:if test="${empty name}"><%request.setAttribute("errorMsg","請先登錄");request.getRequestDispatcher("/login.jsp").forward(request,response);%>
</c:if> 歡迎尊貴的VIP: ${name}
<div class="row placeholders"><div class="col-xs-6 col-sm-3 placeholder"><img src="img/demo.jpg" width="200" height="200" class="img-responsive" alt="Generic placeholder thumbnail"><h4>登
</h4><span class="text-muted">Something else
</span></div><div class="col-xs-6 col-sm-3 placeholder"><img src="img/demo.jpg" width="200" height="200" class="img-responsive" alt="Generic placeholder thumbnail"><h4>錄
</h4><span class="text-muted">Something else
</span></div><div class="col-xs-6 col-sm-3 placeholder"><img src="img/demo.jpg" width="200" height="200" class="img-responsive" alt="Generic placeholder thumbnail"><h4>成
</h4><span class="text-muted">Something else
</span></div><div class="col-xs-6 col-sm-3 placeholder"><img src="img/demo.jpg" width="200" height="200" class="img-responsive" alt="Generic placeholder thumbnail"><h4>功
</h4><span class="text-muted">Something else
</span></div></div><h2 class="sub-header">Section title
</h2></div></div>
</div>
</div>
<script src="js/jquery.js"></script>
<script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script>
<script src="js/bootstrap.js"></script>
</body>
</html>
如下第一次直接訪問success.jsp,進不去。
總結
以上是生活随笔為你收集整理的【Java13】cookiesession(登陆案例(2)),jsp(登录案例(3))的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。