Servlet教程第5讲笔记

本文深入讲解了Cookie和Session的工作原理及应用,包括Cookie的创建、读取和删除,以及如何利用Cookie实现用户登录免密。同时,对比了Cookie与Session的区别,如存储位置、安全性和生命周期的不同,并探讨了网站架构的改进策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第五讲

(一)cookie的讲解和使用
(二)cookie和session的比较
(三)网站架构的改进
(四)用户登录系统的改进

什么是cookie

服务器在客户端保存的用户信息,就是cookie

cookie的作用
保存用户名、密码,在一定时间内不重新登录
记录用户访问网站的喜好
网站的个性化

cookie的使用

1.创建cookie

package com.tingwei;
import javax.servlet.http.*;
import java.io.*;

public class CookieTest1 extends HttpServlet {
	//处理get请求
	public void doGet(HttpServletRequest req,HttpServletResponse res){
		try {
			res.setContentType("text/html;charset=gbk");
			PrintWriter pw=res.getWriter();
			//当用户访问该Servlet时,就将信息创建到该用户的cookie天中
			//1.先在服务器端创建一个cookie
			Cookie mycookie=new Cookie("color1","red");
			//2.设置cookie存在的时间
			mycookie.setMaxAge(30);//单位秒,从创建开始计时
			//如果不设置存在时间,那么该cookie将不会被保存
			//3.将该cookie写回客户端
			res.addCookie(mycookie);
			pw.println("已经创建了cookie");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}

2.读取cookie

//如何读取Cookie
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;

public class CookieTest2 extends HttpServlet {
	//处理get请求
	public void doGet(HttpServletRequest req,HttpServletResponse res){
		try {
			res.setContentType("text/html;charset=gbk");
			PrintWriter pw=res.getWriter();
			//从客户端得到所有cookie信息
			Cookie [] allCookies=req.getCookies();
			int i=0;
			//如果allCookies不为空
			if(allCookies!=null){
				//从中取出cookie
				for(i=0;i<allCookies.length;i++){
					//依次取出
					Cookie tmp=allCookies[i];
					if(tmp.getName().equals("color1")){
						//得到cookie信息
						String val=tmp.getValue();
						pw.println("color1="+val);
						break;
					}//if
				}//for
				if(allCookies.length==i){
					pw.println("cookie 过期");
				}
			}else{
				pw.println("不存在color1这个cookie/cookie 过期");
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}

3.删除cookie

//如何读取Cookie
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;

public class CookieTest3 extends HttpServlet {
	//处理get请求
	public void doGet(HttpServletRequest req,HttpServletResponse res){
		try {
			res.setContentType("text/html;charset=gbk");
			PrintWriter pw=res.getWriter();
			//从客户端得到所有cookie信息
			Cookie [] allCookies=req.getCookies();
			int i=0;
			//如果allCookies不为空
			if(allCookies!=null){
				//从中取出cookie
				for(i=0;i<allCookies.length;i++){
					//依次取出
					Cookie tmp=allCookies[i];
					if(tmp.getName().equals("color1")){
						//将该cookie删除
						tmp.setMaxAge(0);
						pw.println("删除了color1这个cookie");
						break;
					}
				}
				if(allCookies.length==i){
					pw.println("不存在color1这个cookie/cookie 过期");
				}
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}

使用cookie完成保存用户名密码,在一段时间内不用重新登录

<?xml version="1.0" encoding="ISO-8859-1"?>
<!--  -->

<web-app>
  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>
  

      <!--每写一个servlet都要部署-->
  <servlet>
  <!--给你的servlet取名-->
	<servlet-name>login</servlet-name>
	<!--指明servlet的路径,包名+类名-->
	<servlet-class>com.tingwei.Login</servlet-class>
  </servlet>
  
  <servlet-mapping>
	<servlet-name>login</servlet-name>
	<!--在浏览器中输入的访问该servlet的url,任意的-->
	<url-pattern>/login</url-pattern>
  </servlet-mapping>
  
        <!--每写一个servlet都要部署-->
  <servlet>
  <!--给你的servlet取名-->
	<servlet-name>wel</servlet-name>
	<!--指明servlet的路径,包名+类名-->
	<servlet-class>com.tingwei.Wel</servlet-class>
  </servlet>
  
  <servlet-mapping>
	<servlet-name>wel</servlet-name>
	<!--在浏览器中输入的访问该servlet的url,任意的-->
	<url-pattern>/wel</url-pattern>
  </servlet-mapping>
  
        <!--每写一个servlet都要部署-->
  <servlet>
  <!--给你的servlet取名-->
	<servlet-name>logincl</servlet-name>
	<!--指明servlet的路径,包名+类名-->
	<servlet-class>com.tingwei.LoginCl</servlet-class>
  </servlet>
  
  <servlet-mapping>
	<servlet-name>logincl</servlet-name>
	<!--在浏览器中输入的访问该servlet的url,任意的-->
	<url-pattern>/logincl</url-pattern>
  </servlet-mapping>
  
  <!--每写一个servlet都要部署-->
  <servlet>
  <!--给你的servlet取名-->
	<servlet-name>cookietest1</servlet-name>
	<!--指明servlet的路径,包名+类名-->
	<servlet-class>com.tingwei.CookieTest1</servlet-class>
  </servlet>
  
  <servlet-mapping>
	<servlet-name>cookietest1</servlet-name>
	<!--在浏览器中输入的访问该servlet的url,任意的-->
	<url-pattern>/cookietest1</url-pattern>
  </servlet-mapping>
  
   <!--每写一个servlet都要部署-->
  <servlet>
  <!--给你的servlet取名-->
	<servlet-name>cookietest2</servlet-name>
	<!--指明servlet的路径,包名+类名-->
	<servlet-class>com.tingwei.CookieTest2</servlet-class>
  </servlet>
  
  <servlet-mapping>
	<servlet-name>cookietest2</servlet-name>
	<!--在浏览器中输入的访问该servlet的url,任意的-->
	<url-pattern>/cookietest2</url-pattern>
  </servlet-mapping>
    
</web-app>
//登录界面
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
public class Login extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse res)
	{
		try {
			//中文乱码处理
			res.setContentType("text/html;charset=gbk");
			PrintWriter pw=res.getWriter();
			//返回登录界面
			pw.println("<html>");
			pw.println("<body>");
			pw.println("<img src=imgs/image2.jpg width=200><br>");
			pw.println("<h>登录界面</h>");
			pw.println("<form action=logincl method=post>");
			pw.println("用户名:<input type=text name=username><br>");
			pw.println("密码:<input type=password name=passwd><br>");
			pw.println("<input type=checkbox name=keep value=2>两周内不在重新登录<br>");
			pw.println("<input type=submit value=login><br>");
			pw.println("</form>");
			pw.println("</body>");
			pw.println("</html>");
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public void doPost(HttpServletRequest req,HttpServletResponse res)
	{
		this.doGet(req, res);
	}
}
//用户验证Servlet
package com.tingwei;
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;
		String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb";
		String user="sa";
		String passwd="tingwei";
		String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
		
		//业务逻辑
		try {
			//接收用户名和密码
			String u=req.getParameter("username");
			String p=req.getParameter("passwd");
			
			//连接接数据库,三部曲
			
			Class.forName(driver);
			//得到连接
			ct=DriverManager.getConnection(url,user,passwd);
			//创建一个Statement
			sm=ct.createStatement();
			String query="select top 1 *from users where usernaem='"+u+"' and passwd='"+p+"'";
			rs=sm.executeQuery(query);
			
			//验证
			if(rs.next()){
				//合法用户
				String keep=req.getParameter("keep");
				//将用户名和密码保存在客户端cookie
				if(keep!=null){
				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
				HttpSession hs=req.getSession(true);
				//修改session的存在时间 单位s
				hs.setMaxInactiveInterval(30);
				hs.setAttribute("uname", u);
				res.sendRedirect("wel");
			}else{
				//不合法,跳转到Login
				res.sendRedirect("login");
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{
				try {
					if(rs!=null) rs.close();
					if(sm!=null) sm.close();
					if(ct!=null) ct.close();
				} catch (Exception e2) {
					// TODO: handle exception
					e2.printStackTrace();
				}
			}
	}
	
	public void doPost(HttpServletRequest req,HttpServletResponse res)
	{
		this.doGet(req, res);
	}
}
//欢迎界面
package com.tingwei;
import javax.servlet.http.*;

import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class Wel extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse res)
	{
		//得到session
		HttpSession hs=req.getSession();
		String myName=(String)hs.getAttribute("uname");
		String name="";
		String password="";
		PrintWriter pw=null;
		Connection ct=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb";
		String user="sa";
		String passwd="tingwei";
		String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
		
		try {
			//判断
			if(myName==null){
				//如果session中没有用户信息,再看看cookie中有没有
				Cookie [] allCookies=req.getCookies();
				int i=0;
				//如果allCookies不为空
				if(allCookies!=null){
					//从中取出cookie
					for(i=0;i<allCookies.length;i++){
						//依次取出
						Cookie tmp=allCookies[i];
						if(tmp.getName().equals("myname")){
							//得到cookie信息
							name=tmp.getValue();
						}else if(tmp.getName().equals("pass")){
							password=tmp.getValue();
						}
					}//for
					
					if(!name.equals("")&&!password.equals("")){
						res.sendRedirect("logincl?username="+name+"&passwd="+password);
					}
				}//if cookie
				//返回登录界面
				res.sendRedirect("login?info=error1");
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		//===分页的功能===
		int pageSize=3;
		int pageNow=1;//希望显示第几条记录
		int rowCount=0;//共有几条记录(查表)
		int pageCount=0;//共有几页(计算出来)
		
		//动态的接收pageNow
		String sPageNow=req.getParameter("pageNowOk");
		
		if(sPageNow!=null){
			//用户首次进入wel页面
			pageNow=Integer.parseInt(sPageNow);
		}
		//得到从logincl传递的用户名
		String u=req.getParameter("uname");
		//得到从logincl传递的密码
		String p=req.getParameter("upass");
		try {
			
			//中文乱码处理
			res.setContentType("text/html;charset=gbk");
			pw=res.getWriter();	
			
			pw.println("<body><center>");
			pw.println("<img src=imgs/image2.jpg width=200><br>");
			pw.println("welcome,hello "+u+" pass="+p);
			
			pw.println("<br><a href=login>返回重新登录</a>");
			
			//得到rowCount
			//连接接数据库,三部曲
			Class.forName(driver);
			//得到连接
			ct=DriverManager.getConnection(url,user,passwd);
			//创建一个prepareStatement
			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();
		
			pw.println("<table border=1");
			pw.println("<tr><th>id</th><th>name</th><th>passwd</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.getString(5)+"</td>");
				pw.println("</tr>");
			}
			pw.println("</table>");
			if(pageNow!=1)
			//上一页
			pw.println("<a href=wel?pageNowOk="+(pageNow-1)+">上一页</a>");
			//显示超链接
			for(int i=pageNow;i<=pageNow+4;i++){
				pw.println("<a href=wel?pageNowOk="+i+">"+i+"</a>");
			}
			//下一页
			if(pageNow!=pageCount)
			pw.println("<a href=wel?pageNowOk="+(pageNow+1)+">下一页</a>");
			pw.println("</center></body>");
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public void doPost(HttpServletRequest req,HttpServletResponse res)
	{
		this.doGet(req, res);
	}
}

cookie和session的比较

1.cookie存在客户端,session存在服务器端
2.cookie安全性低,seesion服务器端内存很难查到
3.cookie通过网络在客户端与服务器端传输,而session保存在服务器端不需要传输
4.cookie的生命周期从创建开始,session的生命周期是无操作开始计时,关机session生命周期结束,cookie没有影响。

网站框架的改进

留心的同学会发现,我们将界面和业务逻辑放在一起了,这是编程的忌讳,因为两者的改动相互影响。
1.LoginCl.java和Wel.java都去操作了数据库,出现重复代码
2.整个框架没有清晰的层次结构
3.代码看起来很乱,可读性差,维护难。

改进办法是,将view和logical分层;将重复代码封装到类中

为什么在UserBeanCl中,对于分页显示方法返回的是ArrayList集合,而不是直接返回ResultSet?
1.如果返回ResultSet,那么我们在使用ResultSet时,是不能关闭该ResultSet相互关联的数据库连接等资源,从而造成资源浪费。
2.如果返回ResultSet,我们只能使用rs.getInt(?)这样的方法来得到结果,代码可读性不好,维护不方便
在这里插入图片描述

<?xml version="1.0" encoding="ISO-8859-1"?>
<!--  -->

<web-app>
  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>
  

      <!--每写一个servlet都要部署-->
  <servlet>
  <!--给你的servlet取名-->
	<servlet-name>login</servlet-name>
	<!--指明servlet的路径,包名+类名-->
	<servlet-class>com.tingwei.Login</servlet-class>
  </servlet>
  
  <servlet-mapping>
	<servlet-name>login</servlet-name>
	<!--在浏览器中输入的访问该servlet的url,任意的-->
	<url-pattern>/login</url-pattern>
  </servlet-mapping>
  
        <!--每写一个servlet都要部署-->
  <servlet>
  <!--给你的servlet取名-->
	<servlet-name>wel</servlet-name>
	<!--指明servlet的路径,包名+类名-->
	<servlet-class>com.tingwei.Wel</servlet-class>
  </servlet>
  
  <servlet-mapping>
	<servlet-name>wel</servlet-name>
	<!--在浏览器中输入的访问该servlet的url,任意的-->
	<url-pattern>/wel</url-pattern>
  </servlet-mapping>
  
        <!--每写一个servlet都要部署-->
  <servlet>
  <!--给你的servlet取名-->
	<servlet-name>logincl</servlet-name>
	<!--指明servlet的路径,包名+类名-->
	<servlet-class>com.tingwei.LoginCl</servlet-class>
  </servlet>
  
  <servlet-mapping>
	<servlet-name>logincl</servlet-name>
	<!--在浏览器中输入的访问该servlet的url,任意的-->
	<url-pattern>/logincl</url-pattern>
  </servlet-mapping>
  
  <!--每写一个servlet都要部署-->
  <servlet>
  <!--给你的servlet取名-->
	<servlet-name>cookietest1</servlet-name>
	<!--指明servlet的路径,包名+类名-->
	<servlet-class>com.tingwei.CookieTest1</servlet-class>
  </servlet>
  
  <servlet-mapping>
	<servlet-name>cookietest1</servlet-name>
	<!--在浏览器中输入的访问该servlet的url,任意的-->
	<url-pattern>/cookietest1</url-pattern>
  </servlet-mapping>
  
   <!--每写一个servlet都要部署-->
  <servlet>
  <!--给你的servlet取名-->
	<servlet-name>cookietest2</servlet-name>
	<!--指明servlet的路径,包名+类名-->
	<servlet-class>com.tingwei.CookieTest2</servlet-class>
  </servlet>
  
  <servlet-mapping>
	<servlet-name>cookietest2</servlet-name>
	<!--在浏览器中输入的访问该servlet的url,任意的-->
	<url-pattern>/cookietest2</url-pattern>
  </servlet-mapping>
    
</web-app>
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
public class Login extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse res)
	{
		try {
			//中文乱码处理
			res.setContentType("text/html;charset=gbk");
			PrintWriter pw=res.getWriter();
			//返回登录界面
			pw.println("<html>");
			pw.println("<body>");
			pw.println("<img src=imgs/image2.jpg width=200><br>");
			pw.println("<h>登录界面</h>");
			pw.println("<form action=logincl method=post>");
			pw.println("用户名:<input type=text name=username><br>");
			pw.println("密码:<input type=password name=passwd><br>");
			pw.println("<input type=checkbox name=keep value=2>两周内不在重新登录<br>");
			pw.println("<input type=submit value=login><br>");
			pw.println("</form>");
			pw.println("</body>");
			pw.println("</html>");
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public void doPost(HttpServletRequest req,HttpServletResponse res)
	{
		this.doGet(req, res);
	}
}
//用户验证Servlet
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class LoginCl extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse res)
	{	
		//业务逻辑
		try {
			//接收用户名和密码
			String u=req.getParameter("username");
			String p=req.getParameter("passwd");
			
			//调用UserBeanCl,1.创建对象,2.使用方法
			UserBeanCl ubc=new UserBeanCl();
			//验证
			if(ubc.checkUser(u, p)){
				//合法用户
				String keep=req.getParameter("keep");
				//将用户名和密码保存在客户端cookie
				if(keep!=null){
				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
				HttpSession hs=req.getSession(true);
				//修改session的存在时间 单位s
				hs.setMaxInactiveInterval(30);
				hs.setAttribute("uname", u);
				res.sendRedirect("wel");
			}else{
				//不合法,跳转到Login
				res.sendRedirect("login");
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public void doPost(HttpServletRequest req,HttpServletResponse res)
	{
		this.doGet(req, res);
	}
}
package com.tingwei;
import javax.servlet.http.*;

import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
public class Wel extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse res)
	{
		//得到session
		HttpSession hs=req.getSession();
		String myName=(String)hs.getAttribute("uname");
		String name="";
		String password="";
		PrintWriter pw=null;
		Connection ct=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb";
		String user="sa";
		String passwd="tingwei";
		String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
		
		try {
			//判断
			if(myName==null){
				//如果session中没有用户信息,再看看cookie中有没有
				Cookie [] allCookies=req.getCookies();
				int i=0;
				//如果allCookies不为空
				if(allCookies!=null){
					//从中取出cookie
					for(i=0;i<allCookies.length;i++){
						//依次取出
						Cookie tmp=allCookies[i];
						if(tmp.getName().equals("myname")){
							//得到cookie信息
							name=tmp.getValue();
						}else if(tmp.getName().equals("pass")){
							password=tmp.getValue();
						}
					}//for
					
					if(!name.equals("")&&!password.equals("")){
						res.sendRedirect("logincl?username="+name+"&passwd="+password);
					}
				}//if cookie
				//返回登录界面
				res.sendRedirect("login?info=error1");
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		//===分页的功能===
		int pageSize=3;
		int pageNow=1;//希望显示第几条记录
		
		//动态的接收pageNow
		String sPageNow=req.getParameter("pageNowOk");
		
		if(sPageNow!=null){
			//用户首次进入wel页面
			pageNow=Integer.parseInt(sPageNow);
		}
		
		//调用UserBeanCl
		UserBeanCl ubc=new UserBeanCl();
		ArrayList al=ubc.getResultByPage(pageNow, pageSize);
		//得到从logincl传递的用户名
		String u=req.getParameter("uname");
		//得到从logincl传递的密码
		String p=req.getParameter("upass");
		try {
			
			//中文乱码处理
			res.setContentType("text/html;charset=gbk");
			pw=res.getWriter();	
			
			pw.println("<body><center>");
			pw.println("<img src=imgs/image2.jpg width=200><br>");
			pw.println("welcome,hello "+u+" pass="+p);
			
			pw.println("<br><a href=login>返回重新登录</a>");
			
			
			pw.println("<table border=1");
			pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>email</th><th>grade</th></tr>");
			
			for(int i=0;i<al.size();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.getMial()+"</td>");
				pw.println("<td>"+ub.getGrade()+"</td>");
				pw.println("</tr>");
			}
			pw.println("</table>");
			if(pageNow!=1)
			//上一页
			pw.println("<a href=wel?pageNowOk="+(pageNow-1)+">上一页</a>");
			//显示超链接
			for(int i=pageNow;i<=pageNow+4;i++){
				pw.println("<a href=wel?pageNowOk="+i+">"+i+"</a>");
			}
			int pageCount=ubc.getPageCount();
			//下一页
			if(pageNow!=pageCount)
			pw.println("<a href=wel?pageNowOk="+(pageNow+1)+">下一页</a>");
			pw.println("</center></body>");
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public void doPost(HttpServletRequest req,HttpServletResponse res)
	{
		this.doGet(req, res);
	}
}
//这是一个UserBean,和User表映射
//它的一个对象映射user表的一条记录
//数据
package com.tingwei;

public class UserBean {
	private int userId;
	private String userName;
	private String passwd;
	private String mial;
	private int grade;
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPasswd() {
		return passwd;
	}
	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}
	public String getMial() {
		return mial;
	}
	public void setMial(String mial) {
		this.mial = mial;
	}
	public int getGrade() {
		return grade;
	}
	public void setGrade(int grade) {
		this.grade = grade;
	}
	
}
//从数据库得到连接
package com.tingwei;
import java.sql.*;
public class ConnDB {
	private Connection  ct=null;
	public Connection getConn(){
		try {
			String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb";
			String user="sa";
			String passwd="tingwei";
			String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
			//得到rowCount
			//连接接数据库,三部曲
			Class.forName(driver);
			//得到连接
			ct=DriverManager.getConnection(url,user,passwd);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return ct;
	}
}
//这是一个处理类(处理Users表)<--->操作userBean
//业务逻辑在这
package com.tingwei;
import java.sql.*;
import java.util.ArrayList;
public class UserBeanCl {
	//业务逻辑
	private Connection ct=null;
	private PreparedStatement ps=null;
	private ResultSet rs=null;
	private int pageCount=0;//共有几页(计算得到)
	
	//验证用户
	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 e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{//用完数据库后记得关闭,可以写一个函数来关
			this.close();
		}
		return b;
	}
	//关闭数据库
	public void close(){
		try {
			if(rs!=null)rs.close();
			if(ps!=null)ps.close();
			if(ct!=null)ct.close();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	//分页显示
	public ArrayList getResultByPage(int pageNow,int pageSize){
		ArrayList al=new ArrayList();
		try {
				
				int rowCount=0;//共有几条记录(查表)
				int pageCount=0;//共有几页(计算出来)
				//得到rowCount
				ConnDB cd=new ConnDB();
				ct=cd.getConn();
				//创建一个prepareStatement
				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.setMial(rs.getString(4));
					ub.setGrade(rs.getInt(5));
					
					//将ub放入到ArrayList中
					al.add(ub);
				}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{
			this.close();
		}
		return al;
	}
	
	public int getPageCount(){
		return this.pageCount;
	}
}

需要用到的sql语句

alter table users add NewColumn nchar(5) null --新增列

alter table users drop column NewColumn  --删除列

alter table users alter column NewColumn nvarchar(10)--修改字段属性

exec sp_rename 'users.usernaem','username'--修改字段名

exec sp_help users--查看指定的表结构

drop table users--删除数据表

exec sp_rename 'users','users2'--修改表名

select top 1 passwd from users where username='admin'--查找符合用户名的一个密码

事实上可以单独写一个类来处理分页,在wel页面中调用DividePage类的方法,就更进一步讲界面与逻辑处理相分离了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值