Struts2入门介绍(二)
一、Struts执行过程的分析。
当我们在浏览器中输入了网址http://127.0.0.1:8080/Struts2_01/hello.action的时候,Struts2做了如下过程:
1、Struts2首先使用过滤器,拦截我们的URL请求,以下的过程全部在过滤器中进行。
2、获得请求的路径,然后截取Action的名字,本示例中会截取字符串"hello"。
3、在src目录下找到struts.xml文件,使用dom4j解析该文件,得到里面的数据。
4、用字符串"hello"去struts.xml文件中匹配action标签中的name值。
5、匹配到了action中的name值,然后去查找该action标签中的class属性,得到该action的全路径。
6、使用反射方法调用该action中的hello方法,反射代码如下。
Class calzz = Class.forName("com.jack.action.HelloAction1");
Method m = calzz.getMethod("hello",String.class);
m.invoke(calzz.newInstance());
7、得到action的返回值。然后去action的result标签中匹配name属性的值。
8、匹配成功后,跳转到result标签中的配置的路径中去。
二、Struts2常量的配置
1、如何查看struts2的常量有哪些
(1)在struts2-core-2.3.24.jar包下面有一个default.propreties文件,该文件中保存了所有的常量

2、Struts2的常量配置有三种方式
1、在struts.xml的<struts></struts>标签中配置
<!--
constant标签用来配置常量
name属性的值:default.properties文件中的常量名称。
value属性的值:要配置的常量的值
-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
2、在src下面创建struts.properties文件,在里面进行配置
# struts.locale=en_US
struts.i18n.encoding=UTF-8 ### valid values are: name, type, auto, and constructor (name is the default)
struts.objectFactory.spring.autoWire = name struts.objectFactory.spring.useClassCache = true struts.objectFactory.spring.autoWire.alwaysRespect = false struts.objectFactory.spring.enableAopSupport = false struts.multipart.parser=jakarta
struts.multipart.saveDir=
struts.multipart.maxSize=2097152
3、在web.xml中进行配置
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
三、分模块开发
当一个项目有多人进行开发时,可以每个人都写一个配置文件,然后通过引入的方式,将其引入struts.xml文件中。
(1)在Action包下面建一个hello.xml文件写入配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入dtd约束 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<!--
constant标签用来配置常量
name属性的值:default.properties文件中的常量名称。
value属性的值:要配置的常量的值
-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!--
配置package标签:该标签类似于Java中的包,Struts标签中可以有多个package标签
这些package标签的name属性的值必须不同
name属性的值:这个名称可以随意起名,它表示一个包名,用来区分不同的package
extends属性的值:这个属性的值是固定的,其值为“struts-default”,只有在此配置了
这个属性,该类采有action的功能,类似于Java中的继承
namespace属性的值:该属性是名称空间,该属性的值一般为“/”,用于和action标签中得
name属性组成访问路径
-->
<package name="demo" extends="struts-default" namespace="/">
<!--
配置action标签:该标签用来配置action,一个package标签中可以有多个action
标签,这些action标签的name属性的值必须不同
name属性的值:name属性的值可以随意起,该值用来和package标签中的namespace
属性的值一起构成该action的访问路径
class属性的值:该值是要配置的action所在类的全路径。
method属性的值:该属性用来配置该action对应于类中的哪一个方法,其值为要访问的类中的
那个方法的方法名(execute方法默认访问,不用配置)。
-->
<action name="hello" class="com.jack.action.HelloAction1" method="hello">
<!--
配置result标签:如果配置的该action方法中有返回值,并且返回值不是none,则必须
要配置该标签,否则会出现404错误 name属性的值:该属性的值就是action方法所返回的那个值。
该标签中的值为:action返回该属性后,要重定向到那个路径
-->
<result name="ok">/hello.jsp</result>
</action>
</package>
</struts>
(2)在struts.xml中引入该文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入dtd约束 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<include file="com/jack/action/hello.xml"></include>
</struts>
四、Action的访问配置
我们知道要访问一个Action,必须要对该Action进行配置。配置的方式有三种
1、使用method属性配置
可以使用<action>标签中的method属性来配置。在<action>标签的method属性中配置对应的要访问的的方法名称即可完成。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入dtd约束 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<!--
constant标签用来配置常量
name属性的值:default.properties文件中的常量名称。
value属性的值:要配置的常量的值
-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!--
配置package标签:该标签类似于Java中的包,Struts标签中可以有多个package标签
这些package标签的name属性的值必须不同
name属性的值:这个名称可以随意起名,它表示一个包名,用来区分不同的package
extends属性的值:这个属性的值是固定的,其值为“struts-default”,只有在此配置了
这个属性,该类采有action的功能,类似于Java中的继承
namespace属性的值:该属性是名称空间,该属性的值一般为“/”,用于和action标签中得
name属性组成访问路径
-->
<package name="demo" extends="struts-default" namespace="/">
<!--
配置action标签:该标签用来配置action,一个package标签中可以有多个action
标签,这些action标签的name属性的值必须不同
name属性的值:name属性的值可以随意起,该值用来和package标签中的namespace
属性的值一起构成该action的访问路径
class属性的值:该值是要配置的action所在类的全路径。
method属性的值:该属性用来配置该action对应于类中的哪一个方法,其值为要访问的类中的
那个方法的方法名(execute方法默认访问,不用配置)。
-->
<action name="hello" class="com.jack.action.HelloAction1" method="hello">
<!--
配置result标签:如果配置的该action方法中有返回值,并且返回值不是none,则必须
要配置该标签,否则会出现404错误 name属性的值:该属性的值就是action方法所返回的那个值。
该标签中的值为:action返回该属性后,要重定向到那个路径
-->
<result name="ok">/hello.jsp</result>
</action>
<!-- 配置test方法的访问 -->
<action name="test" class="com.jack.action.HelloAction1" method="test"> </action> <!-- 配置test1方法的访问 -->
<action name="test1" class="com.jack.action.HelloAction1" method="test1"></action>
</package>
</struts>
缺点:如果一个Action类中有很多的方法,要写很多的<action>标签来配置,这样显得混乱。
2、使用通配符来配置(重点)
在配置文件中还可以使用通配符的方式来配置,好处是如果有很多的方法,只需要配置一个<action>标签,就可以完成整个类的配置。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入dtd约束 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<!--
constant标签用来配置常量
name属性的值:default.properties文件中的常量名称。
value属性的值:要配置的常量的值
-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!--
配置package标签:该标签类似于Java中的包,Struts标签中可以有多个package标签
这些package标签的name属性的值必须不同
name属性的值:这个名称可以随意起名,它表示一个包名,用来区分不同的package
extends属性的值:这个属性的值是固定的,其值为“struts-default”,只有在此配置了
这个属性,该类采有action的功能,类似于Java中的继承
namespace属性的值:该属性是名称空间,该属性的值一般为“/”,用于和action标签中得
name属性组成访问路径
-->
<package name="demo" extends="struts-default" namespace="/"> <!--
使用通配符来配置访问方式时,要使用到*来进行匹配
name属性的值:在name属性中要写有*,该*表示匹配要访问的方法名称(hello、test),
其中可以直接写*号,也可以写多个*号。该值用来和package标签中的namespace
属性的值一起构成该action的访问路径
class属性的值:该值是要配置的action所在类的全路径。
method属性的值:该值要使用{1},{}中的数字表示要截取的name属性之中的*的顺序,为1表示截取
第一个*,为2表示截取第二个,该*表示Action中的方法的名称
示例:hello方法的路径为:HelloAction_hello
test方法的路径为:HelloAction_test
-->
<action name="HelloAction_*" class="com.jack.action.HelloAction1" method="{1}">
<!--
配置result标签:如果配置的该action方法中有返回值,并且返回值不是none,则必须
要配置该标签,否则会出现404错误
name属性的值:该属性的值就是action方法所返回的那个值。
该标签中的值为:action返回该属性后,要重定向到那个路径
-->
<result name="ok">/hello.jsp</result>
</action> </package>
</struts>
3、动态方式访问(一般用不到)
动态访问方式在Struts2中默认不开启,要使用必须要现在struts的配置文件中配置一个常量来开启支持
<struts>
<!--
constant标签用来配置常量
name属性的值:default.properties文件中的常量名称。
value属性的值:要配置的常量的值
-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
</struts>
访问方式中不用进行特殊配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入dtd约束 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts>
<!--
constant标签用来配置常量
name属性的值:default.properties文件中的常量名称。
value属性的值:要配置的常量的值
-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!--
配置package标签:该标签类似于Java中的包,Struts标签中可以有多个package标签
这些package标签的name属性的值必须不同
name属性的值:这个名称可以随意起名,它表示一个包名,用来区分不同的package
extends属性的值:这个属性的值是固定的,其值为“struts-default”,只有在此配置了
这个属性,该类采有action的功能,类似于Java中的继承
namespace属性的值:该属性是名称空间,该属性的值一般为“/”,用于和action标签中得
name属性组成访问路径
-->
<package name="demo" extends="struts-default" namespace="/"> <!--
使用通配符来配置访问方式时,要使用到*来进行匹配
name属性的值:在name属性中要写有*,该*表示匹配要访问的方法名称(hello、test),
其中可以直接写*号,也可以写多个*号。该值用来和package标签中的namespace
属性的值一起构成该action的访问路径
class属性的值:该值是要配置的action所在类的全路径。
method属性的值:该值要使用{1},{}中的数字表示要截取的name属性之中的*的顺序,为1表示截取
第一个*,为2表示截取第二个,该*表示Action中的方法的名称
示例:hello方法的路径为:HelloAction_hello
test方法的路径为:HelloAction_test
-->
<action name="HelloAction1" class="com.jack.action.HelloAction1">
<result name="ok">/hello.jsp</result>
</action>
</package>
</struts>
该URL的写法和其他不同
如访问hello方法:URL为:http://ip:端口/项目名称/HelloAction1!hello.action
Struts2入门介绍(二)的更多相关文章
- JavaScript入门介绍(二)
JavaScript入门介绍 [函数] 函数function 是Javascript的基础模块单元,用于代码的复用.信息影藏和组合调用. function a(){} 函数对象Function Lit ...
- mybatis入门介绍二
相信看过我的上一篇博客的同学都已经对mybatis有一个初步的认识了.这篇博客主要是对mybatis的mapper代理做一下简单的介绍,希望能够帮助大家共同学习. 我的上一篇博客:mybatis入门介 ...
- Struts2 入门介绍(一)
一.什么是Struts2 1.Struts2是一个开发框架,应用于JavaEE三层架构中的web层. 2.Struts2框架是在Struts1和webwork基础上发展的一个全新的框架. 3.Stru ...
- mybatis入门介绍一
首先介绍一下Mybatis是什么?mybatis是Java的持久层框架, JAVA操作数据库是通过jdbc来操作的,而mybatis是对jdbc的封装. 使用mybatis之后,开发者只需要关注sql ...
- Azure Cosmos DB (一) 入门介绍
一,引言 今天是国庆.中秋双节房价的第三天,今天抽时间分享一篇关于使用Azure 提供的一项NoSql 服务-----Azure Cosmos DB.就有人问了,我听说过 MongoDB.Redis ...
- Redis(二):Redis入门介绍
Redis入门介绍目录导航: 入门概述 VMWare + VMTools千里之行始于足下 Redis的安装 Redis启动后杂项基础知识讲解 入门概述 是什么 Redis:REmote DIction ...
- 网络流量预测入门(二)之LSTM介绍
目录 网络流量预测入门(二)之LSTM介绍 LSTM简介 Simple RNN的弊端 LSTM的结构 细胞状态(Cell State) 门(Gate) 遗忘门(Forget Gate) 输入门(Inp ...
- Struts2.0笔记二
Mvc与servlet 1.1 Servlet的优点 1. 是mvc的基础,其他的框架比如struts1,struts2,webwork都是从servlet基础上发展过来的.所以掌握servle ...
- Struts2 入门
一.Struts2入门案例 ①引入jar包 ②在src下创建struts.xml配置文件 <?xml version="1.0" encoding="UTF-8&q ...
随机推荐
- 超级简单的例子说明JAVA PACKET CLASS 和变量之间的关系
一.包PACKET 就是一个文件夹,包下的CLASS互相访问如一个文件. 二.class内部相当于一个DELPHI的calss,静态函数(static )只能访问静态函数. package Mainp ...
- SQL Server 隐式转换引发的死锁
在SQL Server的应用开发过程(尤其是二次开发)中可能由于开发人员对表的结构不够了解,造成开发过程中使用了不合理的方式造成数据库引擎未按预定执行,以致影响业务.这是非常值得注意的.这次为大家介绍 ...
- Robotlegs2的Starling扩展
有个老外写了robotleges2的starling扩展,地址是 https://github.com/brean/robotlegs2-starling-viewmap 需要注意的是要先创建一个基于 ...
- react-dnd使用介绍
核心API 想要灵活使用,就先知道几个核心API DragSource 用于包装你需要拖动的组件,使组件能够被拖拽(make it draggable) DropTarget 用于包装接收拖拽元素的组 ...
- bzoj 3669: [Noi2014]魔法森林(并查集+LCT)
Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...
- Setup "EQGRP_Lost_in_Translation" Of NAS
Setup "EQGRP_Lost_in_Translation" Of NAS 1.前言: 北京时间4月14号晚,TheShadowBrokers在steemit.com博客上放 ...
- jquery事件二 -- 选项卡,失去焦点
以之前的选项卡例子为原版,当选上某一个选项卡的时候,选项卡周围会有一个蓝色的边框影响视觉体验,那么应该怎么去掉这个边框色呢?只需要加一行blur()--失去焦点函数就可以了 <!DOCTYPE ...
- 数据结构65:快速排序算法(QSort,快排)
上节介绍了如何使用起泡排序的思想对无序表中的记录按照一定的规则进行排序,本节再介绍一种排序算法——快速排序算法(Quick Sort). C语言中自带函数库中就有快速排序——qsort函数 ,包含在 ...
- try语句块和异常处理
在C++中,异常处理包括: · throw表达式(throw expression) 异常检测部分使用throw表达式来表示它遇到了无法处理的问题.throw表达式抛出一个异常并把控制权转移到能处理该 ...
- 进阶篇:5.1)极值法(Worst Case ,WC)
本章目的:了解极值法,运用极值法: 1.极值法定义 极值法(WC,Worse Case):极值法是考虑零件尺寸最不利的情况,通过尺寸链中尺寸的最大值或最小值来计算关键尺寸的值: 计算公式: 2.极值法 ...