標籤:servlet+jsp+mysql mvc
林炳文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,並插入了一個使用者
create database example;use example;create table user(userid int primary key auto_increment,name varchar(30) NOT NULL,password varchar(30) NOT NULL);insert into user(userid,name,password) values (null,‘lin‘,‘1234‘);
如果example不存在,記得要先create database example
select *from user結果如下:
2、VO類,用來和資料庫對應,DAO類中會用到的東西
/** *功能 VO類*作者 林炳文([email protected] 部落格:http://blog.csdn.net/evankaka) *時間 2015.4.22*/package com.mucfc.vo;public class User {private int userid;//對應資料庫中useridprivate String name;//對應資料庫中nameprivate String password;//對應資料庫中passwordpublic int getUserid() {return userid;}public void setUserid(int userid) {this.userid = userid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
3、定義操作資料庫 ,完成資料庫的串連,開啟等操作,要注意加異常操作!這也是在DAO類中需要用到的東西
/** *功能 定義資料庫操作類*作者 林炳文([email protected] 部落格:http://blog.csdn.net/evankaka) *時間 2015.4.22*/package com.mucfc.dbc;import java.sql.Connection;import java.sql.DriverManager;public class DatabaseConnection {//定義資料庫驅動程式private static final String DBDRIVER="com.mysql.jdbc.Driver";//資料庫連接地址private static final String DBURL="jdbc:mysql://localhost:3306/example";//example表示資料庫private static final String DBUSER="root";private static final String DBPASS="[email protected]"; private Connection connection=null; public DatabaseConnection() throws Exception{ try{ //資料庫操作可能出現異常 Class.forName(DBDRIVER); connection=DriverManager.getConnection(DBURL,DBUSER,DBPASS); }catch(Exception exception ){ throw exception; } finally {} } public Connection getConnection(){ return connection; } public void close() throws Exception{ if(connection!=null){ try { connection.close();} catch (Exception e) {throw e;} } }}
4、定義DAO介面
介面類,查詢是否存在這個使用者的方法是findLogin(User user)
/** *功能 定義DAO介面*作者 林炳文([email protected] 部落格:http://blog.csdn.net/evankaka) *時間 2015.4.22*/package com.mucfc.dao;import com.mucfc.vo.User;public interface IUserDAO {/** * 使用者登入驗證 * @param user傳入vo對象 * @return 驗證的操作結果 * @throws Exception */public boolean findLogin(User user) throws Exception;}
5、DAO的實作類別,這裡相當是Mode(模型層)
/** *功能 定義DAO實作類別*作者 林炳文([email protected] 部落格:http://blog.csdn.net/evankaka) *時間 2015.4.22*/package com.mucfc.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import com.mucfc.vo.User;public class UserDAOImpI implements IUserDAO{private Connection conn=null;//定義資料庫連接對象 private PreparedStatement pstmt=null;//定義資料庫操作對象public UserDAOImpI(Connection conn){ //設定資料庫連接this.conn=conn;}@Overridepublic boolean findLogin(User user) throws Exception {boolean flag=false;try {String sql="select name from user where name=? and password=?";pstmt=conn.prepareStatement(sql);//執行個體化操作pstmt.setString(1,user.getName()); pstmt.setString(2, user.getPassword()); ResultSet rSet=pstmt.executeQuery();//取得結果 if(rSet.next()){ user.setName(rSet.getString(1));//取得使用者名稱 flag=true; }} catch (Exception e) {throw e;}finally{//關閉操作if(pstmt!=null){try {pstmt.close();} catch (Exception e) {throw e;}}}return flag;}}對使用者名稱和密碼進行驗證,如果驗證成功,則通過VO將使用者的真實姓名取出並返回。
6、定義一個DAO的代理類
這裡這個代理類可以要也可以不要,這裡為了方便些,所以定義了一個
/** *功能 定義DAO代理類*作者 林炳文([email protected] 部落格:http://blog.csdn.net/evankaka) *時間 2015.4.22*/package com.mucfc.dao.proxy;import com.mucfc.dao.IUserDAO;import com.mucfc.dao.UserDAOImpI;import com.mucfc.dbc.DatabaseConnection;import com.mucfc.vo.User;public class UserDAOProxy implements IUserDAO{ private DatabaseConnection dbc=null;//定義資料庫連接 private IUserDAO dao=null;//定義DAO介面 public UserDAOProxy(){ try {dbc=new DatabaseConnection();//執行個體化資料庫連接} catch (Exception e) {e.printStackTrace();} dao=new UserDAOImpI(dbc.getConnection()); }@Overridepublic boolean findLogin(User user) throws Exception {boolean flag=false;try {flag=dao.findLogin(user);//調用真實主題} catch (Exception e) {throw e;}finally{dbc.close();}return flag;}}
7、建立一個Servlet類,取名為LoginServlet.java ,這裡相當是Controller(控制層)代碼如下:
package com.mucfc.servlet;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.mucfc.dao.proxy.UserDAOProxy;import com.mucfc.vo.User;/** * Servlet implementation class LoginServlet */@WebServlet("/LoginServlet")public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public LoginServlet() { super(); // TODO Auto-generated constructor stub }/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name=request.getParameter("name");String password=request.getParameter("password");List<String> info=new ArrayList<String>();if(name==null||"".equals(name)){ //使用者名稱輸入格式問題info.add("使用者名稱不可為空");System.out.println("使用者名稱不可為空");}if(password==null||"".equals(password)){//密碼輸入格式問題info.add("密碼不可為空");System.out.println("密碼不可為空");}if(info.size()==0){User user=new User();user.setName(name);user.setPassword(password);UserDAOProxy userDAOProxy=new UserDAOProxy();try {if(userDAOProxy.findLogin(user)){info.add("使用者登入成功,歡迎"+user.getName()+"光臨!");}else {info.add("使用者登入失敗,錯誤的使用者名稱和密碼");}} catch (Exception e) {e.printStackTrace();}}request.setAttribute("info", info);//儲存錯誤資訊request.getRequestDispatcher("Login.jsp").forward(request,response);//跳轉}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response);}}它主要實現了得到Login.jsp傳過來的name和password,然後調用dao類到資料庫example中的user表中去進行name和password的驗證。最後再將結果返回給login.jsp,接著login,jsp更新顯示結果。
8、初始介面Login.jsp,這裡相當是View(顯示層)
<%@page import="java.util.Iterator"%><%@page import="java.util.List"%><%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=GBK"><center><title>MVC登入執行個體</title></center></head><body><center><h2>使用者登入程式</h2></center><center><%request.setCharacterEncoding("GBK");%><%List<String> info=(List<String>)request.getAttribute("info");if(info!=null){Iterator<String> iter=info.iterator();while(iter.hasNext()){%><h4><%=iter.next()%></h4><% }}%></center><center><form action="LoginServlet" method="post" onSubmit="return validate(this)">使用者名稱:<input type="text" name="name"><br> 密 碼:<input type="password" name="password"><br> <input type="submit" value="登入"> <input type="reset" value="重設"></form></center></body></html>
9、web.xml設定:
<?xml version="1.0" encoding="UTF-8"?><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"> <welcome-file-list> <welcome-file>Login.html</welcome-file> <welcome-file>Login.htm</welcome-file> <welcome-file>Login.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>LoginServlet</servlet-name> <!-- 類名 --> <servlet-class>com.mucfc.servlet.LoginServlet</servlet-class> <!-- 所在的包 --> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/servlet/LoginServlet</url-pattern><!-- 訪問的網址 --> </servlet-mapping></web-app>
10.匯入必要的包,是一定要的!
11.整個工程目錄如下:
12、運行
13、結果
瀏覽器輸入:http://localhost:8080/ServletLearningChapter1_3/
好了,是不是很簡單呢?
林炳文Evankaka原創作品。轉載請註明出處http://blog.csdn.net/evankaka
【MVC】Servlet+Jsp+MySql使用者登入執行個體