2.jsp+servlet登錄功能實現


登錄共功能實現:

實現要求,用戶輸入賬號和密碼點擊登錄

1.輸入正確的賬號密碼跳轉到主頁面並顯示出登錄的賬號名稱。

2.輸入錯誤的賬號和密碼跳轉到登錄頁面去,並提示賬號和密碼錯誤。

 

login.jsp頁面代碼

<body>
    <%=request.getAttribute("errorMessage") == null ? "" : request.getAttribute("errorMessage")%>
    <form action="/MyFirstWebProjects/LoginServlet" method="post">
        <table>
            <tr>
                <td>username</td>
                <td><input type="text" name="user" /></td>
            </tr>
            <tr>
                <td>password</td>
                <td><input type="password" name="pass" /></td>
            </tr>
            <tr>
                <td></td>
                <td><input type="submit" value="登錄" /></td>
            </tr>
        </table>
    </form>
</body>

home.jsp頁面代碼

<body>
    用戶名:<%=request.getAttribute("username") %>
</body>

loginServlet.java代碼

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 獲取頁面form里面的參數
        String user = request.getParameter("user");
        String pass = request.getParameter("pass");
        
        if(checkUserAndPass(user,pass)) {
            // 頁面傳參數
            request.setAttribute("username", user);
            // 頁面跳轉
            request.getRequestDispatcher("/html/home.jsp").forward(request,response); 
        }else {
            // 頁面傳參數
            request.setAttribute("errorMessage", "賬號或密碼錯誤");
            // 頁面跳轉
            request.getRequestDispatcher("/html/index.jsp").forward(request,response); 
        }
        
    
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
    
    /**
        *    校驗賬號和密碼是否合法
     * @param user
     * @param pass
     * @return
     */
    private boolean checkUserAndPass(String user,String pass) {
        
        Connection conn = SqlConnection.getConnection();
        try {
            PreparedStatement p = conn.prepareStatement("select count(*) from user where user=? and pass=?");
            p.setString(1, user);
            p.setString(2, pass);
            ResultSet set = p.executeQuery();
            set.next();
            if(set.getInt(1) > 0) {
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

}

 

知識點

  get請求方式和post請求凡是的區別?

  1.post請求主要是用來提交新的數據給服務器,get請求主要是用來獲取或者查詢某些數據。

  2.POST用body傳輸數據,而GET用url傳輸,比POST更加容易暴露參數。但是從攻擊的角度,無論是GET還是POST都不夠安全,因為HTTP本身是明文協議

  3.post參數傳遞沒有限制,可以是二進制和ASCII。但是get只能是ASCII參數傳遞。

  4.GET方式URL是受限制的,URL的最大長度位2048個字符,POST無限制

  5.POST相對比GET安全,因為參數不會被保留在瀏覽器歷史或者服務器日志中

  

  servlet中重定向和轉發理解

一句話,轉發是服務器行為,重定向是客戶端行為。為什么這樣說呢,這就要看兩個動作的工作流程:

轉發過程:客戶瀏覽器發送http請求----》web服務器接受此請求--》調用內部的一個方法在容器內部完成請求處理和轉發動作----》將目標資源發送給客戶;在這里,轉發的路徑必須是同一個web容器下的url,其不能轉向到其他的web路徑上去,中間傳遞的是自己的容器內的request。在客戶瀏覽器路徑欄顯示的仍然是其第一次訪問的路徑,也就是說客戶是感覺不到服務器做了轉發的。轉發行為是瀏覽器只做了一次訪問請求。

重定向過程:客戶瀏覽器發送http請求----》web服務器接受后發送302狀態碼響應及對應新的location給客戶瀏覽器--》客戶瀏覽器發現是302響應,則自動再發送一個新的http請求,請求url是新的location地址----》服務器根據此請求尋找資源並發送給客戶。在這里location可以重定向到任意URL,既然是瀏覽器重新發出了請求,則就沒有什么request傳遞的概念了。在客戶瀏覽器路徑欄顯示的是其重定向的路徑,客戶可以觀察到地址的變化的。重定向行為是瀏覽器做了至少兩次的訪問請求的。

通俗理解

重定向:你先去了A局,A局的人說:“這個事情不歸我們管,去B局”,然后,你就從A退了出來,自己乘車去了B局。 

轉發:你先去了A局,A局看了以后,知道這個事情其實應該B局來管,但是他沒有把你退回來,而是讓你坐一會兒,自己到后面辦公室聯系了B的人,讓他們辦好后,送了過來。

  

  重定向和轉發語法

  在servlet中重定向和轉發

  response.sendRedirect("/html/home.jsp");

  request.getRequestDispatcher("/html/home.jsp").forward(request,response); 

在jsp頁面的重定向和轉發
<jsp:forward page="apage.jsp" />
<%response.sendRedirect("new.jsp");%>

 

  重定向和轉發區別?

  Forward和Redirect代表了兩種請求轉發方式:直接轉發和間接轉發。對應到代碼里,分別是RequestDispatcher類的forward()方法和HttpServletRequest類的sendRedirect()方法。

  對於Redirect方式,服務器端在響應第一次請求的時候,讓瀏覽器再向另外一個URL發出請求,從而達到轉發的目的。它本質上是兩次HTTP請求,對應兩個request對象。

  對於Forward方式,客戶端瀏覽器只發出一次請求,Servlet把請求轉發給web容器由web容器響應該請求,兩個信息資源共享同一個request對象。

  

  jsp獲取servlet的參數

  servlet設置參數

request.setAttribute("username", user);

 

  jsp獲取參數

<%=request.getAttribute("errorMessage") == null ? "" : request.getAttribute("errorMessage")%>

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM