Servlet教程第7讲笔记

本文详细介绍了一个管理系统界面的美化方案及功能改进措施,包括使用PlayColor和AAAlogo进行颜色配置,实现用户登录界面的美化,并通过Java Servlet实现了登录验证、用户管理、分页查询等功能。

(一)美化管理系统界面
(二)管理系统功能改善,增删改查

(一)美化管理系统界面
推荐得到颜色配置的软件playcolor和AAA logo

增删改查
在这里插入图片描述

//登录界面
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 bgcolor=#B4CDE6>");
			pw.println("<img src=imgs/image2.jpg width=200><hr><center>");
			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("</center><hr><img src=imgs/image2.jpg width=200>");
			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{
	//重写init函数
	public void init(){
		//只会被调用一次
		try {
			//创建一个FileReader
			FileReader fr=new FileReader("f:\\myCounter.txt");
			BufferedReader br=new BufferedReader(fr);
			String numVal=br.readLine();
			br.close();
			//将times值放入servletContext中
			this.getServletContext().setAttribute("visitTimes", numVal+"");
			
			System.out.println("init()被调用");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	//重写destroy函数
	public void destroy(){
		try {

			FileWriter fw=new FileWriter("f:\\myCounter.txt");
			BufferedWriter bw=new BufferedWriter(fw);
			bw.write(this.getServletContext().getAttribute("visitTimes").toString());
			bw.close();
			System.out.println("destroy()被调用");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	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);
				
				//将servletContext中的visitTimes所对应的值增加
				String times=this.getServletContext().getAttribute("visitTimes").toString();
				//对times++再重新放回servletContext
				this.getServletContext().setAttribute("visitTimes", (Integer.parseInt(times)+1)+"");
				res.sendRedirect("main");
			}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.*;
public class Main 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 bgcolor=#B4CDE6>");
			pw.println("<img src=imgs/image2.jpg width=200><hr><center>");
			pw.println("<h1>主界面</h1>");
			pw.println("<a href=wel>管理用户</a><br>");
			pw.println("<a href=?>添加用户</a><br>");
			pw.println("<a href=?>查找用户</a><br>");
			pw.println("<a href=?>安全退出</a><br>");
			pw.println("</center><hr><img src=imgs/image2.jpg width=200>");
			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);
	}
}
//管理界面
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>&nbsp;&nbsp;&nbsp;&nbsp;欢迎您:"+myName+"<img src=imgs/image1.jpg width=50><br>");
			pw.println("<h1>管理用户</h1>");
			pw.println("welcome,hello "+u+" pass="+p);
			pw.println("<br><a href=login>返回重新登录</a>");
			
			pw.println("<table border=1>");
			pw.println("<tr bgcolor=blue><th>id</th><th>name</th><th>passwd</th><th>email</th><th>grade</th><th>修改用户</th><th>删除用户</th></tr>");
			
			//定义一个颜色数组
			String [] mycol={"pink","silver"};
			for(int i=0;i<al.size();i++){
				UserBean ub=(UserBean)al.get(i);
				pw.println("<tr bgcolor="+mycol[i%2]+">");
				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("<td><a href=update?uId="+ub.getUserId()+"&uName="+ub.getUserName()+"&uPass="+ub.getPasswd()+"&uMail="+ub.getMial()+"&uGrade="+ub.getGrade()+">修改用户</a></td>");
				pw.println("<td><a href=delUserCl?userid="+ub.getUserId()+" οnclick=\"return window.confirm('您确认要删除该用户吗?')\">删除用户</a></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("<form action=wel>");
			pw.println("<input type=text name=pageNowOk>");
			pw.println("<input type=submit value=go>");
			pw.println("</form>");
			
			pw.println("<br>该网页被访问了"+this.getServletContext().getAttribute("visitTimes").toString()+"次");
			pw.println("<br>您的ip:"+req.getRemoteAddr()+"<br>");
			pw.println("您的机器名:"+req.getRemoteHost()+"<br>");
			pw.println("您的ip:"+req.getRemoteAddr()+"<br>");
			pw.println("您的端口号:"+req.getRemotePort()+"<br>");
			pw.println("</center></body>");
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public void doPost(HttpServletRequest req,HttpServletResponse res)
	{
		this.doGet(req, res);
	}
}
//从数据库得到连接
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;
	}
}
//这是一个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;
	}
	
}
//这是一个处理类(处理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;
	}
	
	//删除用户
	public boolean delUser(String id){
		boolean b=false;
		try {
			ConnDB cd=new ConnDB();
			ct=cd.getConn();
			String sql="delete from users where userId='"+id+"'";
			ps=ct.prepareStatement(sql);
			int num=ps.executeUpdate();
			if(num==1){
				b=true;
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{
			this.close();
			return b;
		}
	}

		//修改用户
		public boolean updateUser(String id,String email,String passwd,String grade){
			boolean b=false;
			try {
				ConnDB cd=new ConnDB();
				ct=cd.getConn();
				String sql="update users set passwd='"+passwd+"',email='"+email+"',grade='"+grade+"' where userId='"+id+"'";
				ps=ct.prepareStatement(sql);
				int num=ps.executeUpdate();
				if(num==1){
					b=true; //修改成功
				}
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}finally{
				this.close();
				return b;
			}
	}
}
//处理删除用户
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
public class DelUserCl extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse res)
	{
		try {
			//中文乱码处理
			res.setContentType("text/html;charset=gbk");
			//调用UserBeanCl中的删除用户的方法,完成删除
			UserBeanCl ubc=new UserBeanCl();
			//接收从wel传递的id号
			String id=req.getParameter("userid");
			if(ubc.delUser(id)){
				//删除成功
				res.sendRedirect("ok");
			}else{
				res.sendRedirect("err");
			}
			
		} 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.*;
public class Ok extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse res)
	{
		try {
			//中文乱码处理
			res.setContentType("text/html;charset=gbk");
			PrintWriter pw=res.getWriter();
			pw.println("操作成功!<br>");
			pw.println("<a href=main>返回主界面</a>&nbsp;&nbsp;<a href=wel>继续删除</a>");
		} 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.*;
public class Err extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse res)
	{
		try {
			//中文乱码处理
			res.setContentType("text/html;charset=gbk");
			PrintWriter pw=res.getWriter();
			pw.println("操作失败!");
			
		} 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.*;
public class Update 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 bgcolor=#B4CDE6>");
			pw.println("<img src=imgs/image2.jpg width=200><hr><center>");
			pw.println("<h1>修改用户界面</h1>");
			pw.println("<form action=updateCl>");
			pw.println("<table border=1>");
			pw.println("<tr><td>id</td><td><input readonly name=uId type=text value="+req.getParameter("uId")+"></td></tr>");
			pw.println("<tr><td>username</td><td><input readonly type=text value="+req.getParameter("uName")+"></td></tr>");
			pw.println("<tr><td>passwd</td><td><input name=newPasswd type=text value="+req.getParameter("uPass")+"></td></tr>");
			pw.println("<tr><td>eamil</td><td><input name=newEmail type=text value="+req.getParameter("uMail")+"></td></tr>");
			pw.println("<tr><td>grade</td><td><input name=newGrade type=text value="+req.getParameter("uGrade")+"></td></tr>");
			pw.println("<tr><td colspan=2><input type=submit value=修改用户></td></tr>");
			pw.println("</table></form>");
			pw.println("</center><hr><img src=imgs/image2.jpg width=200>");
			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);
	}
}
//处理修改用户
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
public class UpdateCl extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse res)
	{
		try {
			//中文乱码处理
			res.setContentType("text/html;charset=gbk");
			//调用UserBeanCl中的删除用户的方法,完成删除
			UserBeanCl ubc=new UserBeanCl();
			//接收从update传递需要修改的信息
			String id=req.getParameter("uId");
			String email=req.getParameter("newEmail");
			String passwd=req.getParameter("newPasswd");
			String grade=req.getParameter("newGrade");
			if(ubc.updateUser(id, email, passwd, grade)){
				//删除成功
				res.sendRedirect("ok");
			}else{
				res.sendRedirect("err");
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public void doPost(HttpServletRequest req,HttpServletResponse res)
	{
		this.doGet(req, res);
	}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值