Struts2框架

1、struts2概述

1. struts2框架应用javaEE三层结构中web层框架

2. struts2框架在struts1和webwork基础之上发展的一个全新的框架,此处注意struts2struts1用法是完全不一样的

3. struts2解决的问题:在以前执行一个管理系统中的增删改查操作的时候,需要为每一个增删改查操作创建一个Servlet,如果功能很多,需要创建很多的Servlet,这会造成维护的不方便,而在struts2中可以很好的解决。struts2执行过程如下:

 

 

 

 

 

 

 

 

4. struts2版本:struts2里面有很多的小版本

5. web层常见框架

(1)struts2

(2)SpringMVC

2、struts2框架入门

第一步:导入jar

(1)struts包中,在lib中有jar包,不能把这些jar都导入到项目中,因为有一些暂时用不到,导入进去会出错

(2)apps目录里面,这里面放的都是示例程序,找到示例程序,从示例程序里面复制jar包到工程里面

   第二步:创建action

(1)Servlet中,每次访问Servlet的时候,都会执行service方法

(2)现在在struts2中,访问action,每次访问action的时候,都默认执行execute方法-------------配置action类的访问路径

第三步:配置action访问路径

(1)创建struts2核心配置文件,配置文件名称和位置是固定的,位置必须在src下面,名称是struts.xml

(2)引入dtd约束

struts2apps示例程序中src目录下Struts.xml中可以直接把约束复制下来

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

"http://struts.apache.org/dtds/struts-2.3.dtd">

 

 

(3)action的配置

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

<package name="hellodemo" extends="struts-default" namespace="/">

<!--name:访问名称url  -->

<action name="hello" class="com.test.action.HelloAction">

<!-- 配置execute方法的返回值到不同的页面中去,/hello.jsp结果返回到hello.jsp页面中 -->

<result name="ok">/hello.jsp</result>

</action>

</package>

</struts>

 

访问路径:http://localhost:8080/struts2_day01/hello.action

这个时候访问,会报404错误,因为没有配置过滤器

(4)配置struts2过滤器的配置

web.xml文件中配置过滤器

<filter>

        <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

    </filter>

    <filter-mapping>

        <filter-name>struts2</filter-name>

        <url-pattern>/*</url-pattern>过滤所有

    </filter-mapping>

 

使用struts2可以节省许多代码,但是需要写配置文件

 

 

3、struts2基本执行过程

执行图示:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

执行过程中,注意反射部分的代码。

 

4、查看源代码

过滤器:

 

 

1. 过滤器在服务器启动的时候创建,创建过滤器时候执行init()方法

(1)init方法中主要加载配置文件

-----包含自己创建的配置文件和struts2自带的配置文件

**struts.xml

**web.xml

 

 

 

 

5、struts2相关配置(1)Struts2的核心配置文件

1. 名称和位置都是固定的,名称是struts.xml  位置在src下面

 

 

2. 在配置文件中主要三个标签 packageactionresult、标签里面的属性

Package标签

1. 类似于代码包,区别不同的action,要配置action,必须首先写package标签,写了package标签,在package里面才能配置action

2. Package标签属性

(1)name属性

     name属性值跟功能本身没有关系的

     在一个配置文件中可以写多个package标签,name属性值不能相同的

 

(2)extends属性

<package name="hellodemo" extends="struts-default" namespace="/">

   属性值是固定的,structs-default

   写了这个属性值之后,在package里面配置的类具有action功能

 

(3)namespace属性

  ---  namespace属性值和action标签里面的name属性值构成访问路径

 

 

 

 

 

Action标签

1. action标签配置action访问路径

 

2. Action标签属性

(1)name属性

   --namespace属性值和action标签里面的name属性值构成访问路径

   --可以在package标签里面写多个action标签,但是actionname属性值不能相同的

 

(2)class属性

  --action全路径

(3)method属性

action里面默认执行execute()方法,但是在action里面也写了其他的方法,如果让action里面的多个方法执行,使用method进行配置

 

Result标签

1. 根据action的方法返回值,配置到不同的路径里面

 

2. Result标签属性

(1)name属性

--和方法返回值一样

 

 

(2)type属性

   --配置如何到路径中(转发或者重定向)

   --type属性值默认是做转发操作

 

 

 

 

2Struts常量配置

1. struts框架,帮我们实现一部分功能,struts里面有常量,在常量里面封装一部分功能。Stmts2的这些常量大多在默认的配置文件中已经配置好,但根据用户需求的不同,开发的要求 也不同,可能需要修改这些常量值,修改的方法就是在配置文件对常量进行重新配置。

 

2.struts默认的常量位置(记住)

 

 

 

 

3. 修改structs2默认常量值

(1)常用的方式

   struts.xml中进行配置

    <constant name="struts.i18n.encoding" value="UTF-8"></constant>

(2)还有两种方式(了解)

 

<1>src下面创建struts.properties,进行修改。struts.properties文件是一个标准的properties文件,其格式是key-value对,即每个key对应一个 value, keyStruts2框架中的常量,而value则是其常量值。

 

<2>web.xml进行配置,在web.xml文件中通过< imt-param>元素配置常量

 

 

4.介绍几种最常用的常量

Struts.i18n.encoding=UTF-8

(1)表单提交数据到action里面,在action里面可以获取表单提交数据

(2)表单提交数据有中文,有乱码问题,解决方式:

   Post 提交直接设置编码

   Get 提交做编码转换

3)如果在action获取表单通过post方式提交中文,中文乱码问题帮我们解决了,不需要自己处理问题

 

 

6、分模块开发

在实际开发中,我们通常很多人都需要修改同一个配置文件就是struts.xml。因为这个文件是 Stmts2的核心配置文件。而且这个文件一旦改错了一点,那么会导致整个项目都会出现问题,所以 Struts2提供了<include>标签解决这个问题。Stmts2允许将一个配置文件分解成多个配置文件,从而提高配置文件的可读性。Struts2默认只加载src下的struts.xml文件,但一旦通过多个xml文件来配置 Action,就必须通过struts.xml文件来包含其他配置文件。

解决方式:

1. 单独写配置文件,把配置文件引入到核心配置文件中

 

 

<!--不指定路径默认在src下时的方式-->

include file=nstruts-shop.xml/>

<include file="nstruts-user.xml"/>

<include file="nstruts-shoppingcart.xml"/>

<!-- 配置文件在具体包中时的方式 -->

<include file="com/test/action/struts-product.xml">

</struts>

 

 

 

 

7Action编写方式

1. action 编写有三种方式

第一种,创建普通类,这个不继承任何类,不实现任何接口

 

第二种:创建类,实现接口action

 

Action接口位于xwork2包中。这个接口里只定义了 一个execute()方法,该接口的规范规定了 Action处理类应该包含一个execute()方法,该方法返回一 个字符串。除此之外,该接口还定义了 5个字符串常量,它们的作用是统一 execute方法的返回值。接口中提供了 5个己经定义的常量如下

 

success,代表成功

none,代表页面不跳转

error,代表跳转到错误页面

input,数据校验的时候跳转的路径

login,用来跳转到登录页面

 

第三种:创建类,继承类ActionSupport(一般使用)

 

 

 

 

 

ActionSupport类本身实现了Action接口,是Struts2中默认的Action接口的实现类,所以继承ActionSupport 就相当于实现Action 接口。ActionSupport 类还实现了ValidateableValidationAwareTextProviderLocaleProviderSerializable等接口,来为用户提供更多的功能。ActionSupport类中提供了许多默认方法,这些默认方法包括获取国际化信息的方法、数据校验的方法、默认的处理用户请求的方法等。实际上,ActionSupport类是Struts2默认的Action处理类, 如果让开发者的Action类继承该ActionSupport类,则会大大简化Action的开发。

 

 

 

 

8、访问action的方法

1. 有三种方式实现

第一种:使用action标签的method属性,在这个属性里面写执行的action的方法

第二种:使用通配符方式实现

第三种:动态访问实现(一般不用)

2. 错误演示

(1)如果action方法有返回值,在配置文件中没有配置,出现错误

 

 

(2)action里面的方法有返回值,如果有返回值时候,返回值类型必须是String

(3)Action里面的方法可以没有返回值,没有返回值的时候,在result标签中不需要配置

   --把方法写成void

   --让返回值,返回“none

 

 

 

 

* 使用action标签method属性

其实我们学过在〈action〉的标签中有一个属性method,通过method的配置来指定Action中的某个方法执行

1.action方法中编写几个方法

 

3. 使用method进行配置

 

但是这种方式我们会发现,同一个Action类就被配置了很多次,只是修改了后面的method的值。那么能不能配置简单化呢?也就是一个Action类,只配置一次就好了?这个时候我们就需要使 用通配符的配置方式了

 

* 使用通配符实现(重点掌握)

1. action标签里面name属性,name属性值里面写符号 * 星号

(1)*号理解:

       比如访问hello*可以匹配到

       比如访问add *可以匹配到

name属性值里面写符号*

1)执行action里面的add方法,访问book_add,使用book_*可以匹配到,*相当于变成add

 

2)执行action里面的update方法,访问book_update,使用book_*可以匹配到,*相当于变成update

上面两个路径使用book_* 可以匹配到

method属性写*


 

图解:

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/leo1014/p/9929563.html