jsp之javaweb在學習

Jsp內置對象

  • request對象

客戶端的請求信息被封裝在request對象中,通過它才能瞭解到客戶的需求,然後做出響應。它是HttpServletRequest類的實例。request對象具有請求域,即完成客戶端的請求之前,該對象一直有效。常用方法如下:

  1. String getParameter(String name) 返回name指定參數的參數值
  2. String[] getParameterValues(String name) 返回包含參數name的所有值的數組
  3. void setAttribute(String, Object) 存儲此請求中的屬性
  4. Object getAttribute(String name) 返回指定屬性的屬性值
  5. String getContentType() 得到請求體的MIME類型
  6. String getProtocol() 返回請求用的協議類型及版本號
  7. String getServerName() 返回接收請求的服務器主機名

--

用戶註冊表單

<body>
<h1>用戶註冊</h1>
<hr>
<form name="regForm" action="request.jsp" method="post"">
<table>
    <tr>
        <td>用戶名</td>
        <td><input type="text" name="username"> </td>
    </tr>

    <tr>
        <td>
            <input type="checkbox" name="favorite" value="read"> 讀書
            <input type="checkbox" name="favorite" value="music"> 音樂
            <input type="checkbox" name="favorite" value="movie"> 電影
            <input type="checkbox" name="favorite" value="internet"> 上網
        </td>
    </tr>

    <tr>
        <td colspan="2"> <input type="submit" value="提交"> </td>
    </tr>

</table>
</form>
</body>

request.jsp

<body>
    <h1>request內置對象</h1>
    <%
        request.setCharacterEncoding("utf-8"); //解決中文亂碼
    %>
    用戶名:<%= request.getParameter("username") %><br>
    愛好:<% 
            String[] favor = request.getParameterValues("favorite");
            for(int i=0; i<favor.length; i++){
                out.println(favor[i]+" ");
            }
        %><br>

    請求體的MIME類型:<%= request.getContentType() %><br>
    協議類型及版本號:<%= request.getProtocol() %><br>
    服務器主機名:<%= request.getServerName() %><br>
    服務器端口號:<%= request.getServerPort() %><br>
    請求客戶端的IP地址:<%= request.getRemoteAddr() %><br>
    請求的真實路徑:<%= request.getRealPath("request.jsp")  %><br>
</body>
  • response對象

response對象包含了響應客戶請求的有關信息,但在Jsp中很少直接用到它。它是HttpServletResponse類的實例。response對象具有頁面作用域,即訪問一個頁面時,該頁面內的response對象只能對這次訪問有效,其它頁面的response對象對當前頁面無效

常用方法如下: 
1. String getCharacterEncoding() 返回響應用的是何種字符編碼 
2. void setContentType(String type) 設置響應的MIME類型 
3. PrintWriter getWriter() 返回可以向客戶端輸出字符的一個對象 
4. sendRedirect(java.lang.String.location) 重新定向客戶端的請求

  • 請求轉發與請求重定向

請求重定性

客戶端行爲,response.sendRedirect(),從本質上講等同於兩次請求,第一次請求對象不會保存,地址欄的URL地址會改變。

轉發請求

服務器行爲,request.getRequestDispatcher().forward(req,resp)是一次請求,轉發後請求對象會保存,地址欄的URL地址不會改變。

例如:

login.jsp

response.jsp

<% 
    response.setContentType("text/html;charset=utf-8"); 

    out.println("<h1>response內置對象<h1>");

    //請求重定向
    //response.sendRedirect("request.jsp");

    //請求轉發
    //request.getRequestDispatcher("request.jsp").forward(request, response);

%>      

request.jsp

  • session

session表示客戶端與服務器的一次會話 
Web中的session指的是用戶在遊覽某個網站時,從進入網站到遊覽器關閉所經過的這段時間,也就是用戶遊覽這個網站所花費的時間 

從上述定義中可以看到,session實際上是一個特定的時間概念

  • session對象

session對象是一個Jsp內置對象。 
session對象在第一個Jsp頁面被裝載時自動創建,完成會話期管理。 
從一個客戶打開遊覽器並連接服務器開始,到客戶關閉遊覽器離開這個服務結束,被稱爲一個會話。 
當一個客戶訪問一個服務器時,可能會在服務器的幾個頁面之間切換,服務器應當通過某種辦法知道這是一個客戶,就需要session對象。 
session對象是HttpSession類的實例。

session對象常用方法

  1. long getCreationTime() 返回Session創建時間
  2. String getId() 返回session創建時Jsp引擎爲它設置的唯一ID號
  3. void setAttribute(String name, Object value) 使用指定名稱將對象綁定到此會話
  4. Object getAttribute(String name) 返回與此會話中的指定名稱綁定在一起的對象,如果沒有對象綁定在該名稱下,則返回null。
  5. String[] getValueNames() 返回一個包含此session中所有可用屬性的數組
  6. void setMaxInactiveInterval(int max) 設置session最大生存期限(單位秒)
  7. int getMaxInactiveInterval() 返回兩次請求間隔多長時間此session被取消(單位秒)

--

例如

session_page01.jsp

<h1> session 內置對象</h1>
<% 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    session.setAttribute("username", "Jack");
    session.setAttribute("password", "11111");

    //設置當前session最大生存期限單位是秒
    session.setMaxInactiveInterval(5);
%>

session創建時間<%=sdf.format(session.getCreationTime()) %> <br>
session的ID編號<%=session.getId() %> <br>
從session中獲取用戶名:<%=session.getAttribute("username") %> <br>

<a href="session_page02.jsp">跳轉到session_page02</a> <br>

session_page02.jsp

<h1>session內置對象</h1>

session的ID編號<%= session.getId() %> <br>
從session中獲取用戶名:<%=session.getAttribute("username") %> <br>
session中保存的屬性有:<% 
                    String names[] = session.getValueNames();
                    for(int i=0; i<names.length; i++){
                        out.println(names[i] + " ");
                    }
                    %><br>
  • session生命週期

創建

當客戶端第一次訪問某個Jsp或者Servlet時候,服務器會爲當前會話創建一個sessionId,每次客戶端向服務器發送請求時,都會將此sessionId攜帶過去,服務端會對此sessionId進行校驗。

活動

  • 某次會話當中通過超鏈接打開的新頁面屬於同一次會話
  • 只要當前會話頁面沒有全部關閉,重新打開新的遊覽器窗口訪問同一項目資源時屬於同一次會話。
  • 除非本次會話的所有頁面都關閉後再重新訪問某個Jsp或者Servlet將會創建新的會話。
  • 注意原有會話還存在,只是這個舊的sessionId仍然存在於服務器,只不過再也沒有客戶端會攜帶它然後交於服務器校驗。

銷燬

  1. 調用session.invalidate()方法
  2. session過期(Tomcat默認超時時間爲30分鐘)
  3. 服務器重新啓動
  • 實現用戶登錄(不帶數據庫的)

用戶名admin,密碼admin,登錄成功使用服務器內部轉發到login_success.jsp頁面,並且提示登錄成功的用戶名。如果登錄失敗,則請求重定向到login_failure.jsp頁面。

login.jsp

<body>

<h1>用戶登錄</h1>
<hr>
<form action="dologin.jsp" name="loginForm" 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 colspan="2"><input type="submit" value="登錄">  </td>
</tr>


</table>
</form>

</body>

dologin.jsp

<% 
String userName = request.getParameter("userName");
String password = request.getParameter("password");

if("admin".equals(userName) && "admin".equals(password)){
    session.setAttribute("user", "admin");
    //服務器內部轉發
    request.getRequestDispatcher("login_success.jsp").forward(request, response);
}else{
    //請求重定向
    response.sendRedirect("login_fail.jsp");
}
%>

login_success.jsp

<body>
<% 
    String user = ""; 
    if(session.getAttribute("user") != null){
        user = session.getAttribute("user").toString();
    }
%>
<h1>歡迎<font color="red"><%= user %>  </font>登陸成功</h1>
</body>

login_fail.jsp

<body>
<h1>登陸失敗,請檢查</h1>
<a href="login.jsp">返回</a>
</body>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章