Servlet课程0426(十一)Servlet Cookie实现两周内不用重复登录

Welcome.java

//登录界面
package com.tsinghua;

import javax.servlet.http.*;
import java.io.*;
import  java.sql.*;

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;//希望显示第几页
        int rowCount = 0;//共有几条记录(查表)
        int pageCount = 0;//共有几页(计算出来的)

        //动态的接收pageNow
        String sPageNow = req.getParameter("pageNow");
        //用户第一次进入welcome页面,此时spageNow为null,所以不需要去改动pageNow,因为pageNow此时的值默认为1
        if(sPageNow != null)
        {
            pageNow = Integer.parseInt(sPageNow);
        }

        //得到rowCount
        //1加载驱动
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        //得到连接
        ct = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=spdb","sa","123456");
            //创建一个Statement
        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 ? * from users where userId not in (select top ? userId from users)");
        //给问号?赋值,preparedStatement会自动的将问号转换成相应的数据类型
        //setInt方法第一个Int表示是第几个问号,第二个int表示给问号赋的具体的值
        ps.setInt(1,pageSize);
        ps.setInt(2,pageSize*(pageNow-1));
        */

        ps = ct.prepareStatement("select top "+pageSize+" * from users where userId not in (select top "+(pageSize*(pageNow-1))+" userId from users)");
        //执行查询
        rs = ps.executeQuery();

        //将结果集显示出来
        pw.println("<table border=1>");
        pw.println("<tr><th>id</th><th>name</th><th>password</th><th>email</th><th>grade</th></tr>");
        while(rs.next())
        {
            pw.println("<tr>");
            pw.println("<td>"+rs.getInt(1)+"</td>");
            pw.println("<td>"+rs.getString(2)+"</td>");
            pw.println("<td>"+rs.getString(3)+"</td>");
            pw.println("<td>"+rs.getString(4)+"</td>");
            pw.println("<td>"+rs.getInt(5)+"</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>");
        }
        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);

    }

}

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");

            //连接数据库,三部曲,加载驱动,建立连接
            //1加载驱动包
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            //得到连接
            ct = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;databaseName=spdb","sa","123456");
            //创建一个Statement
            sm = ct.createStatement();
            //top 1 会提高查询的效率,否则数据库查询完所有再把结果告诉你

            rs = sm.executeQuery("select top 1 passwd from users where userName=‘"+u+"‘");
            //executeQuery返回的是一个ResultSet执行查询select语句用Query
            //executeUpdate返回的是int,因此是执行增加删除和修改
            if(rs.next())
            {

                //这说明用户是存在的
                String dbPasswd = rs.getString(1);

                if(dbPasswd.equals(p))
                {
                //真的合法
                //合法
                String keep = req.getParameter("keep");
                if(keep != null)
                {
                    //将用户名和密码保存在客户端
                    //创建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);

    }

}
时间: 2024-10-26 07:06:06

Servlet课程0426(十一)Servlet Cookie实现两周内不用重复登录的相关文章

项目经理怎么在两周内熟悉一个项目的业务?

项目经理空降到一个进行中的项目,怎么在两周内熟悉一个项目的业务? 四步帮你解决:明确项目业务目标,了解系统功能模块,弄清系统核心业务流程,多使用系统. 一.明确项目业务目标 明确项目业务目标,也就是了解客户为什么要建设这个项目,客户想通过这个项目解决哪些业务问题?从哪里了解这个信息?渠道很多:如果前任项目经理还在,可以直接问前任项目:如果项目资料齐全,可以查阅项目资料:如果商务清楚,可以问商务:如果前面的渠道不通,也可以直接请教客户:甚至可从公司竞争对手的竞品介绍里了解.此任务第一周完成. 二.

Servlet课程0426(十)Servlet如何删除cookie

//如何删除Cookie案例 package com.tsinghua; import javax.servlet.http.*; import java.io.*; public class CookieTest3 extends HttpServlet{ public void doGet(HttpServletRequest req, HttpServletResponse res) { try{ //解决中文乱码 res.setCharacterEncoding("gbk");

Servlet课程0426(九)Servlet服务器端创建Cookie和客户端读取Cookie

服务器端创建Cookie: Win7默认Cookie位置 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies CookieTest1.java //CookieTest1 package com.tsinghua; import javax.servlet.http.*; import java.io.*; public class CookieTest1 extends HttpServlet{ public voi

Servlet课程0426(八)Servlet分页技术

Welcome.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; import java.sql.*; public class Welcome extends HttpServlet{ public void doGet(HttpServletRequest req, HttpServletResponse res) { //业务逻辑 Connection ct = null; Pr

币圈寒冬,过去两周内全球约60万矿商关机

电价上涨.币价下降,币圈矿商生存愈发艰难,据鱼池(全球第三大比特币矿池)数据估计,自11月中旬以来,由于比特币价格和hashrate全线下跌,已有60万至80万家比特币矿商关闭. F2pool创始人毛世兴在接受CoinDesk采访时表示,该公司的估算考虑到了网络哈希率的总体下降,以及旧矿机的平均哈希率,这些旧矿机很难产生利润. 根据blockchain.info的数据,比特币网络的整个哈希率(捕捉世界上第一个区块链上的聚合计算能力)已经从11月10日的每秒4700万次左右下降到11月24日的每秒

Servlet第六课:Cookie的使用

目标规划: 通过这一节课,我们可以懂得如何使用Cookie,以及如何获取Cookie中的内容. Cookie的详细概述. 1. Cookie 是保存在客户端的一个"键-值"对,用来标识用户的一些信息. 2. Cookie的应用 –在电子商务会话中标识用户 –对站点进行定制 –定向广告 3. 调用Cookie的构造函数,给出cookie的名称和cookie的值,二者都是字符串 Cookie c = new Cookie("userID", "a1234&qu

Servlet课程0424(二) 通过继承GenericServlet来开发Servlet

//这是第二种开发servlet的方法(继承GernericServlet) package com.tsinghua; import javax.servlet.GenericServlet; import javax.servlet.*; import java.io.*; public class HelloGen extends GenericServlet{ //重写service方法即可 public void service(ServletRequest req, ServletR

javaweb学习总结二十一(servlet开发入门、servlet生命周期以及调用过程)

一:servlet开发入门 servlet是sun公司一门开发动态web资源的技术,下面编写一个servlet入门程序: 1:在tomcat服务器webapps目录下新建firstServlet目录,在firstServlet目录下创建WEB-INF/classes目录 在classes目录下,写servlet程序. 类FirstServlet.java 1 /** 2 * 3 */ 4 package com.hlcui.servlet; 5 6 import java.io.IOExcept

【Servlet】(1)Servlet简介、Servlet底层原理、Servlet实现方式、Servlet生命周期

2017年07月26日 00:16:04 YI_DIAN_DIAN 阅读数:5832 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_35415600/article/details/76100568 一.Servlet简介 1.Servlet定义: Servlet(Server Applet)是Java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容.