我们都知道MVC的框架,M(Model)代表了模型,V(View)代表了视图,C(Controller)控制器。其中最典型的就是使用servlet作为控制器,用JSP做事视图。Struts就是将MVC做了封装来实现其基本功能。那让我们来看一下Struts在这里面究竟是干了什么事情,以至于我们更加深入的理解该框架。
新建一个Javaweb项目,用户的增删改查,来实现简单的MVC过程,同时让初学者了解在一次客户请求中都发生了什么,项目结构图:
其中的控制器:StrutsServlet.java
package com.suo;
import java.io.IOException;
import javax.management.RuntimeErrorException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
* 使用该servlet做做控制模块,控制转向不同的视图
*
*/
public class StrutsServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//获取访问URI
String requestURI= req.getRequestURI();
//获取访问路径
String path= requestURI.substring(requestURI.indexOf("/", 1), requestURI.indexOf("."));
//获取表单提交数据
String name = req.getParameter("name");
//创建业务类
UserService userService=new UserService();
//定义跳转路径
String forward ="";
//根据访问路径,实现视图跳转
if("/servlet/addUser".equals(path)){
userService.addUser(name);
forward="/add_success.jsp";
}else if("/servlet/deleteUser".equals(path)){
userService.deleteUser(name);
forward="/delete_success.jsp";
}else if("/servlet/updateUser".equals(path)){
userService.updateUser(name);
forward="/update_success.jsp";
}else if("/servlet/queryUser".equals(path)){
userService.queryUser(name);
forward="/query_success.jsp";
}else{
throw new RuntimeException("请求失败");
}
req.getRequestDispatcher(forward).forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(req, resp);
}
}
表单提交页面index.jsp
<body>
<form action="servlet/addUser.do" method="post">
<input name="name"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
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_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>strus</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 配置servlet -->
<servlet>
<servlet-name>StrutsServlet</servlet-name>
<servlet-class>com.suo.StrutsServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>StrutsServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
该web项目就实现了一个基本的MVC,但servlet中的讲不同的请求和service处理,以及返回页面都内嵌到代码里,不利于代码的维护,strus就将其公共部分做了提取与封装,方便程序的开发。
下面附上程序代码:点击打开链接