天天看点

struts(一)

struts.xml 配置

<struts>

    <constant name="struts.enable.dynamicmethodinvocation" value="false" />  //常量名

    <constant name="struts.devmode" value="false" />     //是否启动开发模式

    <include file="example.xml"/>

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

        <default-action-ref name="index" />

        <action name="index">

            <result type="redirectaction">

                <param name="actionname">helloworld</param>

                <param name="namespace">/example</param>

            </result>

        </action>

    </package>

一个package下可以配置多个action,一个action下也可以配置多个result

  </struts>

 web.xml

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

<web-app version="2.5" 

xmlns="http://java.sun.com/xml/ns/javaee" 

xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" 

xsi:schemalocation="http://java.sun.com/xml/ns/javaee 

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <display-name></display-name>

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

  <filter>

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

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

    </filter>

    <filter-mapping>

        <url-pattern>/*</url-pattern>  //把每个url提交到过滤器(org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilte)

    </filter-mapping>

</web-app>

当未给action中的result标签启用name 时默认的为 success

package标签的功能相当于java中的包

web应用发布时,首选经过web.xml的过滤,再到struts.xml的配置中找到相应的action

namespace:

namespace决定了action的访问路径

当namespace为空时,匹配其他namespace不匹配的情况(相当于switch中default情况)

web应用程序的访问路径:http//localhost:端口/webapp/namespace/action

action:具体的视图的返回可以由用户自定义action 决定

三中方式:

实现 action 的方式可以是一个普通的 java类里边必须包含一个public string execute(){}方法

可以实现action接口

也可以继承actionsupport(通常使用这个)

当没有定义action 的class时,会调用系统默认的action 方法返回值仍旧 是“success",根据返回值确定具体的视图

路径问题:

struts中是根据action的路径决定,不要使用相对路径,使用绝对路径

action执行的时候并不一定要执行execute方法可以在配置文件中配置action的时候用method=来指定执行哪个方法

也可以在url地址中动态指定(动态方法调用dmi)(推荐)action的name和namespace保持一致,可以实现一个action下动态的方法调用,在url中指定使用哪个方法(url中用!方法名)

使用通配符,遵循约定优于配置(约定的好,可以简化配置)

action类和视图jsp 的名称有公共部分,各个action 的名称风格统一,各个jsp的名称风格统一

接受参数:

三中方式:1.属性方法

视图页面的 url的请求参数和action中的属性名称要一致,当调用方法时,系统会自动调用setxxx方法将请求参数传递,

若果类型不匹配会自动完成类型转换,构造函数必须是空参数的

   2. domainmodel(域模型)或者增加 dto(数据传输对象)方式

域模型就是一系列的对象模型,给出一系列的对象模型,在action中创建域模型对象,同样给出set和get方法以及构造函数

在url中使用对象名.属性名=valuel进行传值,系统会自动为我们创建一个相应的对象,然后调用域模型对象的set方法,之后调用action 的set对象的方法

   3.模型驱动方式

解决中文问题:

在struts中增加   <constant name="struts.i18n.encoding" value="gbk" />配置   struts.i18n.encoding指的是国际标准化编码

简单的数据校验:

this.addfielderror("属性字段","错误信息"),可以向前台传送属性错误信息;在前台获取错误信息:

调用 struts 的标签库:<%@taglib uri="" prefix=" s"%> url指定路径,prefix指定使用标签的前缀,当错误信息在前台呈现时, struts2会使用<ul><li class="errormessage">信息</li></ul>

<s:debug><s:debug>可以生成一个debug连接,会有一个键值栈,其中包含:property name 和property value

struts valuestack debug(值占区)内容(访问直接使用property name):

object property name property value

texts

对象

actionerrors []

errors {关键字=[内容1,内容2],[],[]...}

personaction.personaction(action 的路径) fielderrors {关键字=[内容1,内容2],[],[]...}

errormessages []

locale

actionmessages []

stack context(栈环境) 区:(访问方式:#key)<以下只列出常用的>

key value

request

action

parameters

application

attr

session

可以通过<s:property value="property name" />获取相应的property value(注:标签前边的前缀是由引用标签库时指定的)

 访问web元素:

获取map类型的request,session,application,httpservletrequest,httpsession,servletcontext

第一种方式(可以放到构造函数中,也可以放到execute()方法中:

request=(map)actioncontext.getcontext().get("request");

session=(map)actioncontext.getcontext.getsession();

application=(map)actioncontext.getcontext().getapplication();

第二种方式(使用泛型,实现requestaware,sessionaware,applicationaware接口):

private map<string, object> request;

private map<string, object> session;

private map<string, object> application;

//di dependency injection

//ioc inverse of control

public string execute() {

request.put("r1", "r1");

session.put("s1", "s1");

application.put("a1", "a1");

return success; 

}

@override

public void setrequest(map<string, object> request) {

this.request = request;

public void setsession(map<string, object> session) {

this.session = session;

public void setapplication(map<string, object> application) {

this.application = application;

第三种:

private httpservletrequest request;

private httpsession session;

private servletcontext application;

public loginaction3() {

request = servletactioncontext.getrequest();

session = request.getsession();

application = session.getservletcontext();

request.setattribute("r1", "r1");

session.setattribute("s1", "s1");

application.setattribute("a1", "a1");

第四种(实现servletrequestaware接口)

public void setservletrequest(httpservletrequest request) {

this.session = request.getsession();

this.application = session.getservletcontext();

模块包含:

<include file="url">将多个struts.xml配置文件合并

默认action配置:当所访问的action不存在是都提交给默认的 action

<default-action-ref name=""></default-action-ref>

继续阅读