JavaWeb学习(八)---案例:Servlet实现注册和登录页面的处理

JavaWeb学习(八)—案例:Servlet实现注册和登录页面的请求处理

本案例主要实现了以下功能:

1.首页点击注册跳转至注册页面,点击登录跳转至登陆页面。

2.注册页面提交表单验证,注册成功跳转至登录页面,注册失败提示错误信息,重定向至注册页面。

3.登陆页面提交表单验证,登陆成功跳转至用户信息页面,登录失败提示错误信息,重定向至登陆页面

4.用户信息页面动态读取用户数据,点击注销用户,销毁用户信息,跳转至首页。点击退出用户,跳转至首页。


首页index.jsp的主要处理:在a标签中嵌入EL表达式,使用pageContext获取request,再通过request获取contextPath,contextPath相当于项目发布的路径,如本页面发布在http://localhost:8080/ServletDemo04/下,通过字符串拼接,就可以获得完整的URL

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    $Title$
    
  
  
    

ServletDemo03






首页效果如下:
JavaWeb学习(八)---案例:Servlet实现注册和登录页面的处理_第1张图片

注册页面register.jsp的处理:使用表单注册验证,在action中依然通过获取contextPath拼接完整的URL;使用js实现错误提示窗

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    注册新用户
    


    

注册新用户

用户名:

设置密码:

确认密码:

请选择感兴趣的方向:
Web前端 大数据 人工智能 后台开发

注册页面的效果图:
JavaWeb学习(八)---案例:Servlet实现注册和登录页面的处理_第2张图片

通过注册页面提交用户注册信息后对应的处理程序如下:

public class RequestTest02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //统一编码方式,尽量避免乱码问题出现
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        
        //获取一个ServletContext实现servlet的交互,用于传递用户名和密码
        ServletContext servletContext = this.getServletContext();

        //从前端获取请求信息
        String username = req.getParameter("username");
        String password1 = req.getParameter("password1");
        String password2 = req.getParameter("password2");
        String[] interests = req.getParameterValues("interest");
}
        //将注册信息存入servletContext中
        servletContext.setAttribute("username",username);
        servletContext.setAttribute("password",password1);
        servletContext.setAttribute("interest", Arrays.toString(interests));
       
    	//在控制台打印前端的请求信息,用于测试
        System.out.println("用户名:"+username);
        System.out.println("用户密码:"+password1);
        System.out.println("确认密码:"+password2);


        if (password1.equals(password2)){

            //如果注册时,两次密码输入一致,注册成功,跳转至登录页面
            
            // 重定向至登陆页面,客户端行为(服务器通知客户端请求另一个页面)
            //resp.sendRedirect("login.jsp");

            //转发请求:服务器行为(服务器转发请求至另一个页面)
            req.getRequestDispatcher("login.jsp").forward(req,resp);

        }else {
            
            //注册失败
            //为了提示错误信息,在servletContext中设置一个注册错误的属性,这个属性可以子啊jsp页面中获取该属性
            servletContext.setAttribute("RegisterError","pwd");
            //重定向至注册页面
            resp.sendRedirect("register.jsp");
        }
    }
}

注册成功会跳转至登陆页面,注册失败会有错误信息的弹窗提示:
JavaWeb学习(八)---案例:Servlet实现注册和登录页面的处理_第3张图片

登录页面login.jsp的处理:这里依然采用了html的表单验证,action传递URL参数,js实现错误信息提示。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    用户登陆
    


    

用户登录

用户名:

密码:

登陆页面的效果:
JavaWeb学习(八)---案例:Servlet实现注册和登录页面的处理_第4张图片

通过登录页面用户信息后对应的处理程序如下:

public class RequestTest03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //从前端获取请求信息
        String name = req.getParameter("username");
        String pwd = req.getParameter("password");

        //通过servletContext拿到注册成功的用户信息
        ServletContext servletContext = this.getServletContext();
        String username = (String) servletContext.getAttribute("username");
        String password = (String) servletContext.getAttribute("password");
        
        //判断用户是否存在
        if (username.equals(null)){
            //提示不存在该用户,重定向至首页
            //测试中,程序没有进入这段逻辑
            servletContext.setAttribute("UserError","NotExist");
            resp.sendRedirect("index.jsp");
        }
        //判断用户名和密码是否正确
        if (username.equals(name) && password.equals(pwd)){
            //用户名和密码输入正确,则跳转至用户信息页面
            req.getRequestDispatcher("useInfo.jsp").forward(req,resp);
        }else {
            //用户名和密码输入错误,重定向至登陆页面
            servletContext.setAttribute("LoginError","pwd");
            resp.sendRedirect("login.jsp");
        }
    }
}

登录失败的效果:先提示错误信息,点击确定会重定向至登录页面
JavaWeb学习(八)---案例:Servlet实现注册和登录页面的处理_第5张图片

登录成功会跳转至用户信息界面userInfo.jsp,该页面的处理主要包括从servletContext中获取用户的数据,并显示在页面中,这需要用到jsp的知识,这里使用了EL表达式,将动态的数据嵌入在页面中。除此之外,页面的最后需要完成注销用户和退出当前用户两个功能。退出用户只需将页面跳转至首页即可,通过a标签就可以实现。注销用户使要具体的程序实现。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    个人信息


个人信息

  • 用户名:${pageContext.servletContext.getAttribute("username")}
  • 用户密码:${pageContext.servletContext.getAttribute("password")}
  • 感兴趣的方向:${pageContext.servletContext.getAttribute("interest")}

注销当前用户 退出当前用户

用户信息页面的效果:
JavaWeb学习(八)---案例:Servlet实现注册和登录页面的处理_第6张图片

注销用户的处理程序:通过移除servletContext中的用户属性,达到注销的目的。

public class RequestTest04 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        servletContext.removeAttribute("username");
        servletContext.removeAttribute("password");
        servletContext.removeAttribute("interest");

        if (servletContext.getAttribute("username")==null){
            //用户信息被注销,回到首页
            resp.sendRedirect("index.jsp");

        }

    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

web.xml文件:


<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>RequestTest02servlet-name>
        <servlet-class>com.hooi.demo01.RequestTest02servlet-class>
    servlet>
    <servlet>
        <servlet-name>RequestTest03servlet-name>
        <servlet-class>com.hooi.demo01.RequestTest03servlet-class>
    servlet>
    <servlet>
        <servlet-name>RequestTest04servlet-name>
        <servlet-class>com.hooi.demo01.RequestTest04servlet-class>
    servlet>


    

    
    <servlet-mapping>
        <servlet-name>RequestTest02servlet-name>
        <url-pattern>/r2url-pattern>
    servlet-mapping>
    <servlet-mapping>
        <servlet-name>RequestTest03servlet-name>
        <url-pattern>/r3url-pattern>
    servlet-mapping>
    <servlet-mapping>
        <servlet-name>RequestTest04servlet-name>
        <url-pattern>/r4url-pattern>
    servlet-mapping>
web-app>

你可能感兴趣的:(JavaWeb)