[关闭]
@Beeder 2017-12-31T21:01:11.000000Z 字数 7120 阅读 531

Struts2框架操作

javaWeb Struts2

上一篇:Hibernate框架

Struts2的操作流程

Web层的框架

    Struts2框架概述:前端控制器模式

Struts2介绍

Struts2控制模式

前端控制器模式

Struts2执行流程

执行流程

Created with Raphaël 2.1.2JSP页面StrutsPrepereAndExecuteFilter过滤器执行一系列拦截器(完成了部分代码)执行到目标Action返回字符串结果页面(result) 页面跳转
    编写的页面,点击超链接,请求提交到服务器端

    请求会先经过Struts2的核心过滤器(StrutsPrepareAndExecuteFilter)
        过滤器的功能是完成了一部分代码功能
        就是一系列的拦截器执行了,进行一些处理工作
        咱们可以在struts-default.xml配置文件中看到有很多的拦截器。可以通过断点的方式来演示

    拦截器执行完后,会根据struts.xml的配置文件找到请求路径,找到具体的类,通过反射的方式让方法执行

下载Struts2

https://struts.apache.org/ -- 官网地址

Struts2包目录

        * apps  -- Struts2框架提供了一些应用
        * libs  -- Struts2框架开发的jar包
        * docs  -- Struts2框架开发文档
        * src   -- Struts2框架源码

导入jar包

  1. //文件上传(依赖common-io)
  2. common-fileupload-1.2.1.jar
  3. //处理IO操作的工具类库
  4. common-io-1.3.2.jar
  5. //Freemarker模板语言支持类库(视图展现技术)
  6. freemarker-2.3.15.jar
  7. //OGNL表达式语言类库(对象图形导航语言,用于做数据操作 )
  8. ognl-3.7.3.jar
  9. //struts2框架核心包
  10. struts2-core-2.3.8.1.jar
  11. //xwork的核心类库
  12. xwork-core-2.1.6.jar
  13. //分析、编辑和创建Java字节码的类库
  14. javassist-3.11.0GA.jar
  15. //ASM是一个Java字节码处理框架,使用它可以动态生成stub类和proxy类,在Java虚拟机装载类之前动态修改类的内容
  16. asm-commons-3.3.jar
  17. asm-3.3.jar
  18. //包含了一些数据类型工具类,是java.lang.*的扩展
  19. commons-lang3-3.1.jar

编写jsp

  1. <h3>Struts2的入门程序</h3>
  2. <a href="${ pageContext.request.contextPath }/hello.action">Struts2入门程序</a>

配置文件

配置web.xml

路径:\WebContent\WEB-INF\web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  3. <display-name>day32</display-name>
  4. <!-- 配置核心的过滤器 -->
  5. <filter>
  6. <!--filter-name命名不影响使用-->
  7. <filter-name>struts2</filter-name>
  8. <!--控制器的类的路径和名称-->
  9. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  10. </filter>
  11. <filter-mapping>
  12. <filter-name>struts2</filter-name>
  13. <!--拦截内容-->
  14. <url-pattern>/*</url-pattern>
  15. </filter-mapping>
  16. <welcome-file-list>
  17. <welcome-file>index.html</welcome-file>
  18. <!--省略代码……-->
  19. </welcome-file-list>
  20. </web-app>

StrutsPrepareAndExecuteFilter过滤器加载顺序

  1. //加载org/apache/struts2/default.properties
  2. init_DefaultProperties();
  3. //加载struts-default.xml,struts-plugin.xml,struts.xml
  4. init_TraditionalXmlConfigurations();
  5. //加载自定义的struts.properties
  6. init_LegacyStrutsProperties();
  7. //加载用户自定义配置提供者
  8. init_CustomConfigurationProviders();
  9. //加载web.xml
  10. init_FilterInitParameters() ;

struts.properties.xml配置文件

xwork-core-2.1.6.jar中org/apache/struts2/目录

        用于定义常量,不修改

struts-default.xml配置文件

xwork-core-2.1.6.jar目录下

    配置核心功能,配置拦截器<interceptor></interceptor>

编写Struts的配置文件

Struts.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6. <!-- 编写常量 struts-default.xml中默认配置value="ation,,"
  7. <constant name="struts.action.extension" value="do,,"></constant>
  8. -->
  9. <!-- 开启动态方法访问 -->
  10. <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
  11. <!-- 包结构 -->
  12. <!--extends="struts-default":继承struts-default.xml-->
  13. <package name="demo1" namespace="/" extends="struts-default">
  14. <!-- 配置Action -->
  15. <action name="hello" class="com.itheima.action.HelloAction" method="sayHello">
  16. <!-- 配置跳转的页面,路径的写法:在Struts2框架中,不管是转发还是重定向,都不用写项目名 -->
  17. <result name="ok">/demo1/suc.jsp</result>
  18. </action>
  19. <!-- POJO类的方式 -->
  20. <action name="demo1Action" class="com.itheima.action1.Demo1Action"/>
  21. <!-- 实现Action接口的方式 -->
  22. <action name="demo2Action" class="com.itheima.action1.Demo2Action">
  23. <result name="login">/demo1/suc.jsp</result>
  24. </action>
  25. <!-- 继承ActionSupport类的方式 -->
  26. <action name="demo3Action" class="com.itheima.action1.Demo3Action"/>
  27. </package>
  28. <!-- 演示Action的访问, -->
  29. <package name="demo2" namespace="/" extends="struts-default">
  30. <!-- 传统方式 -->
  31. <action name="saveCust" class="com.itheima.action2.CustomerAction" method="save"/>
  32. <action name="delCust" class="com.itheima.action2.CustomerAction" method="delete"/>
  33. <!-- 通配符的方式 -->
  34. <action name="linkman_*" class="com.itheima.action2.LinkmanAction" method="{1}">
  35. <result name="saveOK">/demo1/suc.jsp</result>
  36. <result name="delOK">/demo1/suc.jsp</result>
  37. </action>
  38. <!-- 配置动态方法访问 -->
  39. <action name="user" class="com.itheima.action2.UserAction"/>
  40. </package>
  41. <!-- 引入其他的配置文件 -->
  42. <include file="com/itheima/user/struts_user.xml"/>
  43. </struts>

编写Action类

Action类三种实现方式

Action类是一个POJO(Plain Ordinary Java Object)类
    POJO类:没有继承某个类,没有实现接口,就是POJO的类
  1. /*
  2. 方法要求:
  3. 方法必须为public
  4. 方法必须有返回值,且为String
  5. 方法不能带有参数
  6. 页面跳转:
  7. 1、return “字符串”
  8. 2、在Struts.xml配置文件中,配置跳转的页面
  9. */
  10. public class HelloAction {
  11. public String sayHello(){
  12. // 编写代码 接收请求的参数
  13. System.out.println("Hello Struts2!!");
  14. return "ok";
  15. }
  16. /**
  17. * 演示的method方法的默认值
  18. * @return
  19. */
  20. public String execute(){
  21. System.out.println("method方法的默认值是execute");
  22. System.out.println("这是一个POJO类...");
  23. //return null代表不跳转
  24. return null;
  25. }
  26. }
ation类实现Action接口
  1. //Action接口中定义5个静态常量
  2. SUCCESS //成功.
  3. xINPUT //用于数据表单校验.如果校验失败,跳转INPUT视图.
  4. LOGIN //登录.
  5. ERROR //错误.
  6. NONE //页面不转向.
  1. public class Demo2Action implements Action{
  2. public String execute() throws Exception {
  3. System.out.println("Demo2Action实现了Action的接口");
  4. // 表示页面不跳转
  5. return NONE;
  6. }
  7. }
继承ActionSupport类
  1. public class Demo3Action extends ActionSupport{
  2. private static final long serialVersionUID = 2183101963251216722L;
  3. public String execute() throws Exception {
  4. System.out.println("Demo3Action继承了ActionSupport类...");
  5. return NONE;
  6. }
  7. }

Struts2操作分析之Action的访问

传统访问方式

web页面

demo.jsp

  1. <h3>传统的配置文件的方式</h3>
  2. <a href="${ pageContext.request.contextPath }/saveCust.action">保存客户</a>
  3. <a href="${ pageContext.request.contextPath }/delCust.action">删除客户</a>

status2.xml配置

status2.xml

  1. <!-- 传统方式 -->
  2. <action name="saveCust" class="com.itheima.action2.CustomerAction" method="save"/>
  3. <action name="delCust" class="com.itheima.action2.CustomerAction" method="delete"/>

ation类访问

CustomerAction.java

  1. public class CustomerAction extends ActionSupport{
  2. // 保存客户
  3. public String save(){
  4. System.out.println("保存客户...");
  5. return NONE;
  6. }
  7. // 删除客户
  8. public String delete(){
  9. System.out.println("删除客户...");
  10. return NONE;
  11. }
  12. }

通配符访问方式

web页面

demo.jsp

  1. <h3>通配符的方式(应用比较多)</h3>
  2. <a href="${ pageContext.request.contextPath }/linkman_save.action">保存联系人</a>
  3. <a href="${ pageContext.request.contextPath }/linkman_delete.action">删除联系人</a>

status2.xml配置

  1. <!-- 通配符的方式 -->
  2. <!--linkman_*:匹配web页面ation-->
  3. <action name="linkman_*" class="com.itheima.action2.LinkmanAction" method="{1}">
  4. <result name="saveOK">/demo1/suc.jsp</result>
  5. <result name="delOK">/demo1/suc.jsp</result>
  6. </action>

ation类访问

  1. public class LinkmanAction extends ActionSupport{
  2. private static final long serialVersionUID = -6462671346088624621L;
  3. public String save(){
  4. System.out.println("保存联系人...");
  5. return "saveOK";
  6. }
  7. public String delete(){
  8. System.out.println("删除联系人...");
  9. return "delOK";
  10. }
  11. }

动态方法访问方式

web页面

demo.jsp

  1. <h3>动态方法访问的方式</h3>
  2. <!--status2.xml中constant的name+!+java方法-->
  3. <a href="${ pageContext.request.contextPath }/user!save.action">保存用户</a>
  4. <a href="${ pageContext.request.contextPath }/user!delete.action">删除用户</a>

status2.xml配置

  1. <!-- 开启动态方法访问 -->
  2. <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
  3. <!-- 配置动态方法访问 -->
  4. <action name="user" class="com.itheima.action2.UserAction"/>

ation类访问

  1. public class UserAction extends ActionSupport{
  2. public String save(){
  3. System.out.println("保存用户...");
  4. return NONE;
  5. }
  6. public String delete(){
  7. System.out.println("删除用户...");
  8. return NONE;
  9. }
  10. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注