Servlet 登錄DEMO



        引言:突然回憶起一年前的面試,要我用servlet寫一個登錄窗口,成功就跳轉,失敗就重新登錄。開始覺得很簡單,這不小意思嘛!誰知道上機一試,徹底掉鏈子了,最後理所當然的被狠狠的鄙視了一番。至今想起,心寒不已。於是趁着那份決心,自己動手寫了一個demo,雖然基礎,但還是收穫很多.
       代碼大致結構圖如下:

          

     從結構可以看出,非常簡單,我就不一一說明了。

     先來看看index.jsp的內容:

<script type="text/javascript">
<%if(request.getAttribute("msg")!=null){%>
alert("用戶名和密碼錯誤!!!");
 <%}%>
</script>
</head>
<body>
<form id="formId" action="TestServlet1" method="post">
<table>
<tr><td>用戶名</td><td><input type="text" id="name" name="name"></td></tr>
<tr><td>密碼</td><td><input type="password" id="password"></td></tr>
<tr><td><input type="submit" value="登錄" /></td></tr>
</table>
</form>
</body>

    也就是兩個輸入框和一個提交按鈕。method="post"表面使用post方式提交,這樣就默認調用servlet裏面的doPost方法了。

再來看看比較重要的的一部,web.xml:

<servlet>
    <servlet-name>TestServlet2</servlet-name>
    <servlet-class>com.servlet.TestServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TestServlet2</servlet-name>
    <url-pattern>/TestServlet1</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

    看到這個地方大家要注意下,jsp中的TestServlet1是和web.xml裏面的TestServlet1對應的,請求對應到TestServlet1,然後再找到TestServlet2,從而找到對應的servlet.

    接下來看看servlet代碼TestServlet.java:

public class TestServlet extends HttpServlet {
 public TestServlet() {
  super();
 }
 public void destroy() {
  super.destroy(); 
 }
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  // doPost(request, response);
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
      request.setCharacterEncoding("UTF-8");
      String name=(String) request.getParameter("name");
      System.out.println("name==>"+name);
      request.setAttribute("name", name);
      if("zwm".equals(name)){
       request.getRequestDispatcher("success.jsp").forward(request, response);//轉發,是同一個請求,轉發到的jsp可以得到request裏面的屬性值
      }else{
       request.setAttribute("msg", "用戶名和密碼錯誤!!!");
       request.getRequestDispatcher("index.jsp").forward(request, response);//轉發,是同一個請求,轉發到的jsp可以得到request裏面的屬性值
      //response.sendRedirect("index.jsp");//重定向,屬於不同的請求,下個jsp無法得到request裏面的值
      }
 }
 public void init() throws ServletException {
  // Put your code here
 }
}

      裏面代碼比較簡單,只是對用戶名進行了驗證,如果用戶名對了就跳轉到成功頁面,並將輸入的用戶名顯示出來,如果不對則提示重新登錄。由於下一個頁面都需要獲得request裏面的屬性值,所以只能用轉發,不能使用重定向。

成功頁面也就一行關鍵的代碼:

<td>歡迎<%=request.getAttribute("name")%>登錄</td>
     在此期間遇到這樣的一個問題,開始在servlet中居然無法通過request.getParameter("name")獲得name的值,鬱悶了很久,後來才知道 ,我在form上加了enctype="multipart/form-data" 這個屬性,這樣問題就來了,大家都知道,這個屬性是在文件上傳的時候使用的,使用multipart/form-data上傳時,發送的請求和一般的http不一樣,需要轉化後才能讀其他參數,所以這個地方使用request就沒法獲得屬性值了。

    看完覺得確實很簡單,就是自己當初在學習的時候沒有自己動手寫一遍,也不至於被人給鄙視了,大家(java初學者)不妨自己試試,肯定有所收穫的。

   demo下載地址http://download.csdn.net/detail/javaweiming/7023885





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章