Struts框架配置Action和JSP的交互 如何在Action里面获取作用域

这里是通过jsp(请求)jspAction交互。

通过接受url里面的xx.action拦截请求获取请求名xx

<struts>

<!-- Convention插件定位视图资源的根路径。默认值为/WEB-INF/content 所以我们需要改 -->

<constant name="struts.convention.result.path" value="/" />

<!-- 指定Web应用的默认编码集,相当于调用HttpServletRequestsetCharacterEncoding方法 -->

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

<!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->

<constant name="struts.devMode" value="true" />

<package name="mypakage" extends="struts-default">

Name=Test--->>请求名 也就是url.action中的url 

Class=...是转到拦截到请求并转去哪个类处理,这里填的是处理类的路径

<action name="test" class="com.act.actDemo">

Name=success返回success 那么就会以转发的形式跳转到index.jsp

<result name="success" type="dispatcher">index.jsp</result>

</action>

</package>

</struts> 

 

我这里仅仅是在里面获取到request作用域然后传一个值,进行前后台的交互:

package com.act;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class actDemo extends ActionSupport{

@Override

public String execute() throws Exception {

ActionContext.getContext().put("msg""request作用域");

return SUCCESS;

}

}

 

 前端:

<body>

    This is my JSP page. <br>

    ${msg }

</body>

 

 

 

 

 

 

 

通过这个例子,可以知道这里配置一种方式实现struts2框架的功能。那么问题来了:这里是Action的配置

<struts>

<!-- Convention插件定位视图资源的根路径。默认值为/WEB-INF/content 所以我们需要改成根目录-->

<constant name="struts.convention.result.path" value="/" />

<!-- 指定Web应用的默认编码集,相当于调用HttpServletRequestsetCharacterEncoding方法 -->

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

<!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->

<constant name="struts.devMode" value="true" />

<package name="mypakage" extends="struts-default">

<!-- 可以通过对应的URL:test.action ,默认调用ACtionexecute()方法 -->

<action name="test" class="com.act.actDemo">

<result name="success" type="dispatcher">index.jsp</result>

</action>

<!-- 可以通过对应的URL:test1.action ,调用ACtiondotest1()方法 -->

<action name="test1" class="com.act.actDemo" method="dotest1">

<result name="success" type="dispatcher">index.jsp</result>

</action>

<!-- 可以通过对应的URL:test1_xx.action ,调用ACtionxx()方法  (要注意action的定义)-->

<action name="test2_*" class="com.act.actDemo" method="{1}">

<result name="success" type="dispatcher">index.jsp</result>

</action>

<!-- 可以通过对应的URL:test3!xx.action  ,调用xx方法-->

<action name="test3" class="com.act.actDemo">

<result name="success" type="dispatcher">index.jsp</result>

</action>

</package>

</struts> 

 

 

 

 

 

 

 

 

 

 

然后我就随便写了个action,要继承ActionSupport类。

 

package com.act;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.ParentPackage;

import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

@ParentPackage("struts-default")

public class actDemo extends ActionSupport{

@Override

public String execute() throws Exception {

ActionContext.getContext().put("msg""execute");

return SUCCESS;

}

public String dotest1() throws Exception {

ActionContext.getContext().put("msg""dotest1");

return SUCCESS;

}

public String dotest2() throws Exception {

ActionContext.getContext().put("msg""dotest2");

return SUCCESS;

}

public String dotest3() throws Exception {

ActionContext.getContext().put("msg""dotest3");

return SUCCESS;

}

@Action(value="dotest4",results={@Result(location="index.jsp")})

public String dotest4() throws Exception {

ActionContext.getContext().put("msg", "dotest4");

return SUCCESS;

}

}

 

 

 

 

 

 

 

 

 

 

红色的是元数据的配置方法。不需要写XML。还有很多属性没有列出来。

这里是ACtionJSP之间的交互,我们知道JSP-servlet是有转发和重定向之分。(转发保留request作用域,重定向没有保留。而且URL的变化也是没有,有。)

这里同样也是有转发和重定向的区别。直接xxx.action  XXX@actionvalue值。

 

<action name="test3" class="com.act.actDemo">

<result name="success" type="dispatcher">index.jsp</result>

<result name="err" type="dispatcher">xxx.jsp</result>

</action>

 

我们可以看到在result中有个属性type 这个type就是我们可以配置从ActionJSP之间的跳转方式。若是Action-JSP之间的可以根据需要选择重定向还是跳转。

转发dispatcher 重定向 redirect 

 

Action中我们可以配置去哪一个JSP,根据需要我们在方法里面Return 的那个String其实就是resultname 去到哪个JSP页面





struts2 核心是拦截器
1.配置首先加入相应的jar包。
2.配置 web.xml增加以下
 <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
    <!-- struts2的拦截控制中心 -->
          org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
      </filter-class>
  </filter>
  <filter-mapping>
      <filter-name>struts2</filter-name>
    <!-- struts2的拦截后缀 -->
      <url-pattern>*.action</url-pattern>
  </filter-mapping>
3.在src目录当中增加struts.xml
-------------------------------------------------------------------------------------

struts.xml配置是以package位单位的
package
    name--名字
    namespace--工作空间(命名空间)
    extends--继承与哪个包
    abstract--加入这个属性之后这个包可以被继承
    
    package底下的标签
    action
        name--请求名
        method--处理的方法名,默认execute
        class--哪一个类处理
    result
        name--返回的名字默认("success" )
        type--返回类型默认("dispatcher"--转发)
前端aciton可以通过  名字!方法   来调用
-------------------------------------------------------------------------------------        
struts2 常量配置
<constant name="xxx" value="yyy" />


struts2为了团队开发分工更明确他加入namespace的机制还有多配置文件引入方式
<include file="文件路径"></include>
 
-------------------------------------------------------------------------------------

约定Action包名:

要求Action必须放到action、actions、struts、struts2包中。例如:cn.itcast.action、cn.itcast.sturts、cn.itcast.action.user等等。可以使用下面常量来修改Actoin的包

<constant name="struts.convention.package.locators" value="action,actions,struts,struts2"/>


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



        
struts2引用标签
<%@taglib uri="/struts-tags" prefix="s"%>

//1.取得servletAPI的session: ServletActionContext.getRequest().getSession()
//ActionContext=值栈的#     
//2.通过ActionContext取得的session的代理map
//3.取得servlet API的第三种方式:实现ServletRequestAware接口,有struts2系统自动注入

 

 

 

 

 

 

 

 

你可能感兴趣的:(s标签,struts配置,Action与JSP交互,作用域的获取)