Jsp+Dao+Jdbc+Servelet 用户完整登录总结



Jsp+Dao+Jdbc+Servelet 用户完整登录总结。

Index.jsp 实现用户登录页面,login_success.jsp实现用户登录成功的页面 显示用户XX登录成功!错误则跳转到login_failure.jsp

 

用户填写好用户名和密码后发出登录请求给servlet(tomcat启动要加载web.xml文件,web.xml会根据index的action找到web.xml中的servlet,然后由servlet控制分发请求调用登录方法,

 

Index.jsp–àweb.xml—àservlet.java—àdao—àdaoImpl–àservlet–àlogin_success.jsp

 

 

Index.jsp页面如下:

 

[xhtml] view plaincopy

  1. <%@ page language=”java” import=”java.util.*” pageEncoding=”gb2312″%>
  2. <%@page import=”java.util.*”%>
  3. <html>
  4.   <head>
  5.     <title>用户登录</title>
  6.   </head>
  7.   <body>
  8.     <%
  9.         if(request.getAttribute(“Error”)!=null)
  10.         {
  11.             // 有错误,要进行打印输出
  12.             List all = (List)request.getAttribute(“Error”) ;
  13.             Iterator iter = all.iterator() ;
  14.             while(iter.hasNext())
  15.             {
  16.     %>
  17.                 <li><%=iter.next()%>
  18.     <%
  19.             }
  20.         }
  21.     %>
  22.       <form action=”servlet/loginServlet” method=”Post”>
  23.             <table align=”CENTER”>
  24.                 <tr><td colspan=”2″ align=”CENTER”><h3><font color=”#0000ff”><strong>用户登录</strong></font></h3></td></tr>
  25.                 <tr>
  26.                     <td align=”right”>用户名:</td>
  27.                     <td><input type=”text” name=”username”/></td>
  28.                 </tr>
  29.                 <tr>
  30.                     <td>密  码:</td>
  31.                     <td><input type=”password” name=”password”/></td>
  32.                 </tr>
  33.                 <tr>
  34.                     <td align=”center”><input type=”Submit” name=”submit” value=”提交”/></td>
  35.                     <td align=”center”><input type=”Reset” name=”reset” value=”重置”/></td>
  36.                 </tr>
  37.             </table>
  38.       </form>
  39.   </body>
  40. </html>

 

 

 

 

web.xml文件如下

 

[xhtml] view plaincopy

  1. <?xml version=”1.0″ encoding=”gb2312″?>
  2. <web-app version=”2.4″
  3.     xmlns=”http://java.sun.com/xml/ns/j2ee”
  4.     xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
  5.     xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”>
  7.   <servlet>
  8.     <description>This is the description of my J2EE component</description>
  9.     <display-name>This is the display name of my J2EE component</display-name>
  10.     <servlet-name>loginServlet</servlet-name>
  11.     <servlet-class>com.lgy.servlet.loginServlet</servlet-class>
  12.   </servlet>
  13.   <servlet-mapping>
  14.     <servlet-name>loginServlet</servlet-name>
  15.     <url-pattern>/servlet/loginServlet</url-pattern>
  16.   </servlet-mapping>
  17.   <welcome-file-list>
  18.     <welcome-file>index.jsp</welcome-file>
  19.   </welcome-file-list>
  20. </web-app>

 

 

 

 

注意

Web.xm中的<url-pattern>/servlet/loginServlet</url-pattern>

和index.jsp中的action=“servlet/loginServlet”必须一致

 

 

 

下面是javaBean  所谓的VO(POJO)主要负责对用户表进行描述,设置用户的各项信息,返回用户的各项信息

 

 

 

[c-sharp] view plaincopy

  1. package com.lgy.vo;
  2. import java.util.List;
  3. public class login {
  4.     private int id;
  5.     private String username;
  6.     private String password;
  7.     private List errors;
  8.     public boolean invalidate(){
  9.         boolean flag=true;
  10.         /**
  11.          * 1.先验证输入不为空,在验证合法的输入格式。
  12.          * 如果输入不为空,那么进行下一项合法的格式的验证
  13.          */
  14.         System.out.println(“这是pojo得到的用户名********:”+this.username);
  15.         if(this.username==null||”".equals(this.username)){
  16.             flag=false;
  17.             errors.add(“用户名不能为空!”);
  18.         }
  19.         //合法格式的验证
  20.         else{
  21.             if(this.username.length()<3||this.username.length()>10)
  22.             {
  23.                 flag=false;
  24.                 errors.add(“您应该输入合法的用户名,长度在3~10之间!”);
  25.             }
  26.         }
  27.         if(this.password==null||”".equals(this.password)){
  28.                 flag=false;
  29.                 errors.add(“密码不能为空!”);
  30.         }
  31.         else{
  32.             if(this.password.length()<3||this.password.length()>10){
  33.                 flag=false;
  34.                 errors.add(“您应该输入合法的密码,的长度在3~10之间!”);
  35.             }
  36.         }
  37.         return flag;
  38.     }
  39.     public int getId() {
  40.         return id;
  41.     }
  42.     public void setId(int id) {
  43.         this.id = id;
  44.     }
  45.     public String getUsername() {
  46.         return username;
  47.     }
  48.     public void setUsername(String username) {
  49.         this.username = username;
  50.     }
  51.     public String getPassword() {
  52.         return password;
  53.     }
  54.     public void setPassword(String password) {
  55.         this.password = password;
  56.     }
  57.     public List getErrors() {
  58.         return errors;
  59.     }
  60.     public void setErrors(List errors) {
  61.         this.errors = errors;
  62.     }
  63. }

 

 

 

 

 

下面是数据库的链接类  负责链接数据库


 

 

  1. // 本类只用于数据库连接及关闭操作
  2. package com.lgy.db ;
  3. import java.sql.* ;
  4. public class MysqlConnection
  5. {
  6.     // 属性
  7.     // 定义数据库操作的常量、对象
  8.     // 数据库驱动程序
  9.     private final String DBDRIVER   = ”com.mysql.jdbc.Driver” ;
  10.     // 数据库连接地址
  11.     private final String DBURL      = ”jdbc:mysql://localhost:3306/test” ;
  12.     // 数据库用户名
  13.     private final String DBUSER     = ”root” ;
  14.     // 数据库连接密码
  15.     private final String DBPASSWORD = ”root” ;
  16.     // 声明一个数据库连接对象
  17.     private Connection conn         = null ;
  18.     // 在构造方法之中连接数据库
  19.     public MysqlConnection()
  20.     {
  21.         try
  22.         {
  23.             // 加载驱动程序
  24.             Class.forName(DBDRIVER) ;
  25.             // 连接数据库
  26.             conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
  27.         }
  28.         catch (Exception e)
  29.         {
  30.             System.out.println(e) ;
  31.         }
  32.     }
  33.     // 返回一个数据库连接
  34.     public Connection getConnection()
  35.     {
  36.         /// 返回连接对象
  37.         return this.conn ;
  38.     }
  39.     // 关闭数据库连接
  40.     public void close()
  41.     {
  42.         try
  43.         {
  44.             this.conn.close() ;
  45.         }
  46.         catch (Exception e)
  47.         {
  48.         }
  49.     }

 

 

 

 

 

下面是servlet  控制处理用户发送来的请求

 

 

 

  1. package com.lgy.servlet;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import javax.servlet.RequestDispatcher;
  10. import com.lgy.factory.DAOFactory;
  11. import com.lgy.vo.login;
  12. public class loginServlet extends HttpServlet {
  13.     public void doGet(HttpServletRequest request, HttpServletResponse response)
  14.             throws ServletException, IOException {
  15.         this.doPost(request, response);
  16.     }
  17.     public void doPost(HttpServletRequest request, HttpServletResponse response)
  18.             throws ServletException, IOException {
  19.         List errors = new ArrayList() ;
  20.         String path = ”../index.jsp” ;
  21.         String name=request.getParameter(“username”);
  22.         System.out.println(“这是页面上的用户名:”+name);
  23.         String pwd=request.getParameter(“password”);
  24.         System.out.println(“这是页面上的密码:”+pwd);
  25.         login lg=new login();
  26.         lg.setUsername(name);
  27.         lg.setPassword(pwd);
  28.         lg.setErrors(errors);
  29.         boolean b=lg.invalidate();
  30.         System.out.println(“判断输入格式的真假”+b);
  31.         //下面的判断为 如果输入的格式合法,那么我们进行数据库端得验证
  32.         if(b){
  33.             if(DAOFactory.getLoginDAOInstance().isLogin(lg)){
  34.                 System.out.println(“进行数据库端得判断***********”);
  35.                 path=”../success.jsp”;
  36.             }else{
  37.                 errors.add(“错误的用户名和密码!”);
  38.             }
  39.         }
  40.         request.setAttribute(“Error”, errors);
  41.         request.setAttribute(“Lg”, lg);
  42.         //request.getRequestDispatcher(path)
  43.         request.getRequestDispatcher(path).forward(request, response);
  44.     }
  45. }

 

 

 

 

 

下面是很据servlet的处理 由具体实现类 处理数据DAO

 

  1. package com.lgy.dao;
  2. import com.lgy.vo.login;
  3. public interface loginDao {
  4.     public boolean isLogin(login lg);
  5. }

 

 

 

 

 

DAOFactory

 

  1. package com.lgy.factory;
  2. import com.lgy.dao.loginDao;
  3. import com.lgy.daoImp.loginDaoImp;
  4. public class DAOFactory {
  5.     public static loginDao getLoginDAOInstance()
  6.     {
  7.         return new loginDaoImp() ;
  8.     }
  9. }

 

 

 

 

DaoImpl

 

[c-sharp] view plaincopy

  1. package com.lgy.daoImp;
  2. import com.lgy.dao.*;
  3. import com.lgy.vo.login;
  4. import com.lgy.db.*;
  5. import java.sql.*;
  6. import java.sql.PreparedStatement;
  7. import java.sql.Connection;
  8. import java.sql.ResultSet;
  9. public class loginDaoImp implements loginDao {
  10.     public boolean isLogin(login lg) {
  11.         boolean flag = false;
  12.         PreparedStatement pstm = null;
  13.         ResultSet rs = null;
  14.         String sql = null;
  15.         MysqlConnection mc = new MysqlConnection();
  16.         sql = ”select username,password from login where username=? and password=?”;
  17.         try {
  18.             System.out.println(“这是要用到的sql………………:”+sql);
  19.             pstm=mc.getConnection().prepareStatement(sql);
  20.             System.out.println(“@@@@@@@@要查询的用户名:”+lg.getUsername());
  21.             pstm.setString(1, lg.getUsername());
  22.             pstm.setString(2, lg.getPassword());
  23.             rs = pstm.executeQuery();
  24.             if (rs.next()) {
  25.                 flag = true;
  26.                 lg.setUsername(rs.getString(“username”));
  27.             }
  28.         } catch (Exception ex) {
  29.             ex.printStackTrace();
  30.         }
  31.         return flag;
  32.     }
  33. }

 

 

 

至于如何连接数据我我就不讲了,只要把jar包导进去就行了。

http://blog.csdn.net/wei_wei_hnu/article/details/6009747