• Servlet课程0426(十二)Servlet MV模式下用户登录及查看用户表中所有用户


    Welcome.java

    //登录界面
    package com.tsinghua;
    
    import javax.servlet.http.*;
    import java.io.*;
    import  java.sql.*;
    import java.util.*;
    
    public class Welcome extends HttpServlet{
        public void doGet(HttpServletRequest req, HttpServletResponse res)
        {
    
            //业务逻辑
            Connection ct = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
    
            try{
    
            //从Session中得到用户名
            HttpSession hs = req.getSession(true);
            String myName = (String)hs.getAttribute("uname");
            String name="";
            String passwd="";
            if(myName == null)
            {
                    //如果session中没有用户信息,在看看有没有cookie信息
                            //客户端得到所有cookie信息
            Cookie[] allCookies = req.getCookies();
            int i = 0;
            //如果allCookie不为空
            if(allCookies != null)
            {
                //从中取出cookie
                for (i = 0; i<allCookies.length; i++)
                {
                    //依次取出
                    Cookie temp = allCookies[i];
    
                    if(temp.getName().equals("myname"))
                    {
                        //得到cookie的值
                        name = temp.getValue();
                    }
                    else if(temp.getName().equals("mypasswd"))
                    {
                        passwd = temp.getValue();
                    }
                }
                System.out.println("myname="+name+" passwd="+passwd);
                if(!name.equals("") && passwd.equals(""))
                {
                    //loginCl去验证
                    res.sendRedirect("loginCl?username="+name+"&userpwd="+passwd);
                    return;
                }
            }
    
                    //返回登录界面
                    res.sendRedirect("login?info=error1");
                    return;
    
            }
            //解决中文乱码
            res.setCharacterEncoding("gbk");
            PrintWriter pw = res.getWriter();
            pw.println("<html>");
            pw.println("<body><center>");
            //在Servlet中显示图片
            pw.println("<img src='./imgs/1.GIF' /><br/>");
    
            pw.println("wel,hello");
            pw.println("你的用户名是,"+myName);
            pw.println("<br><a href=login>返回重新登录</a>");
    
            //==========================分页的功能=====================
            int pageSize = 3;//一页显示几条记录
            int pageNow = 1;//希望显示第几页
    
            //动态的接收pageNow
            String sPageNow = req.getParameter("pageNow");
            //用户第一次进入welcome页面,此时spageNow为null,所以不需要去改动pageNow,因为pageNow此时的值默认为1
            if(sPageNow != null)
            {
                pageNow = Integer.parseInt(sPageNow);
            }
    
            //调用UserBeanCl
            UserBeanCl ubc = new UserBeanCl();
            ArrayList al = ubc.getResultByPage(pageNow,pageSize);
    
            pw.println("<table border=1>");
            pw.println("<tr><th>id</th><th>name</th><th>password</th><th>email</th><th>grade</th></tr>");
            System.out.println("al.size = "+al.size());
    
            for (int i = 0; i < al.size(); i++)
            {
                System.out.println("i = "+i);
                
                UserBean ub = (UserBean) al.get(i);
    
                pw.println("<tr>");
                pw.println("<td>"+ub.getUserId()+"</td>");
                pw.println("<td>"+ub.getUserName()+"</td>");
                pw.println("<td>"+ub.getPasswd()+"</td>");
                pw.println("<td>"+ub.getMail()+"</td>");
                pw.println("<td>"+ub.getGrade()+"</td>");
                pw.println("</tr>");
    
            }
    
            pw.println("</table>");
            //显示超链接
            pw.println("<a href=wel?pageNow="+1+">首页</a>");
            if(pageNow != 1)
            {
                pw.println("<a href=wel?pageNow="+(pageNow-1)+">上一页</a>");
            }
    
            for(int i = pageNow; i <= pageNow+4; i++)
            {
                pw.println("<a href=wel?pageNow="+i+">"+i+"</a>");
            }
            int pageCount = ubc.getPageCount();
            if(pageNow != pageCount)
            {
                pw.println("<a href=wel?pageNow="+(pageNow+1)+">下一页</a>");
            }
    
                pw.println("</center></body>");
                pw.println("</html>");
    
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
    
        }
    
         //处理get请求
         //req用于获得客户端(浏览器)的信息
         //res用于向 客户端(浏览器)返回信息
        public void doPost(HttpServletRequest req, HttpServletResponse res)
        {
    
            this.doGet(req,res);
    
        }
    
    
    }

    UserBeanCl.java

    //这是一个处理类(处理users表)<---->操作userBean
    //业务逻辑部分
    package com.tsinghua;
    
    import java.sql.*;
    import java.util.*;
    
    
    public class UserBeanCl{
            //业务逻辑
            private    Connection ct = null;
            private    PreparedStatement ps = null;
            private    ResultSet rs = null;
            private int pageCount = 0;//共有几页(计算出来的)
    
            //返回pageCount
            public int getPageCount()
            {
                return this.pageCount;
            }
    
            //分页显示
            public ArrayList getResultByPage(int pageNow ,int pageSize){
    
                ArrayList al = new ArrayList();
                try{
    
                int rowCount = 0;//共有几条记录(查表)
                //1加载驱动
                ConnDB cd = new ConnDB();
                ct = cd.getConn();
    
                ps = ct.prepareStatement("select count(*) from users");
    
                rs = ps.executeQuery();
                if(rs.next())
                {
                    rowCount = rs.getInt(1);
                }
    
                //计算pageCount
                if(rowCount % pageSize == 0)
                {
                    pageCount = rowCount/pageSize;
                }
                else
                {
                    pageCount = rowCount/pageSize + 1;
                }
    
                ps = ct.prepareStatement("select top "+pageSize+" * from users where userId not in (select top "+(pageSize*(pageNow-1))+" userId from users)");
                //执行查询
                rs = ps.executeQuery();
                while(rs.next()){
                    //将rs中的每条记录封装到userBean ub
                    UserBean ub = new UserBean();
                    ub.setUserId(rs.getInt(1));
                    ub.setUserName(rs.getString(2));
                    ub.setPasswd(rs.getString(3));
                    ub.setMail(rs.getString(4));
                    ub.setGrade(rs.getInt(5));
    
                    //将ub放入到ArrayList中
                    al.add(ub);
                }
    
                }catch(Exception ex){
                    ex.printStackTrace();
                }finally{
                    this.close();
                }
                return al;
            }
    
            //验证用户
            public boolean checkUser(String u, String p){
                boolean b = false;
                try{
                    //得到连接
                    ConnDB cd = new ConnDB();
                    ct = cd.getConn();
    
                    ps = ct.prepareStatement("select top 1 passwd from users where username=?");
                    ps.setString(1,u);
                    rs = ps.executeQuery();
                    if(rs.next()){
                        String dbPasswd = rs.getString(1);
                        if(dbPasswd.equals(p)){
                            b = true;
                        }
                    }
    
    
                }catch(Exception ex){
                    ex.printStackTrace();
                }finally{
                    this.close();
                }
                return b;
    
            }
    
            //关闭资源
            public void close()
            {
                try{
                    if(rs != null){
                        rs.close();
                        rs = null;
                    }
                    if(ps != null){
                        ps.close();
                        ps = null;
                    }
                    if(ct != null){
                        ct.close();
                        ct = null;
                    }
                }catch(Exception ex){
                    ex.printStackTrace();
                }
            }
    
    
    }

    UserBean.java

    //这是一个UserBean <---->user表映射
    //它的一个对象<---->users表的一条记录对应
    //本身代表的就是数据
    package com.tsinghua;
    
    public class UserBean{
        private int userId;
        private String userName;
        private String passwd;
        private String mail;
        private int grade;
    
        public void setUserId(int userId)
        {
            this.userId = userId;
        }
        public int getUserId()
        {
            return this.userId;
        }
    
        public void setUserName(String userName){
            this.userName = userName;
        }
        public String getUserName(){
            return this.userName;
        }
    
        public void setPasswd(String passwd)
        {
            this.passwd = passwd;
        }
        public String getPasswd(){
            return this.passwd;
        }
    
        public void setMail(String mail)
        {
            this.mail = mail;
        }
        public String getMail(){
            return this.mail;
        }
    
        public void setGrade(int grade)
        {
            this.grade = grade;
        }
        public int getGrade()
        {
            return this.grade;
        }
    
    
    
    }

    ConnDB.java

    //从数据库中得到连接
    package com.tsinghua;
    
    import java.sql.*;
    
    public class ConnDB{
    
        private Connection ct = null;
    
        public Connection getConn()
        {
            try{
                //1.加载 驱动
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                //2.返回连接
                ct = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=spdb","sa","123456");
    
            }catch(Exception ex){
                ex.printStackTrace();
            }
            return ct;
        }
    }

    LoginCl.java

    //登录界面
    package com.tsinghua;
    
    import javax.servlet.http.*;
    import java.io.*;
    import java.sql.*;
    
    public class LoginCl extends HttpServlet{
        public void doGet(HttpServletRequest req, HttpServletResponse res)
        {
    
                Connection ct = null;
                Statement sm = null;
                ResultSet rs = null;
    
    
                //业务逻辑
            try{
    
                //接收用户名和密码
                String u  = req.getParameter("username");
                String p = req.getParameter("userpwd");
    
                //调用UserBeanCl 1.创建一个对象
                UserBeanCl ubc = new UserBeanCl();
    
                //2.使用UserBeanCl处理的方法
                if(ubc.checkUser(u,p))
                {
    
    
                        //将用户名和密码保存在客户端
                        //创建Cookie
                        Cookie name = new Cookie("myname",u);
                        Cookie pass = new Cookie("mypasswd",p);
    
                        //设置时间
                        name.setMaxAge(14*24*3600);
                        pass.setMaxAge(14*24*3600);
    
                        //回写到客户端
    
                        res.addCookie(name);
                    res.addCookie(pass);
    
    
    
                    //将验证成功的信息写入session
                    //得到session,得到session那张表
                    HttpSession hs = req.getSession(true);
                    //默认30分钟,为了展示效果下面修改销毁时间
                    //该方法是按照秒来算的
                    hs.setMaxInactiveInterval(30);
    
                    //写入属性
                    hs.setAttribute("uname",u);
    
                    //跳转到welcome
                    res.sendRedirect("wel?uname="+u);
    
    
                }else{
                    //说明用户名不存在
                    //不合法
                    //写你要到的Servlet的那个URL
                    res.sendRedirect("login");
    
                }
    
    
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }finally{
    
                try{
                        if(rs != null)
                            rs.close();
                        if(sm != null)
                            sm.close();
                        if(ct != null)
                            ct.close();
    
    
                    }catch(Exception ex){
                        ex.printStackTrace();
                    }
    
            }
    
        }
    
         //处理get请求
         //req用于获得客户端(浏览器)的信息
         //res用于向 客户端(浏览器)返回信息
        public void doPost(HttpServletRequest req, HttpServletResponse res)
        {
    
            this.doGet(req,res);
    
        }
    
    
    }

    Login.java

    //登录界面
    package com.tsinghua;
    
    import javax.servlet.http.*;
    import java.io.*;
    
    public class Login extends HttpServlet{
        public void doGet(HttpServletRequest req, HttpServletResponse res)
        {
    
                //业务逻辑
            try{
                //中文乱码
                //浏览器默认ISO-8859
                res.setContentType("text/html;charset=gbk");
    
                PrintWriter pw = res.getWriter();
    
                //返回登录界面
                pw.println("<html>");
                pw.println("<body>");
                //得到error信息
                String info = req.getParameter("info");
                if(info != null)
                {
                    pw.println("<h1>你的用户名或是密码错误!</h1>");
                }
                pw.println("<h1>登录界面</h1>");
                pw.println("<form action='loginCl' method=post>");
                pw.println("用户名<input type='text' name='username'/><br/>");
                pw.println("<br/>密&nbsp码<input type='password' name='userpwd'/><br/>");
                pw.println("<br/><input type=checkbox name=keep value=2/>两周内不用再登录<br/>");
                pw.println("<br/><input type='submit' value='loing' /><br/>");
                pw.println("</form>");
                pw.println("</body>");
                pw.println("</html>");
    
    
            }
            catch(Exception ex)
            {
                ex.printStackTrace();
            }
    
        }
    
         //处理get请求
         //req用于获得客户端(浏览器)的信息
         //res用于向 客户端(浏览器)返回信息
        public void doPost(HttpServletRequest req, HttpServletResponse res)
        {
    
            this.doGet(req,res);
    
        }
    
    
    }
  • 相关阅读:
    java冒泡算法
    java时间操作
    Java重写构造方法
    正则Sub用法
    Python正则反向引用
    Django发送邮件
    Django导出excel
    Nginx编译安装
    年薪20万Python工程师进阶(7):Python资源大全,让你相见恨晚的Python库
    Go语言学习笔记
  • 原文地址:https://www.cnblogs.com/beautiful-code/p/5438457.html
Copyright © 2020-2023  润新知