1. 程式人生 > >mvc設計模式實現簡單登入跳轉

mvc設計模式實現簡單登入跳轉

MVC模式

MVC最初應用於桌面程式中,M指資料模型,V指使用者介面,C指控制器,是Xerox PARC在20世紀80年代為程式語言“Smalltalk-80”發明的一種軟體設計模式,至今已被廣泛使用。基於JavaEE的Web應用開發,經歷了Model1和Model2的不同時代。

Model1:

在Model 1中,不使用Servlet,JSP和JavaBean協作共同完成任務,不是真正的MVC模式。

              優點:架構簡單,適合小型專案的開發。

               缺點:JSP職責過重,可維護性較差。

Model2:

Model 2已經是MVC設計思想下的架構,Servlet充當控制器,JSP充當檢視,JavaBean作為模型。瀏覽器的請求都提交給Servlet,Servlet例項化JavaBean處理請求,並根據處理結果跳轉到不同的JSP頁面,生成響應到客戶端瀏覽器。JavaBean可以使用JDBC訪問資料庫。

        優點:職責清晰,適合大、中型專案。

               缺點:不適合小型專案(主要是層過多)

專案結構和資料庫表,DBUtils工具類筆者前面文章有這裡就不放了

  

 建立實體類User

package com.entity;

public class User {

	private Long id;
	private String userName;
	private String password;
	private Integer age;
	private String gender;
	private String address;
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public User(String userName, String password) {
		super();
		this.userName = userName;
		this.password = password;
	}
	
}

編寫Dao

package com.dao;

import java.sql.SQLException;

import com.utils.DBUtils;

public class UserDao {

	/**
	 * 根據使用者名稱和密碼查詢滿足條件的使用者數
	 * @param username
	 * @param password
	 * @return
	 */
	public Long queryUserByNamePwd(String username,String password){
		String sql = "select count(*) from t_user where UserName = ? and Password =?";
		try {
			return (Long) DBUtils.executeScalar(sql, username,password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0L;
	}
}

編寫service

package com.service;

import com.dao.UserDao;
import com.entity.User;

public class UserService {

	private UserDao dao = new UserDao();
	/**
	 * 登入驗證
	 * @param username 使用者名稱
	 * @param password 密碼
	 * @return true:驗證通過 false:驗證失敗
	 */
	public boolean login(User user){
		Long result = dao.queryUserByNamePwd(user.getUserName(), user.getPassword());
		return result > 0;
	}
}

編寫servlet,並在制器中呼叫Service的方法

package com.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.entity.User;
import com.service.UserService;

public class LoginServlet extends HttpServlet {

	//呼叫service
	private UserService service = new UserService();
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		doPost(req, resp);
	}
	public void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String username = req.getParameter("username");
		String password = req.getParameter("pwd");
		User user = new User(username,password);
		if(service.login(user)){
			resp.sendRedirect("index.jsp");
		}else{
			resp.sendRedirect("login.jsp");
		}
	}
}

編寫登入jsp,並在檢視中指定Servlet

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'login.jsp' starting page</title>
  </head>
  <body>
     <form action="LoginServlet" method="POST">
      <table>
        <tr>
          <td>使用者名稱</td>
          <td><input type="text" name="username" id="username"></td>
        </tr>
        <tr>
          <td>密碼</td>
          <td><input type="password" name="pwd" id="pwd"></td>
        </tr> 
        <tr>
          <td colspan="2" align="center">
          <input type="submit" value="登入">
          </td>
        </tr>
      </table>
</form>
  </body>
</html>