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/>密 码<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 MV模式下用户登录及查看用户表中所有用户的更多相关文章
- [设计模式] 设计模式课程(十二)-- 门面模式(Facade)
概述 也称外观模式 按目的属于结构型模式,按封装属于接口隔离模式 在组件构建过程中,某些接口之间的依赖常常会带来很多问题.甚至根本无法实现.采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口 ...
- Java设计模式(十二) 策略模式
原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...
- 设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型)
设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就 ...
- Java 设计模式系列(十二)策略模式(Strategy)
Java 设计模式系列(十二)策略模式(Strategy) 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以 ...
- 设计模式 ( 十二 ) 职责链模式(Chain of Responsibility)(对象行为)
设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决.不能解决就 ...
- [老老实实学WCF] 第十篇 消息通信模式(下) 双工
老老实实学WCF 第十篇 消息通信模式(下) 双工 在前一篇的学习中,我们了解了单向和请求/应答这两种消息通信模式.我们知道可以通过配置操作协定的IsOneWay属性来改变模式.在这一篇中我们来研究双 ...
- 苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转
昨天下午,测试提了一个bug,问题是:在苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转. 思前想后找了半天没思路,后来经过同事的点拨,说可能是禁用了cookie之类的,反正我也没思路就顺 ...
- Servlet课程0426(十一)Servlet Cookie实现两周内不用重复登录
Welcome.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; import java ...
- 从壹开始微服务 [ DDD ] 之十二 ║ 核心篇【下】:事件驱动EDA 详解
缘起 哈喽大家好,又是周二了,时间很快,我的第二个系列DDD领域驱动设计讲解已经接近尾声了,除了今天的时间驱动EDA(也有可能是两篇),然后就是下一篇的事件回溯,就剩下最后的权限验证了,然后就完结了, ...
随机推荐
- ajax — get? or post?
ajax - get? or post? 与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用. 然而,在以下情况中,请使用 POST 请求: 无法使用缓存文件(更新服务器上的文件或数据 ...
- JAVA_SE复习(多线程)
线程 1.两种创建线程的方式都有自身的优点. 实现 Runnable 接口的优点: 从面向对象的设计观点看,Thread 类严格来讲是一个虚拟CPU 的封装,因此只有要改变或扩展该CPU 模型 ...
- DEDECMS中,友情链接
友情链接:dede:flink {dede:flink row='24' type='image' titlelen="24" typeid="0"} [fie ...
- jQuery获取同级元素
next()相邻下一个同级元素 prev()相邻上一个同级元素 siblings()所有同级元素 $("#id").next(); $("#id").prev( ...
- 网站如何做到完全不需要jQuery
jQuery是现在最流行的JavaScript工具库. 据统计,目前全世界57.3%的网站使用它.也就是说,10个网站里面,有6个使用jQuery.如果只考察使用工具库的网站,这个比例就会上升到惊人的 ...
- Sublime text2 常用插件集锦
No.01 – EmmetEmmet 是一个前端开发的利器,其前身是Zen Coding.它让编写 HTML 代码变得简单.Emmet 的基本用法是:输入简写形式,然后按 Tab 键.关于 Emmet ...
- PHP服务器负载判断
<?php header("content-type:text/html;charset=utf-8"); // echo PHP_OS;exit; // echo get_ ...
- laravel扩展图片处理Intervention Image
github地址:https://github.com/Intervention/image
- 生产场景NFS共享存储优化及实战
生产场景NFS共享存储优化: 1.硬件:sas/ssd磁盘,买多块,raid0/raid10,网卡好 2.NFS服务器端优化加all_squash,async /backup/NFS 192.168. ...
- Python调用C模块以及性能分析
一.c,ctypes和python的数据类型的对应关系 ctypes type ctype Python type c_char char 1-character string c_wchar wch ...