【struts】result配置各种视图转发类型

forward和redirect的区别
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的相应内容读取过来,然后把这些内容发给浏览器,浏览器根本不知道服务器发送的内容从哪儿来的,所以它的地址栏中还是原来的地址。
redirect 就是服务器端根据逻辑,发送一个状态码,告诉浏览器去重新去请求那个地址,所以它的地址栏中还是原来的地址
所以判断是转发还是重定向我们可以根据浏览器中的地址是否改变,若改变则为重定向,反之 为转发。

struts1配置:

<action
attribute="loginForm"
input="/index.jsp"
name="loginForm"
path="/login"
scope="request"
type="com.xinyang.action.LoginAction">
<set-property property="cancellable" value="true" />
<forward name="succ" path="/WEB-INF/page/admin.jsp" /><!-- 浏览器内部请求转发 -->
<forward name="error" redirect="true" path="/index.jsp" /><!-- 重定向 -->
</action>



struts2配置

<action name="login" class="com.xinyang.action.LoginAction">
<result name="success">/WEB-INF/welcome.jsp</result>
<result name="error">/WEB-INF/error.jsp</result>
</action>
result配置类似于struts1中的forward,但是struts2中提供了多种结果类型:dispatcher(默认值)、redirect、redirectAction、painText。


【dispatcher叙述】
dispatcher(默认值):它对应struts中的 <forward name="succ" path="/WEB-INF/page/admin.jsp" />【 浏览器内部请求转发定向至某一视图】,而上面的配置 <result name="success">/WEB-INF/welcome.jsp</result>就是采用此方式进行浏览器内部请求转发定向至某一视图
【redirect叙述】
如果要实现类似于Struts1中的重定向的方式定位到某一视图,在Struts中就应该使用redirect这种方式来实现,这种结果类型它对应Struts1中<forward name="error" redirect="true" path="/index.jsp" />配置 redirect属性设置为true这样浏览器进行重定向 定向至某一Jsp
注:根据上面Struts2中的Action配置,把视图jsp放到/WEB-INF/..目录中,因为当前的jsp仅供struts的Action使用,所以我们不希望用户通过浏览器直接访问 ,反之当用户在浏览器中直接访问是没有意义的!如果浏览器采用重定向方式进行定位到某一jsp,此时视图jsp就不能放到/WEB-INF/..目录下,所以所谓浏览器重定向就是应到用户浏览器访问某一路径说 白了就是用户直接访问的路径,而此时用户是不能访问/WEB-INF/..目录中的视图,而只有浏览器服务内部请求转发时才能访问/WEB-INF/..中的jsp视图。

在strutts配置文件
<action name="redirect">
<result type="redirect">/employee.jsp</result>
</action>

在配置视图result中 我们需要用到一个type指定接口类型是采用重定向的方式进行定位转发!

注:当浏览器进行重定向的方式 进行转定位到某一视图 ,若含有参数进行定位到某一视图
在struts1中配置如下:
<action path="/control/employee/manage" ...../>
<forward name="xxx" redirect="true">/xxx.jsp?xxx=xxx</forwad>
</action>

在struts2中

<action name="redirect">
<result type="redirect">/xxx.jsp?xxx${xxx}</result>
</action>
注:若传递为中文:我们需对中文进行编码
public String execute(){

try {
this.xxx=URLEncoder.encode("朱新阳","UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return SUCCESS;
}

当在页面中显示传递过来的值时发现在浏览器中url对中文参数已经进行了中文编码,但是在页面中显示传递的参数为乱码

处理方式:在tomcat服务器接收中文参数以ISO8859-1编码方式进行存放
所以在tomcat服务器中以get()方式继续中文参数传递时候,必须先得到ISO8859-1的二进制数字然后转换为字符
因为传递的参数经过URL编码 所以还需为其解码
若不解码 代码为:new String(xxx.getBytes("ISO8859-1"),"UTF-8");
转换并解码 代码为:java.net.URLDecoder.URLDecoder.decode(new String(xxx.getBytes("ISO8859-1"),"UTF-8"),"UTF-8");
注:若不解码 好像也不错

【redirectAction叙述】
redirectAction :重定向至某一action
若重定向的action在同一包下:
<result type="redirectAction">某一action名称</result>
若:重定向的action在别的匿名空间
<result type="redirectAction">
<param name="actionName"></param>
<param name="namespace"></param>
</result>


【painText叙述】
作用:原样输出视图代码 适合应用于:技术网站浏览java或jsp源码
代码为:
<result name="xxx" type="plainText">
<param name="location">/xxx.jsp</param><!-- 指定请求文件路径-->
<param name="charSet">xxx</param><!-- 指定读取文件的编码-->
</result>
注:对struts而言
若:出现乱码,则我们需要确定文件以什么编码存储,其次对struts而言,我们要确定系统以什么编码读取它,我们必须指定它以什么编码进行存储并以什么编码进行读取
视图文件 -》右键properties--Text file encoding来确定文件是以什么编码进行存放

【全视图】
某一视图,它可以供多个action所公用 这种视图我们叫做全视图;

配置如下:
<package name="xinyang" namespace="/xinyang/employee" extends="struts-default">
<!-- 全视图配置 -->
<global-results>
<result name="quanju">xxx.jsp</result>
</global-results>
<action name="qj" class="com.xinyang.action.LoginAction" method="add">
</action>
</package>
这样我们在action中 我们定义一个add方法 返回一个qj字符串就可以了
访问:http://localhost:8080/Web工程名称/xinyang/employee/qj.action 这样我们就可以访问到xxx.jsp
注:这个全视图目前是在<package name="xinyang" namespace="/xinyang/employee" extends="struts-default">这个包中定义的 所以仅能供此包下的action中所使用,若在struts使用范围内或在别的包下的anction也可以使用这个全局视图,可以通过包的继承方式来设置
<package name="base" extends="struts-default">
<global-results>
<result name="xxx">xxx.jsp</result>
</global-results>
</package>


<package name="xxx" extends="base">
<action name="xxx" class="com.xinyang.action.LoginAction" method="add">
</action>
</package>

<package name="xxx1" extends="base">
<action name="xxx" class="com.xinyang.action.LoginAction" method="add">
</action>
</package>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值