使用三个Servlet实现简单登录验证

功能描述:

  1. LoginServlet.java: 登录界面Servlet

  2. LoginClServlet.java: 用户名和密码校验业务处理

  3. WelcomeServlet.java: 登录成功的欢迎界面

-----------------------------------------------------

1. LoginServlet.java:

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // 设置编码
        resp.setCharacterEncoding("GBK");
        
        // 创建输出流
        PrintWriter out = resp.getWriter();
        
        // 创建登录页面
        out.print("<html>");
        out.print("<body>");
        out.print("<form action='loginCl' method='POST'>");
        out.print("用户名: <input type='text' name='userName'/><br/>");
        out.print("密码: <input type='password' name='password'/><br/>");
        out.print("<input type='submit' value='登录'/>");
        out.print("</form>");
        out.print("</body>");
        out.print("</html>");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

2. web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <!-- 登录界面Servlet -->
  <servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>com.itcast.servlet.LoginServlet</servlet-class>
  </servlet>
  <!-- 登录处理Servlet -->
  <servlet>
    <servlet-name>loginCl</servlet-name>
    <servlet-class>com.itcast.servlet.LoginClServlet</servlet-class>
  </servlet>
  <!-- 欢迎页面Servlet -->
  <servlet>
    <servlet-name>welcome</servlet-name>
    <servlet-class>com.itcast.servlet.WelcomeServlet</servlet-class>
  </servlet>
 
  <servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>loginCl</servlet-name>
    <url-pattern>/loginCl</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>welcome</servlet-name>
    <url-pattern>/welcome</url-pattern>
  </servlet-mapping>
</web-app>

3. LoginClServlet.java:

@SuppressWarnings("serial")
public class LoginClServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // 获取参数
        String userName = req.getParameter("userName");
        String password = req.getParameter("password");
        
        // 简单校验
        if ("Peter".equals(userName) && "123".equals(password)) {
            // 跳转到成功页面
            resp.sendRedirect("welcome");
        } else {
            // 跳转到登录界面
            resp.sendRedirect("login");
        }
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

4. WelcomeServlet.java:

public class WelcomeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setCharacterEncoding("GBK");
        PrintWriter out = resp.getWriter();
        out.print("<h2>欢迎来访!</h2>");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

-------------------------------------------------

测试:

------------------------------------------------------------

功能: 同一用户不同页面共享数据, 传递用户名和密码

方法1: sendRedirect重定向

LoginClServlet.Java:

resp.sendRedirect("welcome?userName=" + userName + "&password=" + password);

WelcomeServlet.Java:

resp.setContentType("text/html;charset=UTF-8");  // 告诉浏览器发送的是html片段, 否则有点浏览器会不解析

out.print("<h2>欢迎来访! 用户名: " + userName
                + ", 密码: " + password + "</h2>");

测试:

URL中显示用户信息, 不安全! 重定向地址栏变化, 改用转发, 地址栏没有变化:

req.getRequestDispatcher("welcome?userName=" + userName + "&password=" + password).forward(req, resp);

方法2: 使用隐藏表单传递数据

功能: LoginServlet 向 LoginClServlet 传递用户id

LoginServlet.java:

out.print("<input type='hidden' name='id' value='007'/>");

LoginClServlet.java:

String id = req.getParameter("id");
        System.out.println("id: " + id);

测试:

  页面不显示该控件, 但是后台打印: 

 

posted @ 2017-03-12 15:33  半生戎马,共话桑麻、  阅读(272)  评论(0)    收藏  举报
levels of contents