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

时间:2021-11-06 03:20:13

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

Servlet课程0426(十二)Servlet MV模式下用户登录及查看用户表中所有用户的更多相关文章

  1. &lbrack;设计模式&rsqb; 设计模式课程(十二)-- 门面模式(Facade)

    概述 也称外观模式 按目的属于结构型模式,按封装属于接口隔离模式 在组件构建过程中,某些接口之间的依赖常常会带来很多问题.甚至根本无法实现.采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口 ...

  2. Java设计模式(十二) 策略模式

    原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern) ...

  3. 设计模式&lpar;十二&rpar;职责链模式&lpar;Chain of Responsibility&rpar;(对象行为型)

     设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去*部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就 ...

  4. Java 设计模式系列(十二)策略模式&lpar;Strategy&rpar;

    Java 设计模式系列(十二)策略模式(Strategy) 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以 ...

  5. 设计模式 &lpar; 十二 &rpar; 职责链模式&lpar;Chain of Responsibility&rpar;(对象行为&rpar;

     设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去*部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决.不能解决就 ...

  6. &lbrack;老老实实学WCF&rsqb; 第十篇 消息通信模式&lpar;下&rpar; 双工

    老老实实学WCF 第十篇 消息通信模式(下) 双工 在前一篇的学习中,我们了解了单向和请求/应答这两种消息通信模式.我们知道可以通过配置操作协定的IsOneWay属性来改变模式.在这一篇中我们来研究双 ...

  7. 苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转

    昨天下午,测试提了一个bug,问题是:在苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转. 思前想后找了半天没思路,后来经过同事的点拨,说可能是禁用了cookie之类的,反正我也没思路就顺 ...

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

    Welcome.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; import java ...

  9. 从壹开始微服务 &lbrack; DDD &rsqb; 之十二 &boxV; 核心篇【下】:事件驱动EDA 详解

    缘起 哈喽大家好,又是周二了,时间很快,我的第二个系列DDD领域驱动设计讲解已经接近尾声了,除了今天的时间驱动EDA(也有可能是两篇),然后就是下一篇的事件回溯,就剩下最后的权限验证了,然后就完结了, ...

随机推荐

  1. iis7 64位 操作excel的一系列问题(未完待续)

    查了半天发现是IIS跑在64位环境下引起的.而64位下,是木有Access数据库的驱动的(包括Excel也不行). 解决办法是:在目标网站的应用程序池中选择高级设置,然后将启用32位应用程序设置为tr ...

  2. C&plus;&plus;学习注意点

    1.cin,cout关同步再用,不然效率很糟cin,cout关同步再用,不然效率很糟cin,cout关同步再用,不然效率很糟.重要的事情说三遍.关同步代码:std::ios::sync_with_st ...

  3. MYSQL 数据库导入导出命令

    MySQL命令行导出数据库 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:\Program Files\MySQL\MySQL Serve ...

  4. IntelliSense&colon; namespace &quot&semi;osgDB&quot&semi; 没有成员 &quot&semi;BEGIN&lowbar;BRACKET&quot&semi;

    IntelliSense: namespace "osgDB" 没有成员 "BEGIN_BRACKET" 转自:http://bbs.osgchina.org/ ...

  5. MySQL忘记密码,或:root密码重置报错:mysqladmin&colon; connect to server at &&num;39&semi;localhost&&num;39&semi; failed的解决方案

    MySQL root密码重置报错:mysqladmin: connect to server at 'localhost' failed的解决方案   1  登陆失败,mysqladmin修改密码失败 ...

  6. ASP&period;NET Web API与Rest web api(一)

    本文档内容大部分来源于:http://www.cnblogs.com/madyina/p/3381256.html HTTP is not just for serving up web pages. ...

  7. max&lowbar;flow&lpar;Dinic&rpar; 分类: ACM TYPE 2014-09-02 15&colon;42 94人阅读 评论&lpar;0&rpar; 收藏

    #include <cstdio> #include <iostream> #include <cstring> #include<queue> #in ...

  8. hdu 5071 Chat&lpar;模拟&vert;Splay&rpar;

    Chat Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Sub ...

  9. 线程问题、异常处理、自定义URL

    线程问题.异常处理.自定义URL   本节又带了一些常用的,却很难理解的问题,本节从文件上传功能的实现引出了线程使用,介绍了线程饥饿的解决方法,异常处理方法,了解RouteTable自定义路径 . 系 ...

  10. IDL 的读写

    read_ifc代码如下: Write_ifc代码分析如下: (1)将数字转换为字符串的函数. function ntoc,a return,string(a,format='(g0)') end ( ...