用户登录网站

 

用户登录网站(servlet 1.2)


 

一、视图层

Login.Java(登录界面)

LoginCl.java(验证用户)

Wel.java(欢迎界面)

 

二、模型层

ConnDB.java(数据库连接)

UserBean.java(表示users表)

UserBeanCl.java(业务逻辑控制)

 

三、注意:

1.部署web.xml

2.添加MySQL数据库

[java]  view plain  copy
  1. create database spdb;  
  2. use spdb;  
  3.   
  4. create table users(  
  5. userId int auto_increment primary key not null,        
  6. username varchar(20),                               
  7. passwd varchar(30),                                   
  8. email varchar(30),                                      
  9. grade int                                                     
  10. );  

 

四、参考代码如下:

视图层

Login.java(登录界面)

[java]  view plain  copy
  1. package com.tsinghua;  
  2.   
  3. import javax.servlet.*;  
  4. import javax.servlet.http.*;  
  5. import java.io.*;  
  6.   
  7. public class Login extends HttpServlet {  
  8.     public Login(){  
  9.         super();  
  10.     }  
  11.       
  12.     public void init() throws ServletException{}  
  13.     public void process(HttpServletRequest req,HttpServletResponse res)  
  14.         throws ServletException,IOException{  
  15.         try{              
  16.            //中文乱码解决  
  17.            res.setContentType("text/html;charset=UTF-8");  
  18.             //业务逻辑  
  19.             PrintWriter pw=res.getWriter();  
  20.             //返回登录界面  
  21.             pw.println("<html>");  
  22.             pw.println("<body>");  
  23.             //得到erro信息  
  24.             String info=(String)req.getParameter("info");  
  25.             if(info!=null){  
  26.                 pw.println("<h1>你的用户名或是密码错误!</h1><br>");  
  27.             }  
  28.             pw.println("<h1>登录界面</h1>");  
  29.             pw.println("<form action=logincl method=post>");  
  30.             pw.println("用户名:<input type=text name=username><br>");  
  31.             pw.println("密码:<input type=password name=passwd><br>");  
  32.             pw.println("<input type=checkbox name=keep value=2>两周内不用重新登录<br>");  
  33.             pw.println("<input type=submit value=loging><br>");  
  34.             pw.println("</form>");  
  35.             pw.println("</body>");  
  36.             pw.println("</html>");  
  37.         }catch(Exception ex){  
  38.             ex.printStackTrace();  
  39.         }  
  40.     }  
  41.     public void doGet(HttpServletRequest req,HttpServletResponse res)  
  42.         throws ServletException,IOException{  
  43.         process(req,res);  
  44.     }  
  45.     public void doPost(HttpServletRequest req,HttpServletResponse res)  
  46.         throws ServletException,IOException{  
  47.         process(req,res);  
  48.     }  
  49.     public void destroy(){  
  50.         super.destroy();  
  51.     }  
  52. }  

LoginCl.java(验证用户)

[java]  view plain  copy
  1. package com.tsinghua;  
  2.   
  3. import javax.servlet.*;  
  4. import javax.servlet.http.*;  
  5. import java.io.*;  
  6. import java.sql.*;  
  7.   
  8. public class LoginCl extends HttpServlet {  
  9.     public LoginCl() {  
  10.         super();  
  11.     }  
  12.   
  13.     public void init() throws ServletException {  
  14.     }  
  15.   
  16.     // req:用于获得浏览器的信息  
  17.     // res:用于向浏览器返回信息(我就是服务器)  
  18.     public void process(HttpServletRequest req, HttpServletResponse res)  
  19.             throws ServletException, IOException {  
  20.         res.setContentType("text/html;charset=UTF-8");// 处理中文乱码  
  21.   
  22.         try {  
  23.             // 接收用户名和密码  
  24.             String u = req.getParameter("username");  
  25.             String p = req.getParameter("passwd");  
  26.             System.out.println("创建一个对象");  
  27.   
  28.             //调用UserBeanCl,1.创建一个对象  
  29.             UserBeanCl ubc=new UserBeanCl();  
  30.   
  31.             //2.使用UserBeanCl的方法  
  32.             if (ubc.checkUser(u, p)) {  
  33.                     // 合法用户  
  34.                     String keep = req.getParameter("keep");  
  35.                     if (keep != null) {  
  36.                         // 将用户名和密码保存在客户端(cookie)  
  37.                         // 创建  
  38.                         Cookie name = new Cookie("myname", u);  
  39.                         Cookie pass = new Cookie("mypasswd", p);  
  40.                         // 设置时间  
  41.                         name.setMaxAge(14 * 24 * 3600);  
  42.                         name.setMaxAge(14 * 24 * 3600);  
  43.                         // 回写到客户端  
  44.                         res.addCookie(name);  
  45.                         res.addCookie(pass);  
  46.                     }  
  47.                       
  48.                     // 将用户信息存入session中  
  49.                     HttpSession hs = req.getSession(true);  
  50.                     hs.setMaxInactiveInterval(30);  
  51.                     hs.setAttribute("name", u);  
  52.                     res.sendRedirect("welcome");// 跳转  
  53.                 } else {  
  54.                     //不合法用户  
  55.                     System.out.println("用户或密码错了");  
  56.                     res.sendRedirect("login");  
  57.                 }  
  58.         } catch (Exception ex) {  
  59.             ex.printStackTrace();  
  60.         }   
  61.     }  
  62.   
  63.     public void doGet(HttpServletRequest req, HttpServletResponse res)  
  64.             throws ServletException, IOException {  
  65.         process(req, res);  
  66.     }  
  67.   
  68.     public void doPost(HttpServletRequest req, HttpServletResponse res)  
  69.             throws ServletException, IOException {  
  70.         process(req, res);  
  71.     }  
  72.   
  73.     public void destroy() {  
  74.     }  
  75.   
  76. }  

Wel.java(欢迎界面)

 

[c-sharp]  view plain  copy
  1. package com.tsinghua;  
  2.   
  3. import java.io.*;  
  4. import java.sql.*;  
  5. import java.util.*;  
  6.   
  7. import javax.servlet.*;  
  8. import javax.servlet.http.*;  
  9.   
  10. public class Wel extends HttpServlet {  
  11.     public Wel() {  
  12.         super();  
  13.     }  
  14.   
  15.     public void init() throws ServletException {  
  16.     }  
  17.   
  18.     public void process(HttpServletRequest req, HttpServletResponse res)  
  19.             throws ServletException, IOException {  
  20.         res.setContentType("text/html;charset=UTF-8");  
  21.         PrintWriter pw = res.getWriter();  
  22.         try {  
  23.             // 从session中得到用户名  
  24.             HttpSession hs = req.getSession(true);  
  25.             String myName = (String) hs.getAttribute("name");  
  26.             String name="";  
  27.             String passwd="";  
  28.   
  29.             if (myName == null) {  
  30.                 // 如果session中没有用户信息,再看看有没有cookie信息  
  31.                 // 从客户端得到所有的cookie信息  
  32.                 Cookie[] allCookies = req.getCookies();  
  33.                 int i = 0;  
  34.                 // 如果allCookies不为空  
  35.                 if (allCookies != null) {  
  36.                     for (i = 0; i < allCookies.length; i++) {// 从中取出cookie  
  37.                         // 依次取出  
  38.                         Cookie temp = allCookies[i];  
  39.                         if (temp.getName().equals("myname")) {  
  40.                             // 得到cookie的值  
  41.                             name = temp.getValue();  
  42.                         } else if (temp.getName().equals("mypasswd")) {  
  43.                             passwd = temp.getValue();  
  44.                         }  
  45.                     }  
  46.                     if(!name.equals("")&&!passwd.equals("")){  
  47.                         //到LoginCl.java去验证  
  48.                         res.sendRedirect("logincl?username="+name+"&passwd="+passwd);  
  49.                         return;  
  50.                     }  
  51.                 }  
  52.                 // 返回登陆界面  
  53.                 res.sendRedirect("login?info=error1");  
  54.                 return;  
  55.             }  
  56.             // 调整格式  
  57.             pw.println("<body><center>");  
  58.             // 在servlet中显示图片  
  59.             pw.println("<img src="images/lola.gif" mce_src="images/lola.gif"><br>");  
  60.             pw.println("Welcom,hello<br>");  
  61.             pw.println("你的用户名是:" + myName);  
  62.             // 做个超链接  
  63.             pw.println("<br><a href="login" mce_href="login">返回重新登录</a>");  
  64.   
  65.             // ================分页功能===============  
  66.             int pageSize = 3;// 一页显示几条记录(规定)  
  67.             int pageNow = 1;// 希望显示第几页(规定)  
  68.   
  69.   
  70.             // 动态的接收pageNow  
  71.             String sPageNow = req.getParameter("pageNow");  
  72.             if (sPageNow != null) {  
  73.                 pageNow = Integer.parseInt(sPageNow);// 转换成整数  
  74.             }  
  75.   
  76.             //调用userBeanCl  
  77.             UserBeanCl ubc=new UserBeanCl();  
  78.             ArrayList al=ubc.getResultByPage(pageNow, pageSize);  
  79.             // 表头  
  80.             pw.println("<table border=1>");  
  81.             pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>email</th><th>grade</th></tr>");  
  82.             for(int i=0;i<al.size();i++){  
  83.                 UserBean ub=(UserBean)al.get(i);  
  84.                 pw.println("<tr>");  
  85.                 pw.println("<td>" + ub.getUserId() + "</td>");  
  86.                 pw.println("<td>" + ub.getUsername() + "</td>");  
  87.                 pw.println("<td>" + ub.getPasswd() + "</td>");  
  88.                 pw.println("<td>" + ub.getEmail() + "</td>");  
  89.                 pw.println("<td>" + ub.getGrade() + "</td>");  
  90.                 pw.println("</tr>");  
  91.             }  
  92.             pw.println("</table>");  
  93.             // ================分页功能===============  
  94.   
  95.             // 上一页  
  96.             if (pageNow != 1) {  
  97.                 pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + (pageNow - 1)  
  98.                         + ">上一页</a>");  
  99.             }  
  100.             // 显示超链接  
  101.             // for (int i = 1; i <= pageCount; i++) {  
  102.             for (int i = pageNow; i <= pageNow + 4; i++) {  
  103.                 pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + i + ">" + i + "</a>");  
  104.             }  
  105.             int pageCount=ubc.getPageCount();  
  106.             if (pageNow != pageCount) {  
  107.                 pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + (pageNow + 1)  
  108.                         + ">下一页</a>");  
  109.             }  
  110.             pw.println("</center></body>");  
  111.   
  112.             // String u = req.getParameter("uname");// 得到从LoginCl传递的用户名  
  113.             // String p = req.getParameter("pass");  
  114.         } catch (Exception ex) {  
  115.             ex.printStackTrace();  
  116.         }  
  117.     }  
  118.   
  119.     public void doGet(HttpServletRequest req, HttpServletResponse res)  
  120.             throws ServletException, IOException {  
  121.         process(req, res);  
  122.     }  
  123.   
  124.     public void doPost(HttpServletRequest req, HttpServletResponse res)  
  125.             throws ServletException, IOException {  
  126.         process(req, res);  
  127.     }  
  128.   
  129.     public void destroy() {  
  130.     }  
  131.   
  132. }  

 

模型层

ConnDB.java(数据库连接)

[java]  view plain  copy
  1. //从数据库中得到连接  
  2. package com.tsinghua;  
  3.   
  4. import java.sql.*;  
  5.   
  6. public class ConnDB{  
  7.     private Connection ct=null;  
  8.     public Connection getConn(){  
  9.         try{  
  10.             // 连接数据库  
  11.             Class.forName("com.mysql.jdbc.Driver");// 加载驱动  
  12.             // 得到连接  
  13.             ct = DriverManager.getConnection(  
  14.                     "jdbc:mysql://localhost:3306/spdb""root""root");  
  15.         }catch(Exception ex){  
  16.             ex.printStackTrace();  
  17.         }  
  18.         return ct;  
  19.     }     
  20. }  

UserBean.java(表示users表)

[java]  view plain  copy
  1. //这是一个UserBean<---------->users表映射  
  2. //它的一个对象<----------->users表的一条记录对应  
  3. //数据  
  4. package com.tsinghua;  
  5.   
  6. public class UserBean {  
  7.     private int userId;  
  8.     private String username;  
  9.     private String passwd;  
  10.     private String email;  
  11.     private int grade;  
  12.       
  13.     public int getUserId() {  
  14.         return userId;  
  15.     }  
  16.     public void setUserId(int userId) {  
  17.         this.userId = userId;  
  18.     }  
  19.     public String getUsername() {  
  20.         return username;  
  21.     }  
  22.     public void setUsername(String username) {  
  23.         this.username = username;  
  24.     }  
  25.     public String getPasswd() {  
  26.         return passwd;  
  27.     }  
  28.     public void setPasswd(String passwd) {  
  29.         this.passwd = passwd;  
  30.     }  
  31.     public String getEmail() {  
  32.         return email;  
  33.     }  
  34.     public void setEmail(String email) {  
  35.         this.email = email;  
  36.     }  
  37.     public int getGrade() {  
  38.         return grade;  
  39.     }  
  40.     public void setGrade(int grade) {  
  41.         this.grade = grade;  
  42.     }  
  43. }  

UserBeanCl.java(业务逻辑控制)

 

[java]  view plain  copy
  1. //这是一个处理类(处理users表)<------->操作UserBean  
  2. //业务逻辑在这里  
  3. package com.tsinghua;  
  4.   
  5. import java.sql.*;  
  6. import java.util.*;  
  7.   
  8. public class UserBeanCl {  
  9.     // 业务逻辑,有一句话:能用私有的就不要用私有  
  10.     private Connection ct = null;  
  11.     private PreparedStatement ps = null;  
  12.     private ResultSet rs = null;  
  13.     private int pageCount = 0;// 共有几页(计算)  
  14.       
  15.     //返回pageCount  
  16.     public int getPageCount(){  
  17.         return this.pageCount;  
  18.     }  
  19.   
  20.       
  21.     // 分页显示  
  22.     public ArrayList getResultByPage(int pageNow, int pageSize) {  
  23.             ArrayList al = new ArrayList();           
  24.             try {  
  25.             int rowCount = 0;// 共有几条记录(查表)  
  26.   
  27.             // 首先得到rowCount  
  28.             // 连接数据库  
  29.             ConnDB cd = new ConnDB();  
  30.             ct = cd.getConn();  
  31.             ps = ct.prepareStatement("select count(*) from users");  
  32.             rs = ps.executeQuery();  
  33.             if (rs.next()) {  
  34.                 rowCount = rs.getInt(1);  
  35.             }  
  36.             // 计算pageCount  
  37.             if (rowCount % pageSize == 0) {  
  38.                 pageCount = rowCount / pageSize;  
  39.             } else {  
  40.                 pageCount = rowCount / pageSize + 1;  
  41.             }  
  42.             ps = ct.prepareStatement("select * from users limit "  
  43.                     + (pageNow - 1) * pageSize + "," + pageSize);  
  44.             // 给问号赋值  
  45.             // ps.setInt(1,(pageNow-1)*pageSize);  
  46.             // ps.setInt(2,pageSize );  
  47.             rs = ps.executeQuery();  
  48.             while (rs.next()) {  
  49.                 // 将rs中的每一条记录封装到UserBean ub,实现一号线  
  50.                 UserBean ub = new UserBean();  
  51.                 ub.setUserId(rs.getInt(1));  
  52.                 ub.setUsername(rs.getString(2));  
  53.                 ub.setPasswd(rs.getString(3));  
  54.                 ub.setEmail(rs.getString(4));  
  55.                 ub.setGrade(rs.getInt(5));  
  56.   
  57.                 // 实现第二根线,将ub放入到ArrayList中  
  58.                 al.add(ub);  
  59.             }  
  60.         } catch (Exception ex) {  
  61.             ex.printStackTrace();  
  62.         }finally{  
  63.             this.close();  
  64.         }  
  65.         return al;  
  66.     }  
  67.   
  68.     // 验证用户  
  69.     public boolean checkUser(String u, String p) {  
  70.         boolean b = false;  
  71.         try {  
  72.             // 得到连接  
  73.             ConnDB cd = new ConnDB();  
  74.             ct = cd.getConn();  
  75.   
  76.             ps = ct.prepareStatement("select passwd from users where username='"  
  77.                     + u + "'");  
  78.             // ps.setString(1,u);  
  79.             rs = ps.executeQuery();  
  80.             System.out.println("进入验证");  
  81.             if (rs.next()) {  
  82.                 System.out.println("有结果");  
  83.                 String dbPasswd = rs.getString(1);  
  84.                 if (dbPasswd.equals(p)) {  
  85.                     b = true;  
  86.                 }  
  87.             }  
  88.         } catch (Exception ex) {  
  89.             ex.printStackTrace();  
  90.         } finally {  
  91.             this.close();  
  92.         }  
  93.         return b;  
  94.     }  
  95.   
  96.     // 关闭资源  
  97.     public void close() {  
  98.         try {  
  99.             if (rs != null) {  
  100.                 rs.close();  
  101.                 rs = null;  
  102.             }  
  103.             if (ps != null) {  
  104.                 ps.close();  
  105.                 ps = null;  
  106.             }  
  107.             if (ct != null) {  
  108.                 ct.close();  
  109.                 ct = null;  
  110.             }  
  111.         } catch (Exception ex) {  
  112.             ex.printStackTrace();  
  113.         }  
  114.     }  
  115. }  

(三)网站框架的改进

程序设计不合理,因为其将界面和业务逻辑放在一起(moddel1模式),存在以下问题:
1.在LoginCl.Java文件和Wel.java文件中都操作了数据库,它们的
逻辑相似,有重复代码(潜在规则:当一段代码出现了三次或三次以上,需封装在一个类里面)
2.整个框架没有清晰地层次关系,显得非常乱
3.代码不优雅,可读性差,可维护性差

 

改进方案:
1.进行分层(界面层、业务逻辑层)【mv模式】
m——》model模型
v——》view视图

改进前:

改进后:


2.将常用的代码(比如连接数据库),封装到类中

 

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

 

 

根据前面的说明,我们可以利用集合,比如:ArrayList作为中转,这样,就可以尽快的关闭rs,数据库连接···,同时跟能体现面向对象编程,代码的可读性更好。

 

(四)用户登录系统功能改进
用户登录网站(servlet版本1.2)总结version1.2新增加的功能:
1.用户在一定时间内不需要重新登录
2.将model1——>mv模式,实现了界面和业务逻辑分离


原结构

 

用户登录网站1.1版本(分页 cookie处理)

标签: stringexceptionimportloginnullsession
  993人阅读  评论(0)  收藏  举报
  分类:

Login.Java

[java]  view plain  copy
  1. package com.tsinghua;  
  2.   
  3. import javax.servlet.*;  
  4. import javax.servlet.http.*;  
  5. import java.io.*;  
  6.   
  7. public class Login extends HttpServlet {  
  8.     public Login(){  
  9.         super();  
  10.     }  
  11.       
  12.     public void init() throws ServletException{}  
  13.     public void process(HttpServletRequest req,HttpServletResponse res)  
  14.         throws ServletException,IOException{  
  15.         try{              
  16.            //中文乱码解决  
  17.            res.setContentType("text/html;charset=UTF-8");  
  18.             //业务逻辑  
  19.             PrintWriter pw=res.getWriter();  
  20.             //返回登录界面  
  21.             pw.println("<html>");  
  22.             pw.println("<body>");  
  23.             //得到erro信息  
  24.             String info=(String)req.getParameter("info");  
  25.             if(info!=null){  
  26.                 pw.println("<h1>你的用户名或是密码错误!</h1><br>");  
  27.             }  
  28.             pw.println("<h1>登录界面</h1>");  
  29.             pw.println("<form action=logincl method=post>");  
  30.             pw.println("用户名:<input type=text name=username><br>");  
  31.             pw.println("密码:<input type=password name=passwd><br>");  
  32.             pw.println("<input type=checkbox name=keep value=2>两周内不用重新登录<br>");  
  33.             pw.println("<input type=submit value=loging><br>");  
  34.             pw.println("</form>");  
  35.             pw.println("</body>");  
  36.             pw.println("</html>");  
  37.         }catch(Exception ex){  
  38.             ex.printStackTrace();  
  39.         }  
  40.     }  
  41.     public void doGet(HttpServletRequest req,HttpServletResponse res)  
  42.         throws ServletException,IOException{  
  43.         process(req,res);  
  44.     }  
  45.     public void doPost(HttpServletRequest req,HttpServletResponse res)  
  46.         throws ServletException,IOException{  
  47.         process(req,res);  
  48.     }  
  49.     public void destroy(){  
  50.         super.destroy();  
  51.     }  
  52. }  

LoginCl.java

[java]  view plain  copy
  1. package com.tsinghua;  
  2.   
  3. import javax.servlet.*;  
  4. import javax.servlet.http.*;  
  5. import java.io.*;  
  6. import java.sql.*;  
  7.   
  8. public class LoginCl extends HttpServlet {  
  9.     public LoginCl() {  
  10.         super();  
  11.     }  
  12.   
  13.     public void init() throws ServletException {  
  14.     }  
  15.   
  16.     // req:用于获得浏览器的信息  
  17.     // res:用于向浏览器返回信息(我就是服务器)  
  18.     public void process(HttpServletRequest req, HttpServletResponse res)  
  19.             throws ServletException, IOException {  
  20.         res.setContentType("text/html;charset=UTF-8");// 处理中文乱码  
  21.         PrintWriter pw = res.getWriter();  
  22.   
  23.         Connection ct = null;  
  24.         Statement sm = null;  
  25.         ResultSet rs = null;  
  26.         try {  
  27.             // 接收用户名和密码  
  28.             String u = req.getParameter("username");  
  29.             String p = req.getParameter("passwd");  
  30.   
  31.             // 连接<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>数据库</a>  
  32.             Class.forName("com.<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>MySQL</a>.jdbc.Driver");// 加载驱动  
  33.             // 得到连接  
  34.             ct = DriverManager.getConnection(  
  35.                     "jdbc:mysql://localhost:3306/spdb""root""root");  
  36.             // 创建Statement  
  37.             sm = ct.createStatement();  
  38.             // sql注入漏洞  
  39.             // rs=sm.executeQuery("select * from users where username='"+u  
  40.             // +"' and passwd='"+p+"'");  
  41.             rs = sm.executeQuery("select passwd from users where username='"  
  42.                     + u + "'");  
  43.   
  44.             if (rs.next()) {  
  45.                 // 说明用户是存在的  
  46.                 String dbPasswd = rs.getString(1);  
  47.                 if (dbPasswd.equals(p)) {  
  48.                     // 合法用户  
  49.                     String keep = req.getParameter("keep");  
  50.                     if (keep != null) {  
  51.                         // 将用户名和密码保存在客户端(cookie)  
  52.                         // 创建  
  53.                         Cookie name = new Cookie("myname", u);  
  54.                         Cookie pass = new Cookie("mypasswd", p);  
  55.                         // 设置时间  
  56.                         name.setMaxAge(14 * 24 * 3600);  
  57.                         name.setMaxAge(14 * 24 * 3600);  
  58.                         // 回写到客户端  
  59.                         res.addCookie(name);  
  60.                         res.addCookie(pass);  
  61.                     }  
  62.                     // 将用户信息存入session中  
  63.                     HttpSession hs = req.getSession(true);  
  64.                     hs.setMaxInactiveInterval(30);  
  65.                     hs.setAttribute("name", u);  
  66.                     res.sendRedirect("welcome");// 跳转  
  67.                 } else {  
  68.                     res.sendRedirect("login");  
  69.                 }  
  70.             } else {  
  71.                 // 说明用户名不存在  
  72.                 res.sendRedirect("login");  
  73.             }  
  74.         } catch (Exception ex) {  
  75.             ex.printStackTrace();  
  76.         } finally {// 按打开对象的逆序关闭对象  
  77.             try {  
  78.                 if (rs != null) {  
  79.                     rs.close();  
  80.                 }  
  81.                 if (sm != null) {  
  82.                     sm.close();  
  83.                 }  
  84.                 if (ct != null) {  
  85.                     ct.close();  
  86.                 }  
  87.             } catch (Exception ex) {  
  88.                 ex.printStackTrace();  
  89.             }  
  90.         }  
  91.     }  
  92.   
  93.     public void doGet(HttpServletRequest req, HttpServletResponse res)  
  94.             throws ServletException, IOException {  
  95.         process(req, res);  
  96.     }  
  97.   
  98.     public void doPost(HttpServletRequest req, HttpServletResponse res)  
  99.             throws ServletException, IOException {  
  100.         process(req, res);  
  101.     }  
  102.   
  103.     public void destroy() {  
  104.     }  
  105.   
  106. }  

Wel.java

[java]  view plain  copy
  1. package com.tsinghua;  
  2.   
  3. import java.io.*;  
  4. import java.sql.*;  
  5.   
  6. import javax.servlet.*;  
  7. import javax.servlet.http.*;  
  8.   
  9. public class Wel extends HttpServlet {  
  10.     public Wel() {  
  11.         super();  
  12.     }  
  13.   
  14.     public void init() throws ServletException {  
  15.     }  
  16.   
  17.     public void process(HttpServletRequest req, HttpServletResponse res)  
  18.             throws ServletException, IOException {  
  19.         res.setContentType("text/html;charset=UTF-8");  
  20.         PrintWriter pw = res.getWriter();  
  21.         Connection ct = null;  
  22.         PreparedStatement ps = null;  
  23.         ResultSet rs = null;  
  24.         try {  
  25.             // 从session中得到用户名  
  26.             HttpSession hs = req.getSession(true);  
  27.             String myName = (String) hs.getAttribute("name");  
  28.             String name="";  
  29.             String passwd="";  
  30.   
  31.             if (myName == null) {  
  32.                 // 如果session中没有用户信息,再看看有没有cookie信息  
  33.                 // 从客户端得到所有的cookie信息  
  34.                 Cookie[] allCookies = req.getCookies();  
  35.                 int i = 0;  
  36.                 // 如果allCookies不为空  
  37.                 if (allCookies != null) {  
  38.                     for (i = 0; i < allCookies.length; i++) {// 从中取出cookie  
  39.                         // 依次取出  
  40.                         Cookie temp = allCookies[i];  
  41.                         if (temp.getName().equals("myname")) {  
  42.                             // 得到cookie的值  
  43.                             name = temp.getValue();  
  44.                         } else if (temp.getName().equals("mypasswd")) {  
  45.                             passwd = temp.getValue();  
  46.                         }  
  47.                     }  
  48.                     if(!name.equals("")&&!passwd.equals("")){  
  49.                         //到LoginCl.java去验证  
  50.                         res.sendRedirect("logincl?username="+name+"&passwd="+passwd);  
  51.                         return;  
  52.                     }  
  53.                 }  
  54.                 // 返回登陆界面  
  55.                 res.sendRedirect("login?info=error1");  
  56.                 return;  
  57.             }  
  58.             // 调整格式  
  59.             pw.println("<body><center>");  
  60.             // 在servlet中显示图片  
  61.             pw.println("<img src="images/lola.gif" mce_src="images/lola.gif"><br>");  
  62.             pw.println("Welcom,hello<br>");  
  63.             pw.println("你的用户名是:" + myName);  
  64.             // 做个超链接  
  65.             pw.println("<br><a href="login" mce_href="login">返回重新登录</a>");  
  66.   
  67.             // ================分页功能===============  
  68.             int pageSize = 3;// 一页显示几条记录(规定)  
  69.             int pageNow = 1;// 希望显示第几页(规定)  
  70.             int rowCount = 0;// 共有几条记录(查表)  
  71.             int pageCount = 0;// 共有几页(计算)  
  72.   
  73.             // 动态的接收pageNow  
  74.             String sPageNow = req.getParameter("pageNow");  
  75.             if (sPageNow != null) {  
  76.                 pageNow = Integer.parseInt(sPageNow);// 转换成整数  
  77.             }  
  78.   
  79.             // 首先得到rowCount  
  80.             // 连接数据库  
  81.             Class.forName("com.mysql.jdbc.Driver");// 加载驱动  
  82.             // 得到连接  
  83.             ct = DriverManager.getConnection(  
  84.                     "jdbc:mysql://localhost:3306/spdb""root""root");  
  85.             ps = ct.prepareStatement("select count(*) from users");  
  86.             rs = ps.executeQuery();  
  87.             if (rs.next()) {  
  88.                 rowCount = rs.getInt(1);  
  89.             }  
  90.             // 计算pageCount  
  91.             if (rowCount % pageSize == 0) {  
  92.                 pageCount = rowCount / pageSize;  
  93.             } else {  
  94.                 pageCount = rowCount / pageSize + 1;  
  95.             }  
  96.             ps = ct.prepareStatement("select * from users limit "  
  97.                     + (pageNow - 1) * pageSize + "," + pageSize);  
  98.             // 给问号赋值  
  99.             // ps.setInt(1,(pageNow-1)*pageSize);  
  100.             // ps.setInt(2,pageSize );  
  101.             rs = ps.executeQuery();  
  102.             // 表头  
  103.             pw.println("<table border=1>");  
  104.             pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>email</th><th>grade</th></tr>");  
  105.             while (rs.next()) {  
  106.                 pw.println("<tr>");  
  107.                 pw.println("<td>" + rs.getInt(1) + "</td>");  
  108.                 pw.println("<td>" + rs.getString(2) + "</td>");  
  109.                 pw.println("<td>" + rs.getString(3) + "</td>");  
  110.                 pw.println("<td>" + rs.getString(4) + "</td>");  
  111.                 pw.println("<td>" + rs.getInt(5) + "</td>");  
  112.                 pw.println("</tr>");  
  113.             }  
  114.             pw.println("</table>");  
  115.             // ================分页功能===============  
  116.   
  117.             // 上一页  
  118.             if (pageNow != 1) {  
  119.                 pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + (pageNow - 1)  
  120.                         + ">上一页</a>");  
  121.             }  
  122.             // 显示超链接  
  123.             // for (int i = 1; i <= pageCount; i++) {  
  124.             for (int i = pageNow; i <= pageNow + 4; i++) {  
  125.                 pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + i + ">" + i + "</a>");  
  126.             }  
  127.             if (pageNow != pageCount) {  
  128.                 pw.println("<a href="welcome?pageNow=" mce_href="welcome?pageNow="" + (pageNow + 1)  
  129.                         + ">下一页</a>");  
  130.             }  
  131.             pw.println("</center></body>");  
  132.   
  133.             // String u = req.getParameter("uname");// 得到从LoginCl传递的用户名  
  134.             // String p = req.getParameter("pass");  
  135.         } catch (Exception ex) {  
  136.             ex.printStackTrace();  
  137.         }  
  138.     }  
  139.   
  140.     public void doGet(HttpServletRequest req, HttpServletResponse res)  
  141.             throws ServletException, IOException {  
  142.         process(req, res);  
  143.     }  
  144.   
  145.     public void doPost(HttpServletRequest req, HttpServletResponse res)  
  146.             throws ServletException, IOException {  
  147.         process(req, res);  
  148.     }  
  149.   
  150.     public void destroy() {  
  151.     }  
  152.   
  153. }  

web.xml

 

 

[xhtml]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  5.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  6.   
  7.     <servlet>  
  8.         <servlet-name>Hello</servlet-name>  
  9.         <servlet-class>com.tsinghua.Hello</servlet-class>  
  10.     </servlet>  
  11.   
  12.   
  13.     <servlet-mapping>  
  14.         <servlet-name>Hello</servlet-name>  
  15.         <url-pattern>/servlet/Hello</url-pattern>  
  16.     </servlet-mapping>  
  17.   
  18.     <servlet>  
  19.         <servlet-name>login</servlet-name>  
  20.         <servlet-class>com.tsinghua.Login</servlet-class>  
  21.     </servlet>  
  22.   
  23.     <servlet-mapping>  
  24.         <servlet-name>login</servlet-name>  
  25.         <url-pattern>/login</url-pattern>  
  26.     </servlet-mapping>  
  27.   
  28.     <servlet>  
  29.         <servlet-name>logincl</servlet-name>  
  30.         <servlet-class>com.tsinghua.LoginCl</servlet-class>  
  31.     </servlet>  
  32.   
  33.     <servlet-mapping>  
  34.         <servlet-name>logincl</servlet-name>  
  35.         <url-pattern>/logincl</url-pattern>  
  36.     </servlet-mapping>  
  37.   
  38.     <servlet>  
  39.         <servlet-name>welcome</servlet-name>  
  40.         <servlet-class>com.tsinghua.Wel</servlet-class>  
  41.     </servlet>  
  42.   
  43.     <servlet-mapping>  
  44.         <servlet-name>welcome</servlet-name>  
  45.         <url-pattern>/welcome</url-pattern>  
  46.     </servlet-mapping>  
  47.   
  48.     <servlet>  
  49.         <servlet-name>hiddenform1</servlet-name>  
  50.         <servlet-class>com.tsinghua.HiddenForm1</servlet-class>  
  51.     </servlet>  
  52.   
  53.     <servlet-mapping>  
  54.         <servlet-name>hiddenform1</servlet-name>  
  55.         <url-pattern>/hiddenform1</url-pattern>  
  56.     </servlet-mapping>  
  57.   
  58.     <servlet>  
  59.         <servlet-name>hiddenform2</servlet-name>  
  60.         <servlet-class>com.tsinghua.HiddenForm2</servlet-class>  
  61.     </servlet>  
  62.   
  63.     <servlet-mapping>  
  64.         <servlet-name>hiddenform2</servlet-name>  
  65.         <url-pattern>/hiddenform2</url-pattern>  
  66.     </servlet-mapping>  
  67.   
  68.     <servlet>  
  69.         <servlet-name>sessiontest1</servlet-name>  
  70.         <servlet-class>com.tsinghua.SessionTest1</servlet-class>  
  71.     </servlet>  
  72.   
  73.     <servlet-mapping>  
  74.         <servlet-name>sessiontest1</servlet-name>  
  75.         <url-pattern>/sessiontest1</url-pattern>  
  76.     </servlet-mapping>  
  77.   
  78.     <servlet>  
  79.         <servlet-name>sessiontest2</servlet-name>  
  80.         <servlet-class>com.tsinghua.SessionTest2</servlet-class>  
  81.     </servlet>  
  82.   
  83.     <servlet-mapping>  
  84.         <servlet-name>sessiontest2</servlet-name>  
  85.         <url-pattern>/sessiontest2</url-pattern>  
  86.     </servlet-mapping>  
  87.   
  88.     <servlet>  
  89.         <servlet-name>sessiontest3</servlet-name>  
  90.         <servlet-class>com.tsinghua.SessionTest3</servlet-class>  
  91.     </servlet>  
  92.   
  93.     <servlet-mapping>  
  94.         <servlet-name>sessiontest3</servlet-name>  
  95.         <url-pattern>/sessiontest3</url-pattern>  
  96.     </servlet-mapping>  
  97.   
  98.     <servlet>  
  99.         <servlet-name>cookietest1</servlet-name>  
  100.         <servlet-class>com.tsinghua.CookieTest1</servlet-class>  
  101.     </servlet>  
  102.   
  103.     <servlet-mapping>  
  104.         <servlet-name>cookietest1</servlet-name>  
  105.         <url-pattern>/cookietest1</url-pattern>  
  106.     </servlet-mapping>  
  107.   
  108.     <servlet>  
  109.         <servlet-name>cookietest2</servlet-name>  
  110.         <servlet-class>com.tsinghua.CookieTest2</servlet-class>  
  111.     </servlet>  
  112.   
  113.     <servlet-mapping>  
  114.         <servlet-name>cookietest2</servlet-name>  
  115.         <url-pattern>/cookietest2</url-pattern>  
  116.     </servlet-mapping>  
  117.       
  118.         <servlet>  
  119.         <servlet-name>cookietest3</servlet-name>  
  120.         <servlet-class>com.tsinghua.CookieTest3</servlet-class>  
  121.     </servlet>  
  122.   
  123.     <servlet-mapping>  
  124.         <servlet-name>cookietest3</servlet-name>  
  125.         <url-pattern>/cookietest3</url-pattern>  
  126.     </servlet-mapping>  
  127.   
  128. </web-app>  

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值