JSP教程-在JSP中使用MVC模式
MVC 代表模型(Model)、视图(View)和控制器(Controller)。这是一种设计模式,它将业务逻辑、展示逻辑和数据分离。
控制器充当视图和模型之间的接口。控制器拦截所有传入的请求。
模型代表应用程序的状态,即数据。它也可以包含业务逻辑。
视图代表呈现,即用户界面(UI)。
MVC(Model 2)架构的优势
- 导航控制集中化
- 易于维护大型应用程序
JSP中的MVC示例
在这个示例中,我们使用servlet作为控制器,jsp作为视图组件,Java Bean类作为模型。
在这个示例中,我们创建了5个页面:
- index.jsp 一个从用户获取输入的页面。
- ControllerServlet.java 一个充当控制器的servlet。
- login-success.jsp 和 login-error.jsp 文件充当视图组件。
- web.xml 文件用于映射servlet。
文件:index.jsp
<form action="ControllerServlet" method="post">
Name:<input type="text" name="name"><br>
Password:<input type="password" name="password"><br>
<input type="submit" value="login">
</form>
文件:ControllerServlet
package cn.javatiku;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ControllerServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();
String name=request.getParameter("name");
String password=request.getParameter("password");
LoginBean bean=new LoginBean();
bean.setName(name);
bean.setPassword(password);
request.setAttribute("bean",bean);
boolean status=bean.validate();
if(status){
RequestDispatcher rd=request.getRequestDispatcher("login-success.jsp");
rd.forward(request, response);
}
else{
RequestDispatcher rd=request.getRequestDispatcher("login-error.jsp");
rd.forward(request, response);
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
}
文件:LoginBean.java
package cn.javatiku;
public class LoginBean {
private String name,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;
}
public boolean validate(){
if(password.equals("admin")){
return true;
}
else{
return false;
}
}
}
文件:login-success.jsp
<%@page import="cn.javatiku.LoginBean"%>
<p>You are successfully logged in!</p>
<%
LoginBean bean=(LoginBean)request.getAttribute("bean");
out.print("Welcome, "+bean.getName());
%>
文件:login-error.jsp
<p>Sorry! username or password error</p>
<%@ include file="index.jsp" %>
文件: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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
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">
<servlet>
<servlet-name>s1</servlet-name>
<servlet-class>cn.javatiku.ControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>s1</servlet-name>
<url-pattern>/ControllerServlet</url-pattern>
</servlet-mapping>
</web-app>