Web(二)
阿新 • • 發佈:2017-06-18
姓名 可能 格式 -a odin cookie host con java.net 一、數據的傳遞--轉發和重定向
1、創建一個login.jsp頁面
<body>
<%-- action:我們需要提交的地址 method:請求的方式 --%>
<form action="doMain.jsp" method="get">
<table>
<tr>
<td>用戶名:</td>
<td><input type="text" name="userName"></td>
</tr>
<tr>
<td>密碼:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td><input type="submit" value="登錄"></td>
</tr>
</table>
</form>
</body> 2、創建對應的處理頁面doMain.jsp
<body>
<h1>登錄成功</h1>
<%-- login.jsp中的form表單 get方式請求亂碼
01.治標不治本 不推薦使用
String userName=new String(name.getBytes("iso-8859-1"),"utf-8");
02.治本
在服務器中的conf文件夾中找到server.xml文件中的Connector節點中 新增屬性
URIEncoding="UTF-8"
--%>
<%
//根據login.jsp頁面 name的屬性值 獲取 value
//post亂碼 解決 是不是每個頁面都需要設置 請求編碼格式??? 後面 我們會用Filter
request.setCharacterEncoding("utf-8"); //請求的編碼
response.setCharacterEncoding("utf-8"); //響應的編碼
String name=request.getParameter("userName"); //獲取用戶名
String pwd=request.getParameter("password"); //獲取密碼
%>
<%-- 就是想把login頁面的值 傳遞給last.jsp --%>
<%
out.print("用戶名:"+name);
out.print("密碼:"+pwd);
//把從login頁面拿到的值 存儲到了 request作用域中了
request.setAttribute("userName", name);
request.setAttribute("password", pwd);
//轉發到了last.jsp 攜帶了數據 last頁面能取得數據
//request.getRequestDispatcher("last.jsp").forward(request, response);
//重定向last.jsp 數據都會丟失! last頁面不能取得數據
response.sendRedirect("last.jsp");
%>
<%-- get請求 --%>
<a href="last.jsp?userName=小黑黑2&password=123456">跳轉到最後一個界面</a>
</body>
3、創建last.jsp看能不能獲取login.jsp的值
<body>
<h1>last.jsp</h1>
<%
//在doMain中使用了轉發後 能直接獲取 login頁面的值
String name=request.getParameter("userName"); //獲取用戶名
String pwd=request.getParameter("password"); //獲取密碼
out.print("用戶名:"+name);
out.print("密碼:"+pwd);
%>
<%
//從request.getAttribute()取值
request.setCharacterEncoding("utf-8"); //請求的編碼
String name1=(String)request.getAttribute("userName");//獲取用戶名
String pwd2=(String)request.getAttribute("password"); //獲取密碼
out.print("用戶名:"+name1);
out.print("密碼:"+pwd2);
%>
</body>
二、通過request獲取界面的多個值
5、創建request1.jsp頁面
<form action="request2.jsp" method="post">
<input type="checkbox" name="box" value="別玩手機">別玩手機"
<input type="checkbox" name="box" value="就玩手機">就玩手機"
<input type="checkbox" name="box" value="還玩手機">還玩手機"
<input type="checkbox" name="box" value="真玩手機">真玩手機"
<input type="checkbox" name="box" value="玩手機">玩手機">
<button type="submit">提交</button>
</form> 6、創建request2.jsp頁面獲取request1.jsp的值 <body>
<%
request.setCharacterEncoding("utf-8");
//獲取選中復選框的值
String [] boxs=request.getParameterValues("box");
//首先進行判斷 必須先判斷非空
if(boxs!=null&&boxs.length!=0){
for(String box:boxs){
out.print(box+"<br/>");
}
}else{
//重定向到request1界面
response.sendRedirect("request1.jsp");
}
%>
<h1>request對象常用的方法</h1>
獲取http請求中使用的方法名稱 <%=request.getMethod() %><br/>
獲取http請求中調用servlet的url部分 <%=request.getServletPath() %><br/>
獲取http請求中MIME類型 <%=request.getContentType() %><br/>
獲取請求中服務器主機名稱 <%=request.getServerName() %><br/>
獲取請求中服務器的端口號名稱 <%=request.getServerPort() %><br/>
獲取請求中服務器的ip地址 <%=request.getRemoteAddr()%><br/>
獲取請求中服務器的ip地址 <%=request.getRemoteHost()%><br/>
獲取請求中使用的協議 <%=request.getScheme() %><br/>
</body> 三、session 1、創建session1jsp <body>
<form action="session2.jsp" method="post">
<table><tr> <td>用戶名:</td>
<td><input type="text" name="userName"></td></tr>
<tr> <td>密碼:</td>
<td><input type="password" name="password"></td> </tr>
<tr><td><input type="submit" value="登錄"></td></tr> </table>
</form> </body> 2、創建session2.jsp <body>
<%
request.setCharacterEncoding("utf-8");
//獲取session1.jsp的信息
String name= request.getParameter("userName");
String pwd= request.getParameter("password");
//把信息保存到session
session.setAttribute("sessionName", name);
session.setAttribute("sessionPwd", pwd);
//把信息保存到request
request.setAttribute("requestName", name);
request.setAttribute("requestPwd", pwd);
//重定向 request作用域的值消失 session呢???
response.sendRedirect("session3.jsp");
%>
<form action="session3.jsp" method="post">
<table>
<tr> <td>銀行卡密碼:</td>
<td><input type="text" name="card"></td></tr>
<tr><td><input type="submit" value="登錄"></td></tr>
</table></form></body> 3、創建session3.jsp <body>
<%
request.setCharacterEncoding("utf-8");
//獲取銀行卡密碼
String card= request.getParameter("card");
//清空session中指定的屬性
session.removeAttribute("sessionPwd"); //刪除了密碼
//從session中獲取數據
String name=(String)session.getAttribute("sessionName");
String pwd=(String)session.getAttribute("sessionPwd");
//從request中獲取數據
String rName=(String)session.getAttribute("requestName");
String rPwd=(String)session.getAttribute("requestPwd");
//讓session失效 以秒為單位
session.setMaxInactiveInterval(3);
%>
<%-- 設置session的失效
01.在tomcat中的conf文件夾下面的web.xml 分鐘 計算的 默認30分鐘
<session-config>
<session-timeout>30</session-timeout>
</session-config>
02.項目中的web.xml中也可以設置 自定義 項目中的為準 分鐘
<session-config>
<session-timeout>30</session-timeout>
</session-config>
03.session.setMaxInactiveInterval(s) 當前的會話時間 不是整個web
--%>
session取得的數據:<br/>
您的用戶名是:<%=name %><br/>
您的密碼是:<%=pwd %><br/>
您的銀行卡密碼是:<%=card %><br/>
<hr/>
request取得的數據:<br/>
您的用戶名是:<%=rName %><br/>
您的密碼是:<%=rPwd %><br/></body> 4、創建一個User類 public class User {
private String name;
private String pwd;
@Override
public String toString() {
return "User [name=" + name + ", pwd=" + pwd + "]"; }
public User() {
super(); }
public User(String name, String pwd) {
super();
this.name = name;
this.pwd = pwd; }
public String getName() {
return name; }
public void setName(String name) {
this.name = name; }
public String getPwd() {
return pwd;}
public void setPwd(String pwd) {
this.pwd = pwd;}
} 5、創建1.jsp <[email protected] import="cn.bdqn.bean.User"%>
<body>
<%
//創建一個User對象
User user=new User("admin","123456");
//把對象放進session作用域
session.setAttribute("user", user);
%>
<a href="session/2.jsp">跳轉第二個界面</a>
</body> 6、創建2.jsp <body>
<%
//重定向
response.sendRedirect("3.jsp");
%>
</body> 7、創建3.jsp <[email protected] import="cn.bdqn.bean.User"%>
<body>
<%
User user=(User)session.getAttribute("user");
out.print(user.getName());
%>
<%=session.getAttribute("user")%>
</body> 四、cookie 1、1.jsp <body>
<form action="cookie/2.jsp" method="post">
姓名:<input type="text" name="userName"/>
<button type="submit">登錄</button>
</form>
<%
//獲取第二個界面的信息
String msg=(String)request.getAttribute("msg");
//有可能Null
if(msg!=null){
out.print(msg);
}
%>
</body> 2、2.jsp <[email protected] import="java.net.URLEncoder"%>
<body>
<%
request.setCharacterEncoding("utf-8"); //解決post請求亂碼問題
//獲取登陸的用戶名
String name =request.getParameter("userName");
//判斷用戶名是不是admin
if(name.equalsIgnoreCase("admin")){
//在返回到第一個界面時 給一個提示
request.setAttribute("msg", "不允許使用admin登錄!");
//轉發
request.getRequestDispatcher("1.jsp").forward(request, response);
}else{
//成功! 跳轉到下個界面,並把用戶名傳遞下去
//01.創建cookie 如果有中文 必須需要設置編碼格式
Cookie cookie=new Cookie("user",URLEncoder.encode(name,"utf-8"));
//02.如果想給cookie設置有效期 必須在增加之前
cookie.setMaxAge(20);
//03.給響應新增cookie
response.addCookie(cookie);
//重定向
response.sendRedirect("3.jsp");
}
%>
</body> 3、3.jsp <[email protected] import="java.net.URLDecoder"%>
<body>
<%
//獲取第二個界面的cookie
Cookie [] cookies= request.getCookies();
String name="";
//遍歷數組 獲取我們想要的 user
for(Cookie cookie:cookies){
if(cookie.getName().equals("user")){ //找到了
//進行中文的解碼
name=URLDecoder.decode(cookie.getValue(), "utf-8");
out.print("用戶名====》"+name);
}
}
%>
</body>
<%-- action:我們需要提交的地址 method:請求的方式 --%>
<form action="doMain.jsp" method="get">
<table>
<tr>
<td>用戶名:</td>
<td><input type="text" name="userName"></td>
</tr>
<tr>
<td>密碼:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td><input type="submit" value="登錄"></td>
</tr>
</table>
</form>
</body> 2、創建對應的處理頁面doMain.jsp
<h1>登錄成功</h1>
<%-- login.jsp中的form表單 get方式請求亂碼
01.治標不治本 不推薦使用
String userName=new String(name.getBytes("iso-8859-1"),"utf-8");
02.治本
在服務器中的conf文件夾中找到server.xml文件中的Connector節點中 新增屬性
URIEncoding="UTF-8"
--%>
<%
//根據login.jsp頁面 name的屬性值 獲取 value
//post亂碼 解決 是不是每個頁面都需要設置 請求編碼格式??? 後面 我們會用Filter
request.setCharacterEncoding("utf-8"); //請求的編碼
response.setCharacterEncoding("utf-8"); //響應的編碼
String name=request.getParameter("userName"); //獲取用戶名
String pwd=request.getParameter("password"); //獲取密碼
%>
<%-- 就是想把login頁面的值 傳遞給last.jsp --%>
<%
out.print("用戶名:"+name);
out.print("密碼:"+pwd);
//把從login頁面拿到的值 存儲到了 request作用域中了
request.setAttribute("userName", name);
request.setAttribute("password", pwd);
//轉發到了last.jsp 攜帶了數據 last頁面能取得數據
//request.getRequestDispatcher("last.jsp").forward(request, response);
//重定向last.jsp 數據都會丟失! last頁面不能取得數據
response.sendRedirect("last.jsp");
%>
<%-- get請求 --%>
<a href="last.jsp?userName=小黑黑2&password=123456">跳轉到最後一個界面</a>
</body>
3、創建last.jsp看能不能獲取login.jsp的值
<h1>last.jsp</h1>
<%
//在doMain中使用了轉發後 能直接獲取 login頁面的值
String name=request.getParameter("userName"); //獲取用戶名
String pwd=request.getParameter("password"); //獲取密碼
out.print("用戶名:"+name);
out.print("密碼:"+pwd);
%>
<%
//從request.getAttribute()取值
request.setCharacterEncoding("utf-8"); //請求的編碼
String name1=(String)request.getAttribute("userName");//獲取用戶名
String pwd2=(String)request.getAttribute("password"); //獲取密碼
out.print("用戶名:"+name1);
out.print("密碼:"+pwd2);
%>
</body>
二、通過request獲取界面的多個值
<input type="checkbox" name="box" value="別玩手機">別玩手機"
<input type="checkbox" name="box" value="就玩手機">就玩手機"
<input type="checkbox" name="box" value="還玩手機">還玩手機"
<input type="checkbox" name="box" value="真玩手機">真玩手機"
<input type="checkbox" name="box" value="玩手機">玩手機">
<button type="submit">提交</button>
</form> 6、創建request2.jsp頁面獲取request1.jsp的值 <body>
<%
request.setCharacterEncoding("utf-8");
//獲取選中復選框的值
String [] boxs=request.getParameterValues("box");
//首先進行判斷 必須先判斷非空
if(boxs!=null&&boxs.length!=0){
for(String box:boxs){
out.print(box+"<br/>");
}
}else{
//重定向到request1界面
response.sendRedirect("request1.jsp");
}
%>
<h1>request對象常用的方法</h1>
獲取http請求中使用的方法名稱 <%=request.getMethod() %><br/>
獲取http請求中調用servlet的url部分 <%=request.getServletPath() %><br/>
獲取http請求中MIME類型 <%=request.getContentType() %><br/>
獲取請求中服務器主機名稱 <%=request.getServerName() %><br/>
獲取請求中服務器的端口號名稱 <%=request.getServerPort() %><br/>
獲取請求中服務器的ip地址 <%=request.getRemoteAddr()%><br/>
獲取請求中服務器的ip地址 <%=request.getRemoteHost()%><br/>
獲取請求中使用的協議 <%=request.getScheme() %><br/>
</body> 三、session 1、創建session1jsp <body>
<form action="session2.jsp" method="post">
<table><tr> <td>用戶名:</td>
<td><input type="text" name="userName"></td></tr>
<tr> <td>密碼:</td>
<td><input type="password" name="password"></td> </tr>
<tr><td><input type="submit" value="登錄"></td></tr> </table>
</form> </body> 2、創建session2.jsp <body>
<%
request.setCharacterEncoding("utf-8");
//獲取session1.jsp的信息
String name= request.getParameter("userName");
String pwd= request.getParameter("password");
//把信息保存到session
session.setAttribute("sessionName", name);
session.setAttribute("sessionPwd", pwd);
//把信息保存到request
request.setAttribute("requestName", name);
request.setAttribute("requestPwd", pwd);
//重定向 request作用域的值消失 session呢???
response.sendRedirect("session3.jsp");
%>
<form action="session3.jsp" method="post">
<table>
<tr> <td>銀行卡密碼:</td>
<td><input type="text" name="card"></td></tr>
<tr><td><input type="submit" value="登錄"></td></tr>
</table></form></body> 3、創建session3.jsp <body>
<%
request.setCharacterEncoding("utf-8");
//獲取銀行卡密碼
String card= request.getParameter("card");
//清空session中指定的屬性
session.removeAttribute("sessionPwd"); //刪除了密碼
//從session中獲取數據
String name=(String)session.getAttribute("sessionName");
String pwd=(String)session.getAttribute("sessionPwd");
//從request中獲取數據
String rName=(String)session.getAttribute("requestName");
String rPwd=(String)session.getAttribute("requestPwd");
//讓session失效 以秒為單位
session.setMaxInactiveInterval(3);
%>
<%-- 設置session的失效
01.在tomcat中的conf文件夾下面的web.xml 分鐘 計算的 默認30分鐘
<session-config>
<session-timeout>30</session-timeout>
</session-config>
02.項目中的web.xml中也可以設置 自定義 項目中的為準 分鐘
<session-config>
<session-timeout>30</session-timeout>
</session-config>
03.session.setMaxInactiveInterval(s) 當前的會話時間 不是整個web
--%>
session取得的數據:<br/>
您的用戶名是:<%=name %><br/>
您的密碼是:<%=pwd %><br/>
您的銀行卡密碼是:<%=card %><br/>
<hr/>
request取得的數據:<br/>
您的用戶名是:<%=rName %><br/>
您的密碼是:<%=rPwd %><br/></body> 4、創建一個User類 public class User {
private String name;
private String pwd;
@Override
public String toString() {
return "User [name=" + name + ", pwd=" + pwd + "]"; }
public User() {
super(); }
public User(String name, String pwd) {
super();
this.name = name;
this.pwd = pwd; }
public String getName() {
return name; }
public void setName(String name) {
this.name = name; }
public String getPwd() {
return pwd;}
public void setPwd(String pwd) {
this.pwd = pwd;}
} 5、創建1.jsp <[email protected] import="cn.bdqn.bean.User"%>
<body>
<%
//創建一個User對象
User user=new User("admin","123456");
//把對象放進session作用域
session.setAttribute("user", user);
%>
<a href="session/2.jsp">跳轉第二個界面</a>
</body> 6、創建2.jsp <body>
<%
//重定向
response.sendRedirect("3.jsp");
%>
</body> 7、創建3.jsp <[email protected] import="cn.bdqn.bean.User"%>
<body>
<%
User user=(User)session.getAttribute("user");
out.print(user.getName());
%>
<%=session.getAttribute("user")%>
</body> 四、cookie 1、1.jsp <body>
<form action="cookie/2.jsp" method="post">
姓名:<input type="text" name="userName"/>
<button type="submit">登錄</button>
</form>
<%
//獲取第二個界面的信息
String msg=(String)request.getAttribute("msg");
//有可能Null
if(msg!=null){
out.print(msg);
}
%>
</body> 2、2.jsp <[email protected] import="java.net.URLEncoder"%>
<body>
<%
request.setCharacterEncoding("utf-8"); //解決post請求亂碼問題
//獲取登陸的用戶名
String name =request.getParameter("userName");
//判斷用戶名是不是admin
if(name.equalsIgnoreCase("admin")){
//在返回到第一個界面時 給一個提示
request.setAttribute("msg", "不允許使用admin登錄!");
//轉發
request.getRequestDispatcher("1.jsp").forward(request, response);
}else{
//成功! 跳轉到下個界面,並把用戶名傳遞下去
//01.創建cookie 如果有中文 必須需要設置編碼格式
Cookie cookie=new Cookie("user",URLEncoder.encode(name,"utf-8"));
//02.如果想給cookie設置有效期 必須在增加之前
cookie.setMaxAge(20);
//03.給響應新增cookie
response.addCookie(cookie);
//重定向
response.sendRedirect("3.jsp");
}
%>
</body> 3、3.jsp <[email protected] import="java.net.URLDecoder"%>
<body>
<%
//獲取第二個界面的cookie
Cookie [] cookies= request.getCookies();
String name="";
//遍歷數組 獲取我們想要的 user
for(Cookie cookie:cookies){
if(cookie.getName().equals("user")){ //找到了
//進行中文的解碼
name=URLDecoder.decode(cookie.getValue(), "utf-8");
out.print("用戶名====》"+name);
}
}
%>
</body>
Web(二)