struts2的高级配置

版权声明:@2018 https://blog.csdn.net/weixin_40442684/article/details/81191402

动态方法的开启

2种方法

1、<action name="helloAction_*" class="com.hd.action.hello" method=”{1}”>

*号占位符

2.开启常量

<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

Method不写,然后在地址栏地址名和方法名用!号隔开

注意:

在高版本的struts2不能使用

<allowed-methods>hello</allowed-methods>

默认设置

属性的默认值

<!—

method 如果不写 自动匹配该类中的execute方法
    class  默认的是ActionSupport
    result  -> name 不写  默认的是success
               type       默认的是转发
-->

默认访问的action

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

Struts2的访问流程

1、

到达web.xml  struts2过滤器

过滤器会自动过滤src目录下的struts.xml文件

进入到该类,并执行对应的方法

返回结果

   Struts.xml中

读取result中的type属性   打开后面的页面

Action类的创建

1、Pojo类

2、继承 ActionSupport  比接口多了一些action的优化   推荐使用

3、实现接口:Action接口

 

 

Struts2接收参数

1、struts2是一个线程安全

它的生命周期是每次请求到来,都会重新创建action

 

接收参数的方式

1、属性驱动

在action类中创建属性,属性的名字必须和参数的名字保持一致

自动接收参数

给该属性创建对应的get-set方法

2、对象驱动

属性中添加对象并设置get-set方法

在传参数过程中,必须使用对象导航的方式

对象user  参数  user.name 这样name属性会自动封装到对象user中

3、模型驱动

实现modelDriver<Object>接口  泛型传递要转换的对象类型

实现它的方法,  方法中有个返回值,返回对应的属性

在action汇总定义一个属性,并给它new出来一个对象

 

模型驱动不能转换集合, 对象驱动可以转换集合

 

响应请求

1、转发  

2、重定向

3、转发自己的action  chain
<result name="success" type="chain">
    <param name="actionName">toAction_add</param>
    <param name="namespace">/</param>
    <param name="name">${name}</param>
</result>

4、重定向到自己写的action

<result name="success" type="redirectAction">
    <param name="actionName">toAction_add</param>
    <param name="namespace">/</param>
    <param name="name">${name}</param>
</result>

5ajax

Ajax请求

1、 Servlet常用的对象

request   生命周期  请求到来创建

response 

session   request.getSession()  生命周期  30分钟后销毁

servletContext   服务器开启对象就创建   服务器关闭就销毁

   2、struts2中action

ActionContext对象

Request原生对象

Response原生对象

ServletContext原生对象

Request域

Session域

ServletContext域    applicationContext

Param 域

Attr域 三合一 (Request域、Session域、ServletContext域)

 

2、steam流的方式

Action中添加属性 InputStream inputStream 给他添加对应的get-set方法

将json字符串转化为字节流并赋值给inputStream

private InputStream inputStream;
@Override
public String execute() throws Exception {
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("code",0);
    jsonObject.put("msg","你好,访问成功");
    String str = jsonObject.toJSONString();
    inputStream = new ByteArrayInputStream(str.getBytes("GBK"));
    return super.execute();
}

public InputStream getInputStream() {
    return inputStream;
}

public void setInputStream(InputStream inputStream) {
    this.inputStream = inputStream;
}

在配置文件中设置type 为steam

加一个响应的的参数就是这个属性

<action name="steamAction" class="com.hd.SteamAction.SteamAction">
    <result name="success" type="stream">
        <param name="inputStream">inputStream</param>
    </result>
</action>

猜你喜欢

转载自blog.csdn.net/weixin_40442684/article/details/81191402