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/>密 码<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); } }
Servlet课程0426(十一)Servlet Cookie实现两周内不用重复登录的更多相关文章
- Servlet 利用Cookie实现一周内不重复登录
import java.io.IOException;import java.io.PrintWriter; import javax.servlet.ServletException;import ...
- Servlet课程0426(十二)Servlet MV模式下用户登录及查看用户表中所有用户
Welcome.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; import java ...
- JavaWeb 08_JSP+Dao+Bean+Servlet 实现登录注册(连接数据库,验证码登录,两周内免登陆等功能)
一.数据库db_01 表usert 字段username,password 二. 目录 三. 配置信息 四. 代码 index.jsp <script type="text/j ...
- Spring Security框架下实现两周内自动登录"记住我"功能
本文是Spring Security系列中的一篇.在上一篇文章中,我们通过实现UserDetailsService和UserDetails接口,实现了动态的从数据库加载用户.角色.权限相关信息,从而实 ...
- Servlet课程0426(十)Servlet如何删除cookie
//如何删除Cookie案例 package com.tsinghua; import javax.servlet.http.*; import java.io.*; public class Coo ...
- Servlet课程0426(九)Servlet服务器端创建Cookie和客户端读取Cookie
服务器端创建Cookie: Win7默认Cookie位置 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies Cookie ...
- Servlet课程0426(八)Servlet分页技术
Welcome.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; import java ...
- Javaweb 第7天 Servlet课程
Servlet课程 三日大纲 ● 网络概念,专业术语 ● Tomcat使用,发布网站,使用Myeclispe发布网站(搭建环境) ● 编写Servlet,Servlet生命周期 ● 用户注册,显示所有 ...
- Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期
servlet的404错误困扰了两天,各种方法都试过了,翻书逛论坛终于把问题解决了,写此博客来纪念自己的第一个servlet经历. 下面我会将自己的编写第一个servlet的详细过程提供给初学者,大神 ...
随机推荐
- WF4.0 基础篇 (十八) Flowchar
本节主要介绍WF4 中 Flowchart的使用 本文例子下载: http://files.cnblogs.com/foundation/FlowcharSample.rar 本文例子说明 Flowc ...
- (poj 3177) Redundant Paths
题目链接 :http://poj.org/problem?id=3177 Description In order to <= F <= ,) grazing fields (which ...
- xposed系列教程
转载说明 本篇文章可能已经更新,最新文章请转:http://www.sollyu.com/xposed-series/ 说明 这是一篇XPOSED开发系列教程, 个人开发者,开发不容易.QQ群: 73 ...
- ThreadPool 线程池的作用
相关概念: 线程池可以看做容纳线程的容器: 一个应用程序最多只能有一个线程池: ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池: 每排入一个工作函数,就相 ...
- jquery + json 操作
jquery 读取集合对象多是要与json进行解析操作的,以下自己经过多方资料查找,终于有一套自己的方式组合. 1.首先创建web services或一般处理程序,用于显示获取Datatable对象 ...
- KnockoutJS(1)-数据模型
前言 说到数据模型(ViewModel),就不得不提到MVVM模式,接触过WPF和Silverlight的人应该对这个模式比较熟悉. 不熟悉也没多大关系,因为KnockoutJS的使用相对简单. MV ...
- 执行插入语句时直接返回插入信息的自增id,判断是否为空
insert into userinfo(UserName,UserPass,RegTime,email)values('a','b',GETDATE(),'123@qq.com');select @ ...
- 解决mac下eclipse字体模糊
在eclipse.app右键,单击“显示包内容”,如下图: 2.找到"info.plist"文件并打开,在文件最后插入配置“<key>NSHighResolutionC ...
- Catalyst揭秘 Day2 Catalyst源码初探
Catalyst揭秘 Day2 Catalyst源码初探 这节课从源码角度来讲catalyst. 首先有一个观点要澄清,就是技术不是越底层就越是性能和效率更高.因为除了指令执行性能以外,更重要的是架构 ...
- 特定用户QQ群聊天记录导出的实现
一.把QQ群的聊天记录txt格式导出 消息管理器 -> 选择要导出的群 -> 右击.导出 这里要注意 : 导出之后的 文本是 unicode 编码的,需要转换 ==|| 之前不知道,搞 ...