Struts2笔记1

一.简介

1.作用于web层:Struts2是一种基于MVC模式的轻量级Web框架;

2.各文件夹简介:

?    apps:该文件夹存用于存放官方提供的Struts2示例程序,这些程序可以作为学习者的学习资料,可为学习者提供很好的参照。各示例均为war文件,可以通过zip方式进行解压。

?    docs:该文件夹用于存放官方提供的Struts2文档,包括Struts2的快速入门、Struts2的文档,以及API文档等内容。

?    lib:该文件夹用于存放Struts2的核心类库,以及Struts2的第三方插件类库。

?    src:该文件夹用于存放该版本Struts2框架对应的源代码。

3.基础jar包说明

二.struts2环境搭建

1.下载struts2开发包,Struts2的官网: https://struts.apache.org/

2.拷贝struts2必备jar包到web工程的lib目录

3.在类的根路径下创建一个名称为struts.xml的文件,并导入约束

  1  <?xml version="1.0" encoding="UTF-8"?>
  2      <!-- 导入约束:
  3         约束的位置:在struts2的核心jar包中,struts2-core-2.3.24.jar中包含一个名称为:
  4                     struts-2.3.dtd的约束文件-->
  5      <!DOCTYPE struts PUBLIC
  6          "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  7          "http://struts.apache.org/dtds/struts-2.3.dtd">
  8      <struts>

</struts>

4.在web.xml配置struts2的核心控制器(一个过滤器)

  1     <?xml version="1.0" encoding="UTF-8"?>
  2     <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3          xmlns="http://java.sun.com/xml/ns/javaee"
  4          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  5         id="WebApp_ID" version="2.5">
  6          <display-name>day01struts2template</display-name>
  7
  8          <!-- 配置struts2的核心控制器:一个过滤器 -->
  9          <filter>
 10                 <filter-name>struts2</filter-name>
 11              <filter-class>
 12              org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
 13              </filter-class>
 14          </filter>
 15          <filter-mapping>
 16              <filter-name>struts2</filter-name>
 17              <url-pattern>/*</url-pattern>
 18         </filter-mapping>
 19
 20          <welcome-file-list>
 21              <welcome-file>index.html</welcome-file>
 22          </welcome-file-list>
 23      </web-app>

5.验证搭建成功与否:把应用部署到tomcat中,启动tomcat,不报异常则表示搭建成功

三.执行过程

1.执行时序:

2.内部执行流程:

四.struts2配置文件

1.struts2中提供了6个配置文件。tomcat启动服务加载我们的应用时,就加载struts2的配置文件。

他们的加载顺序为:default.properties >> struts-default.xml >>  strtuts-plugin.xml >> struts.xml >> struts.properties >> web.xml

注意:

(1))Struts2提供了两种配置的方式。一种是key=value的方式,即使用.properties文件。另一种是xml文件配置。我们推荐使用xml文件(它能描述层级关系)。

(2)当多个配置文件中,有相同的参数,后加载的会把前面的值给覆盖了。

2.struts2中的常用常量:常量定义在了default.properties配置文件中,体现形式都是key=value

3.struts.xml中的标签

(1)constant标签:用于修改struts2中的常量;属性包括name:指定常量的key,value:指定常量的值;

(2)package标签:在struts2的配置文件中引入了面向对象思想,使用了分包管理。易于管理动作类。便于模块化开发动作类。
     a.name:包的名称。必须写。且必须唯一。
     b.extends:一般情况下需要继承struts-default包,但不是必须的,不过如果不继承的话将无法使用struts2提供的核心功能,struts-default.xml中定义着struts-default这个包
         。而struts-default.xml是在我们的struts.xml加载之前加载。
     c.abstract:把包声明为抽象包,抽象包就是用来被继承的。只要是没有<action>元素的包,就可以声明为抽象包。
     d.namespace:名称空间。它的作用是把访问的URL按照模块化来管理。
                 名称空间的写法:必须以/开头;后面可以是字母和数组的组合,也可只有字母;如果有数字的话,数字不能作为/后面的第一个字符。
                 当我们指定了名称空间之后,访问的URL就变成了:名称空间+action标签的name属性取值
                       例如:/n1/hello.action
                           /customer/addCustomer.action
                   名称空间的默认值是:""(struts2官方文档中提供的)

(3)action标签:用于建立动作名称和动作类以及动作方法的对应关系.
     a.name:指定的动作名称。和页面中url后面保持一致。注意此处不能后缀。动作名称必须唯一。
     c.class:指定的是动作类的全限定类名。
     d.method:指定的是动作方法名称.

举例:

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <!-- 导入dtd约束 -->
  3 <!DOCTYPE struts PUBLIC
  4     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  5     "http://struts.apache.org/dtds/struts-2.3.dtd">
  6 <struts>
  7     <constant name="struts.devMode" value="true"></constant>
  8     <constant name="struts.action.extension" value="action,,"></constant>
  9
 10     <package name="p1" extends="struts-default" abstract="">
 11         <action name="sayHello" class="huguangqinj.com.cnblogs.test.Test" method="sayHello">
 12             <result name="success">/success.jsp</result>
 13         </action>
 14
 15         <action name="hello2" class="huguangqinj.com.cnblogs.test.Test02" method="hello">
 16             <result name="success">/success.jsp</result>
 17         </action>
 18     </package>
 19 </struts>

五.动作类创建的三种方式:

1.无侵入式创建(即创建一个普通的类,实际开发中基本不用)

  1     /**
  2      * 我们把动作类中的具有特定编写规则的方法叫做动作方法。 规则是:
  3          1、访问修饰符必须是public;
  4          2、方法的返回值必须是String;
  5      *     3、方法的参数列表必须是空的;
  6      */
  7
  8         public class Test {
  9              public String sayHello() {
 10                  return "success";
 11              }
 12          }
 13 

2.实现action接口(实际开发中也不常用)

  1     public class Hello2Action implements Action{
  2
  3         @Override
  4          public String execute() throws Exception {
  5              System.out.println("Hello2Action的execute方法执行了............");
  6              return ERROR;
  7          }
  8      }
  9 

注:默认的动作方法是:execute(),所以可以不指定method属性
     <action name="hello2" class="huguangqinj.com.cnblogs.test.Hello2Action">
             <result name="success" type="dispatcher">/success.jsp</result>
     </action>
     Action接口中的常量:
         SUCCESS:一般多用于成功;
         ERROR:一般多用于动作方法执行失败;
         LOGIN:一般多用于返回登录页面;
         NONE:一般用于不返回任何结果视图,和return null作用是一样的;
         INPUT:一般多用于数据回显,也是struts2中数据回显时的默认返回值。

3.继承Action接口的实现类ActionSupport(最为常用)

  1     public class Hello3Action extends ActionSupport{
  2         @Override
  3         public String execute() throws Exception {
  4              return SUCCESS;
  5          }
  6      }
  1  <action name="hello3" class="huguangqinj.com.cnblogs.test.Hello3Action">
  2          <result name="success" type="dispatcher">/success.jsp</result>
  3      </action>

注:
     通过struts-default.xml中我们知道默认的动作类是ActionSupport,所以如果实现该类的execute方法,则可以不用指定class和method属性

  1  <action name="defaultAction">
  2          <result name="success" type="dispatcher">/success.jsp</result>
  3      </action>

六.struts.xml文件中<action>配置方式:

1.原始全匹配方式

2.单一通配符

3.多通配符

4.动态方法调用

举例:

动作类程序:

  1 public class UserAction extends ActionSupport {
  2
  3     public String addUser(){
  4         System.out.println("添加了用户");
  5         return SUCCESS;
  6     }
  7     public String updateUser(){
  8         System.out.println("更新了用户");
  9         return SUCCESS;
 10     }
 11     public String deleteUser(){
 12         System.out.println("删除了用户");
 13         return SUCCESS;
 14     }
 15     public String findUser(){
 16         System.out.println("查询了用户");
 17          return SUCCESS;
 18      }
 19  }
 20 

1.原始全匹配方式

  1 <package name="user" extends="struts-default" namespace="/user" >
  2      <action name="addUser" class="huguangqinj.com.cnblogs.test.UserAction" method="addUser">
  3              <result name="success">/success.jsp</result>
  4      </action>
  5      <action name="updateUser" class="huguangqinj.com.cnblogs.test.UserAction" method="updateUser">
  6          <result name="success">/success.jsp</result>
  7      </action>
  8      <action name="deleteUser" class="huguangqinj.com.cnblogs.test.UserAction" method="deleteUser">
  9          <result name="success">/success.jsp</result>
 10      </action>
 11      <action name="findUser" class="huguangqinj.com.cnblogs.test.UserAction" method="findUser">
 12          <result name="success">/success.jsp</result>
 13      </action>
 14  </package>

页面(index.jsp)访问方式:

  1     <a href="${pageContext.request.contextPath}/addUser.action">添加用户</a>
  2      <a href="${pageContext.request.contextPath}/updateUser.action">修改用户</a>
  3      <a href="${pageContext.request.contextPath}/deleteUser.action">删除用户</a>
  4      <a href="${pageContext.request.contextPath}/findUser.action">查询用户</a>

2.单一通配符

  1 <package name="user" extends="struts-default">
  2      <action name="*" class="huguangqinj.com.cnblogs.test.UserAction" method="{1}">
  3          <result name="success">/success.jsp</result>
  4      </action>
  5  </package>

注:页面访问方式和Action类中的方法不变

3.多通配符

  1 <package name="user" extends="struts-default">
  2     <action name="*_*" class="huguangqinj.com.cnblogs.test.{2}Action" method="{1}{2}">
  3          <result name="success">/success.jsp</result>
  4      </action>
  5  </package>

页面访问方式(有变动):

  1    <a href="${pageContext.request.contextPath}/add_User.action">添加用户</a>
  2      <a href="${pageContext.request.contextPath}/update_User.action">修改用户</a>
  3      <a href="${pageContext.request.contextPath}/delete_User.action">删除用户</a>
  4      <a href="${pageContext.request.contextPath}/find_User.action">查询用户</a>

Action类中的方法不变。

4.动态调用

  1 <!-- 开启动态方法调用 -->
  2 <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
  3 <package name="user" extends="struts-default">
  4      <action name="user" class="huguangqinj.com.cnblogs.test.UserAction" >
  5          <result name="success">/success.jsp</result>
  6      </action>
  7  </package>

页面访问方式:

  1     <a href="${pageContext.request.contextPath}/user!addUser.action">添加用户</a>
  2      <a href="${pageContext.request.contextPath}/user!updateUser.action">修改用户</a>
  3      <a href="${pageContext.request.contextPath}/user!deleteUser.action">删除用户</a>
  4      <a href="${pageContext.request.contextPath}/user!findUser.action">查询用户</a>

Action类中的方法不变。

时间: 2024-09-29 21:03:48

Struts2笔记1的相关文章

Struts2笔记03——架构(转)

原始内容:https://www.tutorialspoint.com/struts_2/basic_mvc_architecture.htm 从一个比较高的层次来看,Struts2是一个pull-MVC(或者MVC2)框架. Struts2的 Model-View-Controller 模式通过以下五个核心组件实现: Actions Interceptors Value Stack / OGNL Results / Result types View technologies Struts2和

struts2笔记11-OGNL

1.OGNL Object-Graph Navigation Language,对象-图 导航语言,可以方便的操作struts2值栈对象 2.对象栈操作方法 (1)action普通属性的访问方法 <s:property value="[n].pName"/> 从对象栈第n个对象开始查找pName属性的值: <s:property value="[0].pName"/>,表示从栈顶对象开始查找,而从栈顶对象开始查找又可以省略索引: <s:

Struts2笔记——11.文件下载

Struts2提供了stream结果类型,是专门用于支持文件下载功能的. 实现文件下载的action类 这个类与普通action实现类的唯一区别就是,这个action类需要提供一个返回InputStream的方法.该方法是被下载文件的入口.代码如下.如果想要实现控制下载等一系列其他的功能,只需要在execute方法中实现即可. public class download extends ActionSupport { private String inputPath; public String

Struts2笔记——1.常规配置

Struts2应用的开发步骤 导入必要的包 通过MyEclipse对项目导入Struts2包,一般只需要导入core这个包就可以.如果要想手动导入,则需要将commons-logging, freemarker, ognl, struts2-core, xwork-core, commons-fileupload, jacassist, commons-long3这几个包复制到web-inf下的lib文件夹下.或者直接使用MyEclipse自带的增加Struts2的capacities的方法,选

Struts2笔记——2.Action的实现、配置

实现Action Struts2中,action负责对用户请求的处理,因此它是整个应用的控制器,也是整个应用的核心.而对开发者来说,他们需要提供大量的action类.相对于struts1而言,struts2的浸入性更低,因为它的action无需继承任何父类或者接口,仅仅是一个普通的POJO(但是应该包括一个无参数的execute方法).struts2通常直接使用action来封装http请求参数(可以理解为表单中的参数,如username,password等),因此在对应的action类中,应该

Struts2笔记——3.配置处理结果

action只是一个控制器,真正为客户端呈现处理结果的是jsp文件.而action的工作,是要在xml中配置,在特定的情况下返回特定的jsp页面.action的java类中返回的是String类型,而它仅仅是一个逻辑处理结果,或者说它只是一个代号.只有在xml中配置了逻辑结果与物理结果的映射关系,jsp页面才会作为response呈现.其实Struts2支持多种结果映射,因此物理结果资源可以是jsp,也可以是另一个action链中的另一个action.result元素起到了一个路标的作用. 配置

Struts2笔记——4.异常处理

我们希望当程序出现特定的异常,就跳转到特定的页面.并且我们希望捕获异常,处理异常的代码出现在一个特定的文件中.由于Action接口能够抛出所有异常,因此重写该方法时无需任何异常处理,直接丢给Struts2框架就好.框架会根据xml文件配置的异常映射,转入到指定的视图资源.通过此方法,action中无需任何异常捕获,仅仅需要操作struts.xml.使用该机制需要打开异常映射功能,因此需要一个拦截器(默认的叫exception),而我们发现在default.xml中已经为我们打开了. 声明式异常捕

Struts2笔记——6.国际化

Struts2的国际化是建立在java的国际化基础上的.通过提供不同国家或者语言环境的消息资源,然后通过ResourceBundle加载指定Locale对应的资源文件,再获取该资源文件中的指定key对应的消息.Struts2框架对这一过程进行了进一步的封装,简化了应用程序的国际化.它可以为jsp,Action,全局范围提供不同的国际化资源,因此维护的时候可以分开维护.Struts2的国际化可以按照以下步骤进行:加载国际化资源文件.输出国际化. action范围.包范围的国际化资源会被系统自动加载

struts2笔记(2)

Struts2 中, HTML 表单将被直接映射到一个 POJO,通过params拦截器,类中定义对应属性,及对应set方法即可. params拦截器会把请求参数的值赋给栈顶对象对应的各个属性,如果栈顶对象没有对应属性,则往下找下一个对象对应的属性. 如果已经有了一个javabean,表单传过来了bean的属性,就不需要再action中再写一遍bean的每个属性来赋值了,可以直接写一个bean的变量,通过ModelDriven拦截器,如果 Action 类实现了 ModelDriven 接口,该