Java spring mvc 和 struts 的区别是什么?
Spring MVC和Struts都是用于构建Java Web应用程序的MVC框架,它们有一些共同点,但也有一些区别。
Spring MVC:
- 配置: Spring MVC使用注解和XML配置文件进行配置,提供了更灵活的配置方式。
- 灵活性: Spring MVC是Spring框架的一部分,可以与Spring的其他模块(如Spring Core、Spring Security等)集成,提供更全面的功能。
- 测试: Spring MVC容易进行单元测试,因为控制器类通常是POJO(普通的Java对象),而且Spring提供了Mock对象的支持。
- 扩展性: Spring MVC具有良好的扩展性,可以通过拦截器(Interceptors)进行请求处理前、请求处理后的处理。
- View技术: Spring MVC支持多种视图技术,包括JSP、FreeMarker、Thymeleaf等。
Struts:
- 配置: Struts使用XML配置文件进行配置,需要遵循特定的约定,例如
struts.xml
文件。 - 约定大于配置: Struts是一个约定大于配置的框架,使用了一些默认规则,需要按照这些规则来组织代码。
- 测试: Struts的Action类通常需要继承特定的类或实现特定的接口,这可能使单元测试变得稍微复杂一些。
- 扩展性: Struts的扩展性较差,定制化需求相对Spring MVC较为困难。
- View技术: Struts主要使用JSP作为视图技术。
代码示例:
以下是一个简单的Spring MVC和Struts的示例,演示了它们的基本用法。
Spring MVC 示例:
// UserController.java
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;@Controller
public class UserController {@RequestMapping(value = "/user", method = RequestMethod.GET)public String getUser(Model model) {model.addAttribute("username", "John Doe");return "user";}
}
<!-- user.jsp -->
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>User Page</title>
</head>
<body><h1>Welcome, ${username}!</h1>
</body>
</html>
Struts 示例:
// UserAction.java
import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private String username;public String execute() throws Exception {username = "John Doe";return SUCCESS;}public String getUsername() {return username;}
}
<!-- struts.xml -->
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts><package name="default" namespace="/" extends="struts-default"><action name="user" class="UserAction"><result>/user.jsp</result></action></package>
</struts>
在这个示例中,Spring MVC使用注解进行配置,而Struts使用XML配置文件。两者都展示了一个简单的用户页面,但Spring MVC更加灵活,而Struts更加约定大于配置。