1、Struts较传统MVC两大区别:
- BeanUtils优化;
- 跳转(转发、重定向)灵活
- Struts主要是Servlet封装
2、主要实现思路
- Struts主要体现在控制层里,传统MVC使用Servlet来实现控制层;
- 依旧通过Servlet来实现,需要一个核心控制器;
- 将业务封装在一个XXXXAction类里面,定义需要的业务方法;
- 业务方法需要使用和service方法相同的参数,即request和response,否则拿不到请求参数;
- 业务方法返回类型选择为Object,以便通过判断类型instanceOf()来确定是使用转发还是重定向来进行跳转,例如,如果返回String类型即使用response.rendRedirect(),否则返回的就是request.getRequestDispatcher()对象来进行转发;
- 在Servlet里面实例化Action类,调用业务方法,返回转发的RequestDispatcher对象或者重定向的String对象,并进行相应跳转操作
- 实例化Action类以及指定返回跳转路径,并不是最优,所以可以返回一个路径标记,通过xml或者properties等方式来定义路径等必要信息,再进行反射选择相应的Action类 ,来简化开发过程和增加可维护性
3、关于跳转的转发和重定向几点
重定向:
- 客户端行为,地址栏将修改;
- 利用服务器返回的状态码来实现,response的setStatus可设置,状态码301、302将重新请求资源;
- 适用场景:不同WEB应用程序之间的重定向,特别是要重定向到另外一个WEB站点上的资源的情况,都应该使用HttpServletResponse.sendRedirect方法;
- 路径问题:“/”即整个web站点的根目录
转发:
- 服务端行为,地址栏不修改,共享request、response,效率相对较高;
- 执行到跳转语句即刻跳转,注意资源关闭问题;
- 适用场景:错误页面跳转;访问同一个WEB应用组件,对传递参数进行预处理;
- 路径问题:“/”当前web应用程序的根目录
参考博文:https://blog.csdn.net/liubin5620/article/details/79922692