Struts1和Struts2的区别
什么是Struts1和Struts2
- Struts1是一个基于MVC模式的Web应用框架,由Apache组织开发和维护,是早期Web开发中使用较为广泛的框架之一。
- Struts2,原名WebWork,是Struts1的升级版,也是一个基于MVC模式的Web应用框架,由Apache组织维护。
Struts1和Struts2的主要区别
-
架构设计
-
Struts1的核心控制器是ActionServlet,每个请求对应一个Servlet线程,由于Servlet存在线程安全问题,因此需要通过单例模式来解决。Struts1的控制器和Model之间通过ActionForm进行数据传递。
-
Struts2的核心控制器是FilterDispatcher,采用新的拦截器(Interceptor)机制代替了ActionForm,实现了与控制器分离,并且将Action和业务逻辑分离,使得代码复用更加方便。
-
请求处理
-
Struts1的请求处理通过ActionServlet实现,而请求处理时需要每次新建一个线程处理请求,因此相对而言会消耗较多的系统资源。
-
Struts2的请求处理通过拦截器(Interceptor)实现,可以采用多线程处理请求,处理效率较高。
-
标签库
-
Struts1主要提供了适用于JSP页面的标签库,如html、bean、logic以及template等。这些标签库主要用于简化Java Servlet的编写,但缺点是可扩展性不是很好。
-
Struts2采用OGNL(Object-Graph Navigation Language)技术,通过EL表达式来访问JavaBean,标签库丰富,功能强大,而且扩展性也很好。
-
编程风格和实现思路
-
Struts1采用了命令模式(Command Pattern)和模板模式(Template Pattern)的编程风格。
- Struts2则采用了拦截器(Interceptor)的思想,并基于AOP(面向切面编程)实现。这使得代码的可读性和可维护性都得到了很大的提高。
示例一
// Struts1示例:一个简单的登录功能实现
public class LoginForm extends ActionForm{
private String username;
private String password;
// getters and setters
}
public class LoginAction extends Action{
public ActionForward execute(
ActionMapping mapping,ActionForm form,
HttpServletRequest request,HttpServletResponse response)
throws Exception {
LoginForm loginForm = (LoginForm)form;
String username = loginForm.getUsername();
String password = loginForm.getPassword();
if("admin".equals(username) && "admin".equals(password)){
// 登录成功,转到欢迎页面
return mapping.findForward("success");
}else{
// 登录失败,转到登录页面
return mapping.findForward("failure");
}
}
}
// Struts2示例:一个简单的登录功能实现
public class LoginAction extends ActionSupport{
private String username;
private String password;
// getters and setters
public String execute(){
if("admin".equals(username) && "admin".equals(password)){
// 登录成功,转到欢迎页面
return SUCCESS;
}else{
// 登录失败,转到登录页面
return INPUT;
}
}
}
以上两个示例分别演示了Struts1和Struts2实现一个简单的登录功能所需的代码量和风格差异。可以看到,Struts2通过采用注解和拦截器机制,使得代码更加简洁易懂。
示例二
<!-- Struts1配置示例 -->
<action name="list" class="com.example.ListAction">
<result name="success">/list.jsp</result>
</action>
<action name="show" class="com.example.ShowAction">
<result name="success">/show.jsp</result>
</action>
<!-- Struts2配置示例 -->
<package name="example" extends="struts-default">
<action name="list" class="com.example.ListAction">
<result name="success">/list.jsp</result>
</action>
<action name="show" class="com.example.ShowAction">
<result name="success">/show.jsp</result>
</action>
</package>
以上两个示例分别演示了Struts1和Struts2配置Action所需的XML语法格式的差异。可以看到,Struts2通过采用Package的概念,使得配置更加清晰易懂。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts1和struts2的区别_动力节点Java学院整理 - Python技术站