Skip to content

Latest commit

 

History

History
295 lines (231 loc) · 6.39 KB

A-simple-MVC-example.md

File metadata and controls

295 lines (231 loc) · 6.39 KB
title date tags
A simple MVC example
2019-04-12 14:34:28 -0700
JSP
Servlet
Tomcat

一个关于JSP的简单MVC案例

  • 程序示例图如下所示 :

  • Java bean : 封装用户的身份信息.

package pers.huangyuhui.servlet.bean;

/**
 * @ClassName: UserInfo
 * @Description: 用户信息
 * @author: HuangYuhui
 * @date: Apr 8, 2019 5:15:21 PM
 * 
 */
public class UserInfo {

	private String name;
	private String password;

	public UserInfo(String name, String password) {
		super();
		this.name = name;
		this.password = password;
	}

	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;
	}

}
  • 操作数据库的工具类
package pers.huangyuhui.servlet.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * @ClassName: JDBCUtil
 * @Description: 操作数据库工具类
 * @author: HuangYuhui
 * @date: Apr 8, 2019 5:08:24 PM
 * 
 */
public class JDBCUtil {

	// initialize the driver of database.
	static {
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
		} catch (ClassNotFoundException e) {

			e.printStackTrace();
		}
	}

	// Return a database connection object.
	public static Connection getConnection() {
		Connection connection = null;
		try {
			connection = DriverManager.getConnection(
					"jdbc:mysql://LOCALHOST/DatabaseName?" + "useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true",
					"root", "DatabasePassword");
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return connection;
	}

	// release the resource of connecting.
	public static void freeResource(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {
		if (connection != null) {
			try {
				connection.close();
			} catch (SQLException e) {

				e.printStackTrace();
			}
		}
		if (preparedStatement != null) {
			try {
				preparedStatement.close();
			} catch (SQLException e) {

				e.printStackTrace();
			}
		}
		if (resultSet != null) {
			try {
				resultSet.close();
			} catch (SQLException e) {

				e.printStackTrace();
			}
		}
	}
}
  • 控制器(controller) : 用于验证用户的登录信息并根据其结果作出相应的处理.
package pers.huangyuhui.servlet.controller;

import java.io.IOException;
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 pers.huangyuhui.servlet.bean.UserInfo;
import pers.huangyuhui.servlet.modImpl.DalidateUserInfo;

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public LoginServlet() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("userName");
		String password = request.getParameter("userPassword");

		UserInfo userInfo = new UserInfo(name, password);
		boolean result = new DalidateUserInfo().vaildateUserInfo(userInfo);
		if (result) {
			// Sends a temporary redirect response to the client using thespecified redirect
			// location URL and clears the buffer.
			response.sendRedirect("weclome.jsp");
		} else {
			response.sendRedirect("error.jsp");
		}

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}
  • 用于操作用户信息的接口.
package pers.huangyuhui.servlet.model;
import pers.huangyuhui.servlet.bean.UserInfo;

/**
 * @ClassName: LoginDao
 * @Description: 操作用户信息的接口
 * @author: HuangYuhui
 * @date: Apr 8, 2019 5:53:53 PM
 * 
 */
public interface UserInfoDao {

	public boolean vaildateUserInfo(UserInfo userInfo);
}
  • 模型(model) : 实现了操作用户信息接口的类.
package pers.huangyuhui.servlet.modImpl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import pers.huangyuhui.servlet.bean.UserInfo;
import pers.huangyuhui.servlet.model.UserInfoDao;
import pers.huangyuhui.servlet.util.JDBCUtil;

/**
 * @ClassName: DalidateUserInfo
 * @Description: 验证用户的身份信息
 * @author: HuangYuhui
 * @date: Apr 8, 2019 4:55:27 PM
 * 
 */
public class DalidateUserInfo implements UserInfoDao {

	private static String sql = "SELECT name,password FROM user WHERE NAME=? AND PASSWORD=?";
	// 节省JDBC连接资源.
	private static Connection connection = JDBCUtil.getConnection();
	private PreparedStatement preparedStatement;
	private ResultSet resultSet;

	public boolean vaildateUserInfo(UserInfo userInfo) {
		try {
			preparedStatement = connection.prepareStatement(sql);
			preparedStatement.setString(1, userInfo.getName());
			preparedStatement.setString(2, userInfo.getPassword());

			resultSet = preparedStatement.executeQuery();

			if (resultSet.next()) {
				return true;
			}

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtil.freeResource(null, preparedStatement, resultSet);
		}
		return false;
	}
}
  • 视图(view) : 用户登录界面.:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Login in</title>
	</head>
		<body>
				<div align="center">
					<form action="LoginServlet" method="post">
						<table>
							<tr>
								<td>name</td>
								<td>
									<input type="text" name="userName"/>
								</td>
							</tr>
							<tr>
								<td>password</td>
								<td>
									<input type="text" name="userName"/>
								</td>
							</tr>
						</table><br>
						<input type="submit" value="login in" >
					</form>
				</div>
		</body>
</html>
  • 日记 : 今天做了大学第一个兼职!在一个购物广场旁折风车,串风车,固定风车...中午吃坐在地上吃盒饭时让我突然想起了四年前撤学外出的自己,难忘的是青春哟!计划把外快买书嘿嘿嘿..(っ•̀ω•́)っ✎⁾⁾⁾