自定义实现简单Struts

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

猜你喜欢

转载自blog.csdn.net/qq_37575994/article/details/99411954