Servlet+Jsp+MySql用户登录实例

  林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

         本文要用Servlet+Jsp+MySql实例用户登录,并简要介绍了下MVC的思想,此例子也是按照这个思路来做的。在Eclipse+tomcat7.0上做的。不会很难,对于了解MVC思想很有帮助!

本文工程下载

效果:

这是刚开始的界面

                                          这是错误时的信息        

                                                                                                                     

这是成功时的信息


一、MVC简介

       MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。


控制器

控制器掌管着用户的请求(当用户点击图形用户界面(GUI)上的元素执行操作时,控制器会收到HTTP GET或者POST请求)。它的主要功能就是调用并协调需要的资源/对象来执行用户请求。通常控制器会为任务调用合适的模型,以及选择合适的视图。

模型


模型是指运用于数据之上的数据规则和数据内容,它一般对应于应用程序所要管理的对象。在软件系统中,任何事物都可以被抽象成可以对其以某种方式进行处理的数据模型。应用程序中的用户,信息以及图书是什么?它们只是一堆必须按照对应规则处理的数据(日期不能是未来的日期,电子邮件有特定的格式,名字的长度不能超过多少字符等等。

视图

视图提供了展示模型数据的不同方式。它可能是数据填充的模板。视图可以有多个,而控制器则决定使用哪个视图。一个网络应用通常由许多控制器,模型和视图组成。控制器可以被看成是一个主控制器,用于接收用户的所有请求,然后在调用特定的控制器来处理不同的情况。

二、本文MVC结构

本文的这个例子,比较简单。看看下面的这个图就懂了



三、程序

1、创建数据库,这里使用的是MySql5.6,并插入了一个用户

[sql]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. create database example;  
  2. use example;  
  3. create table user(  
  4. userid int primary key auto_increment,  
  5. name varchar(30) NOT NULL,  
  6. password varchar(30) NOT NULL  
  7. );  
  8. insert into user(userid,name,passwordvalues (null,'lin','1234');  
如果example不存在,记得要先create database example

select *from user结果如下:



2、VO类,用来和数据库对应,DAO类中会用到的东西

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /**  
  2. *功能 VO类 
  3. *作者 林炳文(ling20081005@126.com 博客:http://blog.csdn.net/evankaka)  
  4. *时间 2015.4.22 
  5. */  
  6. package com.mucfc.vo;  
  7. public class User {  
  8.     private int userid;//对应数据库中userid  
  9.     private String name;//对应数据库中name  
  10.     private String password;//对应数据库中password  
  11.     public int getUserid() {  
  12.         return userid;  
  13.     }  
  14.     public void setUserid(int userid) {  
  15.         this.userid = userid;  
  16.     }  
  17.     public String getName() {  
  18.         return name;  
  19.     }  
  20.     public void setName(String name) {  
  21.         this.name = name;  
  22.     }  
  23.     public String getPassword() {  
  24.         return password;  
  25.     }  
  26.     public void setPassword(String password) {  
  27.         this.password = password;  
  28.     }  
  29.   
  30. }  

3、定义操作数据库 ,完成数据库的连接,打开等操作,要注意加异常操作!这也是在DAO类中需要用到的东西

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /**  
  2. *功能 定义数据库操作类 
  3. *作者 林炳文(ling20081005@126.com 博客:http://blog.csdn.net/evankaka)  
  4. *时间 2015.4.22 
  5. */  
  6. package com.mucfc.dbc;  
  7.   
  8. import java.sql.Connection;  
  9. import java.sql.DriverManager;  
  10. public class DatabaseConnection {  
  11.     //定义数据库驱动程序  
  12.     private static final String DBDRIVER="com.mysql.jdbc.Driver";  
  13.     //数据库连接地址  
  14.     private static final String DBURL="jdbc:mysql://localhost:3306/example";//example表示数据库  
  15.     private static final String DBUSER="root";  
  16.     private static final String DBPASS="christmas258@";  
  17.     private Connection connection=null;  
  18.     public DatabaseConnection() throws Exception{  
  19.         try{  
  20.             //数据库操作可能出现异常  
  21.             Class.forName(DBDRIVER);  
  22.             connection=DriverManager.getConnection(DBURL,DBUSER,DBPASS);  
  23.               
  24.         }catch(Exception exception ){  
  25.             throw exception;  
  26.         } finally {  
  27.         }     
  28.     }  
  29.     public Connection getConnection(){  
  30.         return connection;  
  31.     }  
  32.     public void close() throws Exception{  
  33.         if(connection!=null){  
  34.             try {  
  35.                 connection.close();           
  36.             } catch (Exception e) {  
  37.                 throw e;  
  38.             }  
  39.         }  
  40.           
  41.     }  
  42.   
  43. }  

4、定义DAO接口

接口类,查询是否存在这个用户的方法是findLogin(User user)

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /**  
  2. *功能 定义DAO接口 
  3. *作者 林炳文(ling20081005@126.com 博客:http://blog.csdn.net/evankaka)  
  4. *时间 2015.4.22 
  5. */  
  6. package com.mucfc.dao;  
  7. import com.mucfc.vo.User;  
  8. public interface IUserDAO {  
  9. /** 
  10.  * 用户登录验证 
  11.  * @param user传入vo对象 
  12.  * @return 验证的操作结果  
  13.  * @throws Exception 
  14.  */  
  15. public boolean findLogin(User user) throws Exception;  
  16.   
  17. }  

5、DAO的实现类,这里相当是Mode(模型层)

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /**  
  2. *功能 定义DAO实现类 
  3. *作者 林炳文(ling20081005@126.com 博客:http://blog.csdn.net/evankaka)  
  4. *时间 2015.4.22 
  5. */  
  6. package com.mucfc.dao;  
  7. import java.sql.Connection;  
  8. import java.sql.PreparedStatement;  
  9. import java.sql.ResultSet;  
  10. import com.mucfc.vo.User;  
  11. public class UserDAOImpI implements IUserDAO{  
  12.     private Connection conn=null;//定义数据库连接对象   
  13.     private PreparedStatement pstmt=null;//定义数据库操作对象  
  14.     public UserDAOImpI(Connection conn){ //设置数据库连接  
  15.         this.conn=conn;  
  16.     }  
  17.     @Override  
  18.     public boolean findLogin(User user) throws Exception {  
  19.         boolean flag=false;  
  20.         try {  
  21.             String sql="select name from user where name=? and password=?";  
  22.             pstmt=conn.prepareStatement(sql);//实例化操作  
  23.             pstmt.setString(1,user.getName());  
  24.             pstmt.setString(2, user.getPassword());  
  25.             ResultSet rSet=pstmt.executeQuery();//取得结果   
  26.             if(rSet.next()){  
  27.                 user.setName(rSet.getString(1));//取得用户名  
  28.                 flag=true;        
  29.             }  
  30.   
  31.         } catch (Exception e) {  
  32.             throw e;  
  33.         }finally{  
  34.             //关闭操作  
  35.             if(pstmt!=null){  
  36.                 try {  
  37.                     pstmt.close();  
  38.                 } catch (Exception e) {  
  39.                     throw e;                  
  40.             }         
  41.         }  
  42.               
  43.         }  
  44.         return flag;  
  45.     }  
  46.       
  47. }  
对用户名和密码进行验证,如果验证成功,则通过VO将用户的真实姓名取出并返回。


6、定义一个DAO的代理类

这里这个代理类可以要也可以不要,这里为了方便些,所以定义了一个

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /**  
  2. *功能 定义DAO代理类 
  3. *作者 林炳文(ling20081005@126.com 博客:http://blog.csdn.net/evankaka)  
  4. *时间 2015.4.22 
  5. */  
  6. package com.mucfc.dao.proxy;  
  7. import com.mucfc.dao.IUserDAO;  
  8. import com.mucfc.dao.UserDAOImpI;  
  9. import com.mucfc.dbc.DatabaseConnection;  
  10. import com.mucfc.vo.User;  
  11. public class UserDAOProxy implements IUserDAO{  
  12.     private DatabaseConnection dbc=null;//定义数据库连接  
  13.     private IUserDAO dao=null;//定义DAO接口  
  14.     public UserDAOProxy(){  
  15.         try {  
  16.             dbc=new DatabaseConnection();//实例化数据库连接  
  17.         } catch (Exception e) {  
  18.             e.printStackTrace();  
  19.         }  
  20.         dao=new UserDAOImpI(dbc.getConnection());  
  21.           
  22.     }  
  23.     @Override  
  24.     public boolean findLogin(User user) throws Exception {  
  25.         boolean flag=false;  
  26.         try {  
  27.             flag=dao.findLogin(user);//调用真实主题  
  28.         } catch (Exception e) {  
  29.             throw e;  
  30.         }finally{  
  31.             dbc.close();  
  32.         }  
  33.         return flag;  
  34.     }  
  35.   
  36. }  

7、新建一个Servlet类,取名为LoginServlet.java ,这里相当是Controller(控制层)代码如下:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.mucfc.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.annotation.WebServlet;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10. import com.mucfc.dao.proxy.UserDAOProxy;  
  11. import com.mucfc.vo.User;  
  12. /** 
  13.  * Servlet implementation class LoginServlet 
  14.  */  
  15. @WebServlet("/LoginServlet")  
  16. public class LoginServlet extends HttpServlet {  
  17.     private static final long serialVersionUID = 1L;        
  18.     /** 
  19.      * @see HttpServlet#HttpServlet() 
  20.      */  
  21.     public LoginServlet() {  
  22.         super();  
  23.         // TODO Auto-generated constructor stub  
  24.     }  
  25.   
  26.     /** 
  27.      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
  28.      */  
  29.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  30.     String name=request.getParameter("name");  
  31.     String password=request.getParameter("password");  
  32.     List<String> info=new ArrayList<String>();  
  33.     if(name==null||"".equals(name)){ //用户名输入格式问题  
  34.         info.add("用户名不能为空");  
  35.         System.out.println("用户名不能为空");  
  36.     }  
  37.   
  38.     if(password==null||"".equals(password)){//密码输入格式问题  
  39.         info.add("密码不能为空");  
  40.         System.out.println("密码不能为空");  
  41.     }  
  42.     if(info.size()==0){  
  43.         User user=new User();  
  44.         user.setName(name);  
  45.         user.setPassword(password);  
  46.         UserDAOProxy userDAOProxy=new UserDAOProxy();  
  47.         try {  
  48.               
  49.             if(userDAOProxy.findLogin(user)){  
  50.                 info.add("用户登录成功,欢迎"+user.getName()+"光临!");               
  51.             }else {  
  52.                 info.add("用户登录失败,错误的用户名和密码");  
  53.             }                         
  54.         } catch (Exception e) {  
  55.             e.printStackTrace();  
  56.         }  
  57.     }  
  58.     request.setAttribute("info", info);//保存错误信息  
  59.     request.getRequestDispatcher("Login.jsp").forward(request,response);//跳转  
  60.       
  61.     }  
  62.   
  63.     /** 
  64.      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
  65.      */  
  66.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
  67.       doGet(request, response);  
  68.     }  
  69.   
  70. }  
它主要实现了得到Login.jsp传过来的name和password,然后调用dao类到数据库example中的user表中去进行name和password的验证。最后再将结果返回给login.jsp,接着login,jsp更新显示结果。

8、初始界面Login.jsp,这里相当是View(显示层)

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <%@page import="java.util.Iterator"%>  
  2. <%@page import="java.util.List"%>  
  3. <%@ page language="java" contentType="text/html; charset=GBK"  
  4.     pageEncoding="GBK"%>  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  6. <html>  
  7. <head>  
  8. <meta http-equiv="Content-Type" content="text/html; charset=GBK">  
  9. <center><title>MVC登录实例</title></center>  
  10. </head>  
  11. <body>  
  12. <center><h2>用户登录程序</h2></center>  
  13. <center>  
  14. <%  
  15. request.setCharacterEncoding("GBK");  
  16. %>  
  17. <%  
  18. List<String> info=(List<String>)request.getAttribute("info");  
  19. if(info!=null){  
  20.     Iterator<String> iter=info.iterator();  
  21.     while(iter.hasNext()){  
  22. %>  
  23. <h4><%=iter.next()%></h4>  
  24. <%   
  25. }  
  26. }  
  27. %>  
  28. </center>  
  29. <center>  
  30. <form action="LoginServlet" method="post" onSubmit="return validate(this)">  
  31. 用户名:<input type="text" name="name"><br>  
  32.  密 码:<input type="password" name="password"><br>  
  33.  <input type="submit" value="登录">  
  34.  <input type="reset" value="重置">  
  35. </form>  
  36. </center>  
  37. </body>  
  38. </html>  

9、web.xml设置:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">  
  3.   
  4.   <welcome-file-list>  
  5.     <welcome-file>Login.html</welcome-file>  
  6.     <welcome-file>Login.htm</welcome-file>  
  7.     <welcome-file>Login.jsp</welcome-file>  
  8.   
  9.   </welcome-file-list>  
  10.     
  11.     <servlet>     
  12.     <servlet-name>LoginServlet</servlet-name>  <!-- 类名 -->  
  13.     <servlet-class>com.mucfc.servlet.LoginServlet</servlet-class> <!-- 所在的包 -->  
  14.   </servlet>  
  15.   <servlet-mapping>  
  16.     <servlet-name>LoginServlet</servlet-name>   
  17.     <url-pattern>/servlet/LoginServlet</url-pattern><!-- 访问的网址 -->  
  18.     </servlet-mapping>  
  19. </web-app>  

10.导入必要的包,是一定要的!

11.整个工程目录如下:



12、运行


13、结果

浏览器输入:http://localhost:8080/ServletLearningChapter1_3/





好了,是不是很简单呢?

         林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值