struts2第一个程序

 

struts2版本下载:http://struts.apache.org/download.cgi

struts2目录结构:

apps:该文件夹包含了基于struts2 的示例应用,struts2-mailreader.war改为struts2-mailreader.zip解压

docs:该文件夹下包含了struts2 相关文档,包括struts2 快速入门、struts2的文档以及API文档等

lib:该文件夹下包含了Struts2框架和核心类库,以及struts2第三方插件类库

src: 该文件夹下包含了Struts2框架的全部源代码

 

Struts2 是一个非常优秀的MVC框架,基于Model2 设计模型.

由传统Struts1和WebWork两个经典框架发展而来:

Struts2框架=Struts1+XWork

Struts1和Struts2的区别:

1. Stuts1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,很麻烦,所以依赖性比较强

2. Stuts2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个action,用起来比较方便,但是因为请求之前的拦截器有一些注入的操作,速度相对Stuts1来说稍微慢一点

 

Struts2第一个程序的开发步骤:

0.新建动态web项目(标准的web项目),在WEB-INF下新建classes文件,在build path中修改字节码文件的路径。

1.拷贝/apps/struts2-blank/WEB-INF/lib中的所有jar到项目的lib中.

2.在web.xml中配置Struts2的前端控制器-StrutsPrepareAndExecuteFilter.前端控制器是框架的入口

  <!-- 
  	配置strtus2的filter
  	该filter的作用:初始化struts2的配置,	并且执行请求
  	
  	filter的init方法用来 初始化配置 strtus.xml
  	doFilter方法用来负责请求调用的
   -->
  <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>

3.拷贝struts.xml文件到项目的sourcefolder中.

    <package name="hell" extends="struts-default" namespace="/name">
    	<action name="hello" class="cn.com.my.HelloAction" method="execute">
    		<result name="success" type="dispatcher">/index.jsp</result>
    	</action>
    </package>

4.定义一个POJO类:HelloAction 继承ActionSupport,并提供一个公共无参数的xxx方法.

public class HelloAction extends ActionSupport{
	@Override
	public String execute() throws Exception {
		System.out.println("-----hello-------");
		return "success";//对应逻辑上视图名 
	}
}

5.在struts.xml文件中,配置HelloAction.(把HelloAction交给Struts2框架管理).

6.部署Web项目,访问Action.

URL:  http://127.0.0.1:8080/项目名/namespace/actinname[.action]


struts.xml通过<include>元素指定多个配置文件:

在大部分应用里,随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得非常臃肿。我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。

struts.xml中:

<struts>

      <includefile="struts-part1.xml"/>

      <includefile="struts-part2.xml"/>

</struts>

 

Struts2中的6大配置文件:

Struts2框架按照如下顺序加载struts2配置:

1.default.properties该文件保存在 struts2-core-2.3.24.jar 中org.apache.struts2包里面:包含了Struts2的默认常量配置  req.setCharacterEncoding(“UTF-8”)

2.struts-default.xml该文件保存在struts2-core-2.3.24.jar:包含了框架依赖的对象配置和结果类型,拦截器等配置.

3.struts-plugin.xml 该文件保存在Struts2框架的插件中:struts-Xxx-plugin-2.3.24.jar.由插件提供

上述三个文件是框架自带的,我们不能直接修改

4.struts.xml    该文件是web应用默认的struts配置文件.重点.配置自定义的Action和其他信息.

5.struts.properties 该文件是Struts的默认配置文件-->可以修改default.properties 的常量配置.

6.web.xml 该文件是Web应用的配置文件

上述三个文件是我们可以修改操作的.

---------------------------------------------------------

如果多个文件配置了同一个struts2 常量,则后一个文件中配置的常量值会覆盖前面文件配置的常量值.

注意:一般的,我们只在struts.xml中做常量配置.


Struts2中常见常量:

1):指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法

注意:在Struts2中post请求参数的编码方式为UTF-8

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

2):该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配 *.action的请求都由Struts2处理。如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开

      <constant name="struts.action.extension"value="action,,"/>

3):设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭

    <constantname="struts.serve.static.browserCache" value="false"/>

4):当struts配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开

    <constantname="struts.configuration.xml.reload" value="true"/>

5):开发模式下使用,这样可以打印出更详细的错误信息

     <constant name="struts.devMode"value="true" /> 修改struts.xml之后,不要重启Tomcat.

6):默认的视图主题

      <constant name="struts.ui.theme"value="simple" />

7):是否支持动态方法调用

     <constantname="struts.enable.DynamicMethodInvocation"value="false"/>

 

package,action,result的相关配置

<package>元素: 是<struts>根元素的子元素.

    用来对多个<action>元素分类管理,和Java中的package没有关系.

常见的属性:

<packagename=""extends="" namespace="" abstract=""></package>

name:      表示<package>的名字, 可以通过该名字被其他的包继承.

extends:   表示当前<package>继承哪一个<package>,一般都是:struts-default.

           而struts-default其实就是struts-default.xml中<package>元素的名字.

           继承struts-default之后,就拥有了该<package>定义的所有资源.(结果返回类型,拦截器..)

namespace: 表示命名空间,一般的以"/"打头,命名一般以模块名.如: /crm, /oa.

abstract:  抽象的,缺省值是false. 若一个<package>的abstract="true",那么该<package>中就不能再定义<action>元素,只能用来继承.

 

<action>元素:是<package>元素的子元素.

    需要Struts2框架帮我们来管理action的生命周期,

1.对象的创建,使用反射的方式来创建action对象

    需要使用到action类的全限定名

2. 帮我们调用对应的方法来处理对应的请求

.

<action  name="" class=""method=""/>

常见的属性:

name: action的名称,必须唯一.  注意:action的name值不能以"/"打头.

class:一个Action类的全限定名.    缺省值:ActionSupport类.

method:当前Action动作访问的方法, 缺省值:execute.

 

------------------------------------------------------------------------------

 

<result>元素:配置结果视图.

<result name="" type=""></result>

局部结果视图:<result>定义在<action>中.

全局结果视图:<result>定义在<global-results>中,而<global-results>在<package>中

逻辑视图寻找顺序:先从当前的Action中去选择局部结果视图,找到就跳转,找不到,再找当前action所在package中找全局的结果视图,找到,跳转,找不到,报错.No result defined.

常见的属性:

name:Action方法返回的逻辑视图名称. 缺省值:success

type:结果的跳转类型.该类型的值在struts-default.xml中已经预定义好了. 缺省值:dispatcher

常见的type值(结果类型):

dispatcher:      表示从Action请求转发到页面(JSP).缺省值

redirect:        表示从Action重定向到页面(JSP).

chain:           表示从Action请求转发到另一个Action.

redirectAction:  表示从Action重定向到另一个Action.

stream:          表示返回流. 文件下载时使用.

 后面会讲到

当需要跳转到不同package中的Action的时候,需要使用<param>元素来配置Action的路径

<param name="">表示参数:name缺省值:location(地址)  type为chain或者redirectAction

			<result name="chainPage" type="chain">
				<!-- 设置目标action的namespace -->
				<param name="namespace">/second</param>
				<!-- 设置目标action的name -->
				<param name="actionName">second</param>
			</result>

参考了其他文章

 


猜你喜欢

转载自blog.csdn.net/qq_42402854/article/details/80934137