简单来说,Struts2的作用就是把请求和结果分开,即提高可扩展性,使得更加灵活。
一、struts2的基本配置
新建一个web project项目,下载struts2,配置Strusts2环境。
- 1配置struts.xml文件。
将struts-2.1.6目录中的apps中的struts2-blank.war文件解压,打开WEB-INF---------classes--------struts.xml文件拷贝到新建项目的src目录下。
【struts-2.1.6\apps\struts2-blank-2.1.6-\WEB-INF\classes\struts.xml】
- 2配置struts2所需的jar包。
将【struts-2.1.6\apps\struts2-blank-2.1.6-\WEB-INF\lib】下的jar包拷贝到 项目的WebRoot-----WEB-INF
----lib目录下。
- 3配置web.xml文件。
将示例web.xml文件中关于struts2的filter标签配置复制到项目的web.xml中。
1.源码和javadoc的设置:
【可查阅struts2源码,按F1可查阅javadoc】
在jar包上右键---properties---Java Source Attachment/Java Doc Location:
【struts2的Java Source源码路径为:
\struts-2.3.16.1\src\core\src\main\java
struts2的Java Doc路径为:
\struts-2.3.16.1\docs\struts2-core\apidocs】
2.xml文件自动提示设置
Window----Preferences----输入catalog----XML catalog----Add---设置dtd文档location、keyType和key
【Location:选择dtd文档位置。
解压 struts-2.3.16.1\lib\ 目录下的struts2-core-2.3.16.1.jar文件,选择struts-2.0.dtd文件位置。
Key Type:URL
Key:输入dtd的URL地址,在struts.xml文件的上部的DOCTYPE标签中定义的 "http://struts.apache.org/dtds/struts-2.0.dtd"】
- 4配置action。
简化struts.xml中package标签中的内容。
<constant>标签:struts.devMode为true时,为开发模式,可更改action的name且不用重启tomcat
<package>标签:包名,设置namespace。类似java项目中的包名,起到防止action重名的作用。
<action>标签:设置action的name,设置相应result路径。
二、Struts2运行机制
Struts2的作用:把请求和视图分开,增强项目的可扩展性。
工作流程:
1、客户端浏览器发出HTTP请求.
2、根据web.xml配置,该请求被FilterDispatcher接收
3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton
4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面
6、返回HTTP响应到客户端浏览器
namespace:action访问路径
用户自定义Action
1.IndexAction中有execute()方法,返回“success”字符串,struts.xml的action标签中定义class。
当struts2的filter读到struts.xml中的action是一个class时,每次访问struts2都会调用createMessage()方法,new一个新的action的class对象,调用execute()方法,不会出现线程同步的问题。【而struts1每次访问时会访问可能用的是同一个对象,会出现线程同步的问题。】
2.当action中不配置class时,可以使IndexAction继承Action接口,实现execute()方法,返回SUCCESS常量。
3.当action中不配置class时,可以使IndexAction继承ActionSupport类,重写execute方法,返回SUCCESS常量。
------------------------------日常开发使用第三种方法。
路径问题
Action--method
Action执行的时候并不一定要执行execute()方法
(1)可以在struts.xml配置文件中配置Action的时候用“method=要执行的方法”,并在对应的Action中实现该方法。
(2)也可以在url地址中动态指定(动态方法调用DMI)【推荐】
不指定method,在调用时通过在action后添加“!方法名”的方式调用Action中的方法。
Action---通配符
使用通配符,可将配置量降到最低。但一定要遵守“约定优于配置”的原则。
通过Studentadd访问action
在action配置中没有对应的Studentadd的action,但有Student。result中{1}与表示的内容相同。