JSP的內建物件一
阿新 • • 發佈:2019-02-10
JSP的九大內建物件:
- page
- out
- request
- response
- session
- application
- page context
- config
- exception
<body> //reg.jsp裡面的連結 <%String id=request.getParameter("id"); String name=request.getParameter("name"); out.print("id="+id+"<br>"); out.print("name="+name+"<br>"); %> <hr> <% int[] n={60,70,80}; for(int i=0;i<n.length;i++){ out.print(n[i]); } %> <hr> <% int[] n1={60,70,80}; for(int i=0;i<n1.length;i++){ out.println(n1[i]); } %> <hr> <% int[] n2={60,70,80}; for(int i=0;i<n2.length;i++){ out.print(n2[i]+"<br>"); } %> </body>
id=null
name=null
607080
60 70 80
60
70
80
二:request(請求)
request物件主要用於處理客戶端請求
reg.jsp
doreg.jsp<body> <form action="doreg.jsp" method="post"> <a href="out.jsp?id=1&name=yl">我是連結</a><br> 姓名:<input type="text" name="username" /><br> 密碼:<input type="password" name="password" /><br> 愛好:<input type="checkbox" name="aihao" value="籃球" />籃球 <input type="checkbox" name="aihao" value="攀巖" />攀巖 <input type="checkbox" name="aihao" value="游泳" />游泳<br> <input type="submit" value="提交" /> </form> </body>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% //設定請求的編碼格式,該方式只對post提交有效,防止中文亂碼 request.setCharacterEncoding("utf-8"); //獲取表單資料 String username = request.getParameter("username");//請求獲取引數 String password = request.getParameter("password"); String[] info = request.getParameterValues("aihao");//請求獲取多個值對應的資料 out.print("姓名:"+username+"<br>"); out.print("密碼:"+password+"<br>"); String str=""; for(int i = 0;i<info.length;i++){ str += info[i]+" "; } out.print("愛好:"+str); %>
亂碼的解決方法:
在方式3中,埠號也是在那修改(myeclipse內建Tomcat與Apache Tomcat 埠衝突時修改)
二:request與response中轉發與重定向
response物件用於響應客戶請求並向客戶端輸出資訊
response 物件常用方法
void sendRedirect (String location):將請求重新定位到一個不同的URL,即頁面重定向
Login.jsp
<body>
<form action="doLogin.jsp" method="post">
姓名:<input type="text" name="name" /><br>
密碼:<input type="password" name="password" /><br>
<input type="submit" value="提交">
</form>
</body>
doLogin.jsp
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
String password = request.getParameter("password");
//這是轉發的方式
/*
* if(name.equals("yl")&&password.equals("123456")){ //equals等於
request.getRequestDispatcher("success.jsp").forward(request, response);
//getRequestDispatcher 獲取請求排程程式 forward 轉發 response 響應
}else{ request.getRequestDispatcher("Login.jsp").forward(request, response); } */ //這是重定向的方式 /* * if(name.equals("yl")&&password.equals("123456")){ response.sendRedirect("success.jsp"); // sendRedirect 傳送重定向
}else{ response.sendRedirect("Login.jsp");
} */ //如果重定向要傳值,則 /** if(name.equals("yl")&&password.equals("123456")){ response.sendRedirect("success.jsp?name="+name); }else{ response.sendRedirect("Login.jsp"); } */ //如果想要彈窗,則 /** *if(name.equals("yl")&&password.equals("123456")){ //彈窗不會出現,因為來不及彈窗,加上鍊接即可
// out.print("<script>alert('登陸成功');Location.href="success.jsp"</script>"); response.sendRedirect("success.jsp?name="+name); }else{ response.sendRedirect("Login.jsp"); } */ %> </body>
轉發與重定向的區別:
轉發:
- 瀏覽器位址列不顯示跳轉後的路徑,更加安全
- 轉發是伺服器內部的跳轉頁面,它不能訪問外部的資源
- 轉發多個頁面認為是一次請求,可以獲得一次請求的所有引數的值
- 重定向位址列可以顯示跳轉的路徑
- 重定向後可以訪問專案外的資源
- 重定向相當於重新發送了一次新的請求,前面請求的資料全部丟失
一個會話就是瀏覽器與伺服器之間的一次通話
session的常用方法:
問題:一個session對應一個視窗,那麼通過超連結開啟的視窗是否也是新的session呢?
分析:
- 每個session物件都與瀏覽器一一對應,重新開啟一個瀏覽器,相當於建立一個session物件
- 通過超連結開啟的新視窗,新視窗的session與其父視窗的session相同
doLogin.jsp
<body>
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
String password = request.getParameter("password");
//這是轉發的方式
if(name.equals("yl")&&password.equals("123456")){
//在session中存放使用者資訊
session.setAttribute("user", name);
//設定session過期時間(這裡的時間單位是秒)
//setMaxInactiveInterva 設定最大非活動間隔
session.setMaxInactiveInterval(20); request.getRequestDispatcher("success.jsp").forward(request, response); }else{ request.getRequestDispatcher("Login.jsp").forward(request, response); } %> </body>
在web.xml中也可以設定session
</welcome-file-list>
<!-- 這裡的時間單位是min -->
<session-config>
<session-timeout>10</session-timeout>
</session-config>
success.jsp
<body>
<%
String name=(String)session.getAttribute("user");
if(name==null){
response.sendRedirect("Login.jsp");
}
%>
歡迎<%=name %>登陸成功!
<br>
<a href="exit.jsp">安全退出</a>
</body>
exit.jsp
<body>
<%
session.removeAttribute("user");
// removeAttribute 刪除指定名稱所對應的物件
response.sendRedirect("Login.jsp");
%>
</body>
在系統中增加登入驗證,如果session中不存在該使用者的登入資訊,轉入登入頁面
checkLogin.jsp
<% if(session.getAttribute("user")==null){
response.sendRedirect("Login.jsp");
} %>
如果session中不存在該使用者的登入資訊,轉入登入頁面
如果session中不存在該使用者的登入資訊,轉入登入頁面