JSP登录案例详解MVC模式

1,MVC模式

MVC是一种架构设计模式,是一种设计理念是为了达到分层设计的目的,从而使代码解耦,便于维护和代码的复用.MVC是3个单词的缩写,全称:模型 - 视图 - Controller(模型 - 视图 - 控制器)。

1,型号

模型层,即用特定的模式进行数据处理,可以简单理解为数据层(的JavaBean的,包含业务逻辑豆和封装数据的JavaBean的)。在项目中,(简单理解)一般把数据访问和操作,比如将对象关系映射这样的代码作为模型层,也就是对数据库的操作这一些列的代码作为模型层。

2,查看

视图层,就是UI界面,用于跟用户进行交互。一般所有的JSP,HTML等页面就是视图层。

3,控制器

控制层,控制层的功能就是将模型和视图层进行关联,做出视图和模型的选择。比如查看主要是显示数据的,但是数据又需要模型去访问,这样的话,查看会先告诉控制器,然后控制器再告诉模型,模型请求完数据之后,再告诉视图。这样查看就可以显示数据了。

具体如下图:

2,登录注册案例帮助理解MVC模式

1,创建MVCDemo的WEB项目,新建的login.jsp的文件

<form action="LoginServlet" method="post">
    		用户:<input type="text" name="uname"><br />
    		密码:<input type="password" name="upwd"/><br />
    		<input type="submit" value="登录">
</form>

2,导入mysql-connector-java-5.1.47.jar到/ WebRoot / WEB-INF / lib路径下,右键Build Path-> Add to Build Path(我这里使用的是MySQL)

3,创建Login.java类

package emove.entity;

public class Login {
	
	private int id;
	private String name;
	private String password;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	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;
	}
	
	public Login(int id, String name, String password) {
		this.id = id;
		this.name = name;
		this.password = password;
	}
	public Login(String name, String password) {
		this.name = name;
		this.password = password;
	}
	public Login() {
	}
	
}

4,创建LoginDao.java,代码如下:

package emove.dao;

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

import emove.entity.Login;

/**
 * 模型层 用于处理 登录 访问数据库
 * 
 * @author E
 *
 */
public class LoginDao {

	private static final String URL = "jdbc:mysql://localhost:3306/test";
	private static final String userName = "xxx";
	private static final String userPassword = "xxx";
	private static final String JDBC = "com.mysql.jdbc.Driver";

	public static int login(Login login) {

		int result = -1;

		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;

		// 登录
		try {
			Class.forName(JDBC);
			con = DriverManager.getConnection(URL, userName, userPassword);

			String sql = "select count(*) from user where uName=? and uPassword=?";
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, login.getName());
			pstmt.setString(2, login.getPassword());
			rs = pstmt.executeQuery();

			if (rs.next()) {
				result = rs.getInt(1);
			}
			if (result > 0) {
				return 1;
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return -1;
		} catch (SQLException e) {
			e.printStackTrace();
			return -1;
		} catch (Exception e) {
			e.printStackTrace();
			return -1;
		} finally {
			try {
				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
				if (con != null)
					con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (Exception e) {
				e.printStackTrace();
			}

		}
		return 0;
	}

}

5,创建LoginServlet文件

package emove.servlet;

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 emove.dao.LoginDao;
import emove.entity.Login;

/**
 * 控制器层
 * 
 * @author E
 *
 */
public class LoginServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//处理登录请求
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("uname");
		String pwd = request.getParameter("upwd");
		
		Login login = new Login(name,pwd);
		
		//调用模型层的登录功能
		int result = LoginDao.login(login);
		
		if(result > 0){
			//成功
//			response.sendRedirect("Welcome.jsp");
			request.getRequestDispatcher("Welcome.jsp").forward(request, response);
		}else if(result == 0){
			//失败
//			response.sendRedirect("login.jsp");
			request.getRequestDispatcher("login.jsp").forward(request, response);
		}else{
			System.out.println("系统异常!");
		}
		
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}


}

注:我这里使用的是Servlet2.5中中,当我创建好LoginServlet文件后,web.xml中文件会自动帮我配置好映射关系这一步至关重要,如果web.xml中文件没有自动配置好,则要手动配置,不然视图层会找不到对应的LoginServlet而报404.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_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>MVCDemo</display-name>
  <servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>emove.servlet.LoginServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

关于小服务程序的映射关系见如下:

如果是Servlet 3.0或以后则使用注解即可:

如图6所示,将项目部署到的Tomcat的上并运行

猜你喜欢

转载自blog.csdn.net/weixin_40516653/article/details/83422162