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





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