配置:

  1. 将struts-2.3.4\apps目录下struts2-blank.war解压,然后将struts2-blank\WEB-INF\classes目录下struts.xml复制到src目录下。适当修改struts.xml。
  2. 将struts-2.3.4\apps\struts2-blank\WEB-INF\lib目录下jar包复制到WebRoot/WEB-INF/lib目录下。
  3. 修改web.xml.添加如下内容到</web-app>前:

     <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>

Action路径:

struts.xml中package里namespace决定了action的访问路径,默认为””,可以接收所以路径的action。Namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action, /xxx/index.action, 或 /xxx/yyy/index.action。

如为“”,则在所有包里都查找。

 

具体视图的返回可以1由用户自己定义的Action来决定,具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容。具体Action的实现可以是一个普通的java类,里面有public String execute方法即可 2或者实现Action接口。3不过最常用的是从ActionSupport继承,好处在于可以直接使用Struts封装好的方法。

 

路径问题:

Struts2中的路径问题是根据action的路径而不是jsp的路径来确定,所以尽量不要使用相对路径。

虽然可以用redirect方式解决,但redirect方式并非必要。解决方法非常简单,统一使用绝对路径。

(在jsp中用request.getContextRoot方式来拿到webapp的路径)或者使用myeclipse经常用的,指定basePath(新建jsp时会自动生成basePath。

一种方式:<a href =”<%=basePath%>index.jsp”>index.jsp</a>

另一种方式:在head标签里设置<base href=”<%=basePath%>”/> 

<a href =” index.jsp”>index.jsp</a>

)。

 

动态方法调用

Action执行的时候并不一定要执行execute方法,可以在配置文件中配置Action的时候用method=来指定执行哪个方法, 也可以在url地址中动态指定(action名|method名)(动态方法调用DMI)(推荐。)

前者会产生太多的action,所以不推荐使用。

使用通配符,将配置量降到最低,不过,一定要遵守“约定由于配置”的原则。

<action name =”Student*” class=”xxxx.StudentAction” method=”{1}”>

<result>/Student{1}_success.jsp</result>

</action>

<action name=”*_*” class=”com.bjsxt.struts2.action.{1}Action” method=”{2}”>

       <result>/{1}_{2}_success.jsp</result>

</action>

*可以匹配任何字符,而1则是第一个星号的内容。

如果是Student_add,即两种都能匹配,会先匹配最精确的。如果同等,则按前后顺序。

 

接收参数

url: action名|方法名?参数一=值1&参数二=值2。

  1. 用action属性接收参数,在类里面设置相应的成员变量和get,set方法,会自动把url中的参数值传给成员变量。成员变量名字不重要,set方法名要跟参数名相匹配。
  2. DomainModel预模型 通过一个单独的类User定义所有成员和get set方法。直接在类里private User user; get user,set user方法。url里面要写user.参数名=值。

DTO(Data Transfer Object,数据传输对象)。从action接收对象,又传递对象给DomainModel

  1. ModelDriven

 

接收参数的中文问题

(form里面method,如果有中文不要用get,全用post)

Struts.xml里面<package>前加一句

<constant name=”struts.i18n.encoding” value=”GBK”/>

 

简单数据验证