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的上并运行