下面我将详细讲解“JavaWeb框架MVC设计思想详解”的完整攻略。
下面我将详细讲解“JavaWeb框架MVC设计思想详解”的完整攻略。
什么是MVC设计思想
MVC是Model View Controller的缩写,是一种设计模式。在MVC模式中,应用被分为三个核心部件:模型(Model)、视图(View)和控制器(Controller)。这三个部件各自有着自己清晰的职责:
- 模型(Model):负责数据的管理和存储,提供数据查询、添加、修改、删除等操作。
- 视图(View):负责数据的展示和用户交互,可以是HTML页面、GUI窗口等。
- 控制器(Controller):负责业务逻辑的控制,接收用户请求并决定调用哪个模型进行处理,再将处理完的结果返回给视图进行展示。
MVC的优点
- 增强了应用程序的可维护性:由于MVC模式下,代码分离清晰,每个部分各司其职,易于修改和升级,方便开发人员对应用程序进行修改和扩展。
- 方便团队协作:MVC模式下,开发人员可以分别负责模型、视图、控制器不同的部分,各司其职,便于团队协作和分工。
- 提升了可重用性:由于MVC模式下,模型、视图、控制器各自独立,各部分代码可以相互独立,方便进行组合和重复利用。
MVC的应用
在JavaWeb开发中,MVC模式被广泛地应用在各种框架中,比如Spring MVC、Struts2等。下面以Spring MVC为例,介绍MVC的应用过程。
- 定义模型
public class User {
private Integer id;
private String name;
private Integer age;
// getter和setter方法省略
}
- 定义控制器
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/user/list")
public ModelAndView list() {
List<User> userList = userService.getUserList();
ModelAndView mv = new ModelAndView("user/list");
mv.addObject("userList", userList);
return mv;
}
}
- 定义视图
<table>
<thead>
<tr>
<th>ID</th>
<th>名称</th>
<th>年龄</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<c:forEach items="${userList}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td><a href="${pageContext.request.contextPath}/user/${user.id}">编辑</a></td>
</tr>
</c:forEach>
</tbody>
</table>
- 定义路由
<beans>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="userController" class="com.example.controller.UserController" />
<mvc:annotation-driven>
<mvc:view-controller path="/" view-name="index" />
</mvc:annotation-driven>
<mvc:resources mapping="/static/**" location="/static/" />
<mvc:default-servlet-handler />
<context:component-scan base-package="com.example.controller" />
</beans>
在路由配置中,<context:component-scan>
会扫描指定目录下所有的@Controller注解的类,并注册为Spring Bean。而<mvc:annotation-driven>
则是开启使用基于注解的@RequestMapping路由方式。
- 启动应用
启动应用后,访问http://localhost:8080/user/list
网址,会显示出用户列表。
以上是MVC设计思想在Spring MVC框架中的应用过程。
另外,MVC设计思想在Struts2框架中的应用过程与Spring MVC类似。以Struts2为例:
- 定义模型
public class User {
private Integer id;
private String name;
private Integer age;
// getter和setter方法省略
}
- 定义控制器
public class UserController extends ActionSupport {
private List<User> userList = new ArrayList<User>();
private UserService userService;
public String list() {
userList = userService.getUserList();
return SUCCESS;
}
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
- 定义视图
<table>
<thead>
<tr>
<th>ID</th>
<th>名称</th>
<th>年龄</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<s:iterator value="userList">
<tr>
<td><s:property value="id" /></td>
<td><s:property value="name" /></td>
<td><s:property value="age" /></td>
<td><a href="${pageContext.request.contextPath}/user/edit?id=<s:property value='id' />">编辑</a></td>
</tr>
</s:iterator>
</tbody>
</table>
- 定义路由
<beans>
<bean id="userService" class="com.example.service.UserServiceImpl" />
<bean id="userController" class="com.example.controller.UserController">
<property name="userService" ref="userService" />
</bean>
<constant name="struts.devMode" value="false" />
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.objectFactory" value="spring" />
<package name="user" extends="struts-default">
<action name="list" class="com.example.controller.UserController" method="list">
<result name="success">/WEB-INF/views/user/list.jsp</result>
</action>
</package>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
</beans>
在路由配置中,<package>
定义了访问的路径和调用的控制器方法。同时,也可以使用注解方式来实现路由。
- 启动应用
启动应用后,访问http://localhost:8080/user/list
网址,会显示出用户列表。
以上是MVC设计思想在Struts2框架中的应用过程。
本文标题为:JavaWeb框架MVC设计思想详解
基础教程推荐
- SpringBoot Session接口验证实现流程详解 2023-05-19
- 浅谈jsp九大内置对象及四个作用域 2023-08-01
- jsp中自定义Taglib详解 2023-08-02
- java的Builder原理和实现详解 2023-08-10
- 使用自定义Json注解实现输出日志字段脱敏 2023-08-10
- Java泛型与注解全面分析讲解 2023-04-23
- 详解Java如何优雅的使用装饰器模式 2023-05-18
- Java 控制台输入语句用法介绍 2023-10-08
- Java深入讲解Bean作用域与生命周期 2023-01-18
- Java中Redis的监听器 2023-11-09