Servlet学习之七MV模型

view层 主要负责视图显示

model层 主要负责业务逻辑的处理

Login.java负责登录

LoginCl.java登录验证   wel负责界面的显示

UserBeanCl.java负责逻辑的处理,相当于model层

UserBean.java作为bean,ConnDB负责连接数据库,获得Connection

package com.tsinghua;
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("<h1>登录界面</h1>");
   	  		pw.println("<form action=LoginCl method=post>");
   	  		pw.println("用户名:<input type=text name=usrename><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=loing><br>");
   	  		pw.println("</form>");
   	  		pw.println("</body>");
   	  		pw.println("</html>");
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
	
	public void doPost(HttpServletRequest req,HttpServletResponse res){
		this.doGet(req,res);
	}
}

package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;


public class LoginCl extends HttpServlet  {
   //重写get请求
   public void doGet(HttpServletRequest req,HttpServletResponse res){
   	
   	  Connection ct=null;
   	  Statement sm=null;
   	  ResultSet rs=null;
   	  try{
   	  	//接收用户名和密码
   	  	String u=req.getParameter("usrename");
   	  	String p=req.getParameter("passwd");
   	  	
   	  	//调用UserBeanCl
   	  	UserBeanCl ubc=new UserBeanCl();
   	  	
   	  	//使用UserBeanCL的方法
   	  	if(ubc.checkUser(u,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*60*60);
   	  	        pass.setMaxAge(14*24*60*60);
   	  	        //回写到客户端
   	  	     
   	  	        res.addCookie(name);
   	  	        res.addCookie(pass);
   	  		}
   	  	    
   	  	     
   	  			//真的合法
   	  			//合法
   	  		//跳转到wel
   	  		//将验证成功的信息写入session
   	  		//1、得到session
   	  		HttpSession hs=req.getSession(true);
   	  		//修改session的存在时间
   	  		//hs.setMaxInactiveInterval(20);
   	  		hs.setAttribute("pass","ok");
   	  		res.sendRedirect("wel?uname="+u+"&upasswd="+p);

   	  		
   	  	}else{
   	  		//说明用户名不存在
   	  		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请求
   public void doPost(HttpServletRequest req,HttpServletResponse res){
   	   this.doGet(req,res);
   }
}

package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
import java.util.*;

public class wel extends HttpServlet{
   //重写get请求
   public void doGet(HttpServletRequest req,HttpServletResponse res){
   	 
   	 Connection ct=null;
   	 PreparedStatement ps=null;
   	 ResultSet rs=null;
   	 
   	 //得到session
   	 HttpSession hs=req.getSession(true);
   	 String val=(String)hs.getAttribute("pass");
   	 
   	 String name="";
   	 String passwd="";
   	 
   	 
   	 res.setCharacterEncoding("gbk");
   	 //判断
   	 if(val==null){
   	 	
   	 	//如果session中没有用户信息,再看看有没有cookie信息
   	 	//非法登录
   	 	Cookie[] allCookies=req.getCookies();
   	 	int j=0;
   	 	if(allCookies!=null){
   	 		for(j=0;j<allCookies.length;j++){
   	 			Cookie temp=allCookies[j];
   	 			if(temp.getName().equals("myname")){
   	 				name=temp.getValue();
   	 			}else if(temp.getName().equals("mypasswd")){
   	 				passwd=temp.getValue();
   	 			}
   	 		}
   	 	    System.out.println("myname="+name+" pas="+passwd);
   	 		if(!name.equals("")&&passwd.equals("")){
   	 			try{
   	 		     res.sendRedirect("LoginCl?username="+name+"&passwd="+passwd);
   	 	       }catch(Exception ex){
   	 		     ex.printStackTrace();
   	 	       }
   	 			return;
   	 		}
   	 	}else{
   	 		try{
   	 		     res.sendRedirect("login");
   	 	       }catch(Exception ex){
   	 		     ex.printStackTrace();
   	 	       }
   	 	}
   	 }
   	 
   	 //得到从logincl传递的用户名
   	 String u=req.getParameter("uname");
   	 String p=req.getParameter("upasswd");
   	 
   	 try{
   	 	res.setCharacterEncoding("gbk");
   	  	PrintWriter pw=res.getWriter();
   	  	//在servlet中显示图片
   	  	pw.println("<html>");
   	  	pw.println("<body >");
   	  	pw.println("<center>");
   	  	
   	  	//分页代码
   	 
   	    int pageSize=3;//一页显示几条记录
   	    int pageNow=1;//希望显示第几页

   	 
   	    //动态的接受pageNow
   	    String sPageNow=req.getParameter("pageNow");
   	 
   	    if(sPageNow!=null){
   	 	  //用户第一次进入wel页面
   	 	  pageNow=Integer.parseInt(sPageNow);
   	    }else{
   	 	
   	    }
   	
   	    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>passwd</th><th>mail</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.getMail()+"</td>");
   	       pw.println("<td>"+ub.getGrade()+"</td>");
   	 	   pw.println("</tr>");
   	    }
   	 	   
   	  	   pw.println("</table>");
   	  	
   	  	//上一页
   	  	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("<br/>");
   	  	   pw.println("<a href=Login>点击返回</a>");
   	  	   //pw.println("<img src=imgs/jing1.jpg><br>");
   	       pw.println("wel hello "+u+" "+p);
   	       pw.println("</center>");
   	       pw.println("</body>");
   	       pw.println("</html>");
   	      }catch(Exception ex)
   	      {
   	  	   ex.printStackTrace();
   	    }
   }
   
   //重写get请求
   public void doPost(HttpServletRequest req,HttpServletResponse res){
   	   this.doGet(req,res);
   }
}

//这是一个UserBean对应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 void setPasswd(String passwd){
		this.passwd=passwd;
	}
	public void setMail(String mail){
		this.mail=mail;
	}
	public void setGrade(int grade){
		this.grade=grade;
	}
	public String getUserName(){
		return this.userName;
	}
	public String getPasswd(){
		return this.passwd;
	}
	public String getMail(){
		return this.mail;
	}
	public int getGrade(){
		return this.grade;
	}
}

package com.tsinghua;
import java.sql.*;

public class ConnDB {
	private Connection ct=null;
	public Connection getConn(){
		try{
			Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
			ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb","sa","123456");
		}catch(Exception ex){
			ex.printStackTrace();
		}
		return ct;
	}
}

//这是一个处理类(处理users类),操作UserBean(面向对象,操作users表)
package com.tsinghua;
import java.sql.*;
import java.util.*;

public class UserBeanCl {
	//业务逻辑
	private Connection ct=null;
	private PreparedStatement ps=null;
	ResultSet rs=null;
	private int pageCount=0;//共有几页(计算)
	
	public int getPageCount(){
		return this.pageCount;
	}
	
	//分页显示
	public ArrayList getResultByPage(int pageNow,int pageSize){
		ArrayList al=new ArrayList();
	    try{
		    
			
			int rowCount=0;//共有几条记录(查表)
	   	    
	   	    
	   	    ConnDB cd=new ConnDB();
	   	    ct=cd.getConn();
	   	    	
	   	    //得到rowCount
	   	    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)");
	   	    //给?赋值
	   	    //ps.setInt(1,pageSize);
	   	    //ps.setInt(2,pageSize*(pageNow-1));
	   	 
	   	    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));
	   	    	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();
		}
		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();
		}
	}
	//public boolean checkUser(UserBean u){}
}


注:为什么在UserBeanCl中我们返回ArrayList集合,而不是直接返回ResultSet

(1)如果返回ResultSet,那么我们在使用ResultSet时,是不能关闭与该ResultSet相互关联的数据库连接等资源,从而造成资源浪费。

(2)如果返回ResultSet,我们只能使用rs.getInt(?),rs.getString(?)...这样的方法来得到结果,代码的可读性不好,维护不方便。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Henry_Jing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值