二、Struts1
一、由来(个人认为):
MVC 模式:web.xml 中,既定义了“显示逻辑”(<welcome-file>),又定义了“业务逻辑”(servlet),使得 MVC 模式不够清晰。
因此,前人创造出了一个新的东东 - struts(依靠一个 struts-config.xml 配置文件实现)。
二、struts 作用:
struts 英译就是架构,那么他就是用来专门处理 action 跳转的 架构。
Struts 由一组相互协作的类(组件)、Servlet 以及 jsp tag lib 组成。
a:相互协作的类(组件):
<ActionServlet>:系统维护的,你不能操作,它主要是根据传入的 action 路径在 ActionMapping 中查找相应的类,并调用它。
<Action>:控制器,主要是从ActionForm中接收页面传进来的数据,然后进行逻辑处理。
<ActionForm>:用来接收页面上表单中的数据。
<ActionMapping>:用来配置每个Action所对应的路径
<ActionForward>:实现跳转,在Action中最后一行语句通常是return mapping.forward()这里传入的值就在ActionForward中设置
注:dtd定义的顺序:
<!ELEMENT struts-config (display-name?, description?, data-sources?, form-beans?, global-exceptions?, global-forwards?, action-mappings?, controller?, message-resources*, plug-in*)>
b:servlet:
替换 web.xml 中的 servlet
c:jsp tag lib:jsp 的标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg"%>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
三、流程:
四、在 struts1 涉及的 MVC
Model:struts 的 ActionForm 封装了用户的请求参数,封装成 ActionForm 对象。
ActionServlet 转发此对象给 Action。
Action 根据 ActionForm 对象里面的参数,进行业务处理,访问数据库等。
View:Struts 提供了标签库,此标签库可以减少脚本的使用。
自定义标签库,还能用 Model 互动。
Controller:系统核心控制器 + 业务逻辑控制器
a. 系统核心控制器:ActionServlet,继承 HttpServlet,负责拦截所有的 Http 请求, 根据用户请求确定是否转给逻辑控制器。
b. 业务逻辑控制器:本身不具备处理能力,用于调用 Action 对应的 Model。
五、个人感觉:
struts,完全充当了 controller 的角色:
1. 接收 View层 传过来的参数。
2. 验证参数的可行性。
3. 验证成功时,调用 action 对应的 model。
4. 为 Model 提供跳转页面。
5. 并为 view 层提供了 taglib 标签库。
六、事例:
1. 设置项目:每个内容什么意思,自行度娘
2. 导入包
一开始导入包的简单的包,然后一直报错:java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException。
然后就按照度娘说的,什么url-pattern有问题啊,或者修改.setting-fact文件啊,都不行。最后就索性把所有的strusts相关包都导进去,就可以了。
如果用marven做项目的话,就比较简单,只要这么写:
3. 修改 web.xml
最简单的 MVC 中 web.xml 配置:
加入 struts1 后,web.xml 配置:
注:<load-on-startup>1</load-on-startup>的意思,请参考http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html
4. 添加 struts-config.xml:
根据1中,default output folder 的 路径为Demo-Struts1\webapp\WEB-INF\classes,
那么 src 下面的所有文件在编译以后,都将放入Demo-Struts1\webapp\WEB-INF\classes,
因此,只要将 struts-config.xml 放到 src 下面就可以。
注:具体各参数,请参考:http://blog.csdn.net/xlgen157387/article/details/39472037
5. 创建上图指定的 class
返回方式:① response.sendRedirect("success.jsp");
此方法可以用request设置参数,然后传递参数到jsp。
② 利用strusts-config.xml中的forward:
return mapping.findForward("success");
此方法不能传递参数,一般用于固定的jsp,比如500.jsp/400.jsp之类。