首页 > 其他分享 >Struts2中type类型有哪些?Struts2默认能解决get和post提交方式的乱码问题吗?Struts2中如何配置拦截器?

Struts2中type类型有哪些?Struts2默认能解决get和post提交方式的乱码问题吗?Struts2中如何配置拦截器?

时间:2024-03-24 09:58:05浏览次数:23  
标签:拦截器 请求 乱码 Struts2 跳转 Action

Struts2中type类型有哪些?
Struts2中type类型指的是结果类型,用于指定Action执行完成后如何返回结果给客户端。Struts2框架提供了多种结果类型,以满足不同的业务需求和页面跳转方式。以下是一些常见的Struts2结果类型:

dispatcher:这是默认的结果类型,相当于servlet的forward,即服务器端跳转。客户端看到的是Struts2中配置的地址,而不是真正页面的地址。一般用于跳转到JSP页面。
redirect:用于页面重定向,即客户端跳转。这种类型的结果会发送一个新的请求到服务器。
redirectAction:这也是一种重定向,但它重定向到另一个Action,而不是直接跳转到页面。
chain:用于实现从一个Action中跳转到该Action中的另外一个方法,并且携带参数,参数不会丢失。
stream:一般用于文件下载操作。
PlainText:返回普通文本结果。
Velocity:用于与Velocity模板技术的集成。
XSLT:用于与XML/XSLT技术的集成。
HttpHeader:返回报文头给用户。
json:返回JSON格式的数据,常用于前后端数据交互。
除了上述常见的结果类型,Struts2还支持其他扩展的结果类型,如freemarker等,这些扩展类型通常通过配置额外的插件或库来实现。

在实际应用中,根据具体的业务需求和页面跳转逻辑,可以选择合适的结果类型来配置Struts2的Action。通过在struts.xml配置文件中为Action指定不同的result标签,并设置相应的type属性,即可实现不同的结果类型。

Struts2默认能解决get和post提交方式的乱码问题吗?
Struts2默认不能解决GET请求中的中文乱码问题,但能在一定程度上支持POST请求的编码处理。

对于POST请求,Struts2提供了一个默认的过滤器,该过滤器通常能够处理编码问题,使得在POST请求中一般不会出现中文乱码。然而,对于GET请求,由于HTTP协议对GET请求的参数长度有限制,并且GET请求的参数会附加在URL后面,这可能导致在传输过程中出现中文乱码问题。

要解决这个问题,通常需要在服务器端和客户端之间设置一个统一的编码,如UTF-8,并在服务器端接收请求时进行相应的编码设置。对于GET请求,仅仅通过request.setCharacterEncoding(“UTF-8”)这种方式是无法解决中文乱码问题的,因为该方法只对POST请求有效。因此,可能需要采取其他方式,如在Struts2的配置文件中设置编码,或者对URL进行编码和解码处理。

请注意,Struts2的默认配置和过滤器设置可能会因版本不同而有所差异,因此在实际开发中,建议详细阅读官方文档和相关的配置说明,以确保正确处理中文乱码问题。

Struts2中如何配置拦截器?
在Struts2中,拦截器(Interceptor)是一种动态拦截Action调用的对象,类似于Servlet中的过滤器。拦截器可以在Action的业务逻辑处理方法(execute())之前或之后执行特定的代码,以完成诸如权限检查、日志记录、数据转换等任务。

配置Struts2拦截器通常涉及以下步骤:

创建拦截器类:
首先,你需要创建一个Java类来实现拦截器。这个类需要实现com.opensymphony.xwork2.interceptor.Interceptor接口,或者继承com.opensymphony.xwork2.interceptor.AbstractInterceptor抽象类。你需要覆盖init()、destroy()和intercept(ActionInvocation invocation)方法。其中,intercept()方法是拦截器的核心,它决定了拦截器的行为。

java
public class MyInterceptor implements Interceptor {
public void init() {
// 初始化代码
}

public void destroy() {  
    // 销毁代码  
}  

public String intercept(ActionInvocation invocation) throws Exception {  
    // 拦截器逻辑  
    // ...  
    // 继续调用Action或其他拦截器  
    return invocation.invoke();  
}  

}
在struts.xml中配置拦截器:
接下来,你需要在Struts2的配置文件struts.xml中声明并使用你创建的拦截器。

<struts>  
    <package name="default" extends="struts-default">  
        <!-- 声明拦截器 -->  
        <interceptors>  
            <interceptor name="myInterceptor" class="com.example.MyInterceptor"/>  
        </interceptors>  
 
        <!-- 在Action中使用拦截器 -->  
        <action name="myAction" class="com.example.MyAction">  
            <!-- 引用拦截器 -->  
            <interceptor-ref name="myInterceptor"/>  
            <!-- 默认的拦截器栈也可以包含 -->  
            <interceptor-ref name="defaultStack"/>  
            <result name="success">/success.jsp</result>  
        </action>  
    </package>  
</struts>

在标签内声明你的拦截器,并在标签内通过标签引用它。通常,你会引用默认的拦截器栈defaultStack,它包含了Struts2框架提供的一些常用拦截器。你也可以创建自定义的拦截器栈来组织你的拦截器。

配置拦截器顺序:
拦截器的执行顺序是按照它们在标签内出现的顺序来决定的。如果需要,你可以通过调整标签的顺序来改变拦截器的执行顺序。

使用拦截器参数:
你还可以为拦截器添加参数,以控制其行为。这可以在标签内通过子标签实现。

通过以上步骤,你可以配置Struts2的拦截器来增强你的应用程序的功能和安全性。拦截器在Struts2中是一个强大的特性,它们可以用于各种目的,如输入验证、权限检查、日志记录等。

标签:拦截器,请求,乱码,Struts2,跳转,Action
From: https://blog.csdn.net/u012680662/article/details/136957635

相关文章

  • 配置跨域和拦截器仍会显示跨域
    问题复现我的项目是前后端分离的项目,后端配置了跨域以及拦截器跨域代码@ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{@ResourceprivateJwtFilterjwtFilter;/***不需要拦截地址*/publicstaticfinalStr......
  • Java中过滤器应用一统一处理请求和响应中文乱码
      请求/响应中文乱码演示写一个简单的Servlet进行测试,返回数据的时候,会出现中文乱码如下图所示。有时候请求的数据中如果包含中文,如果没有经过处理,同样会出现中文乱码。 解决办法出现中文乱码时,就可以考虑统一处理,如果不统一处理,在每一个Servlet中,如果数据返回中有中文,......
  • SpringMVC中的拦截器Interceptor实现
    之前的文章介绍过两个拦截器(分别参考MyBatis功能点之二(2):从责任链设计模式的角度理解插件实现技术和SpringAOP之源码分析)。本文介绍的拦截器实现与它们有何异同呢?在SpringMVC拦截器(Interceptor)使用中已知实现了HandlerInterceptor接口,MVC会自动拦截。如何实现的呢?改造......
  • SQL的nvarchar类型的中文内容,显示有乱码问题解决
    今天上线一个ASP项目升级为MVC的项目。原系统的ASP语言保存到SQLserver中nvarchar字段内容显示乱码了(显示有&#代码)。下图是SQLmanagementstudio的结果截图:左1列是经修正转化的可正常显示右1列OriStr为原数据库中nvarchar的内容。(ASP程序保存到数据库的原始数据)【产生乱......
  • HandlerInterceptor - 自定义拦截器
    自定义一个类实现HandlerInterceptor接口,加上@Component注解。根据需要重写方法publicinterfaceHandlerInterceptor{defaultbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{returntrue;......
  • springboot实现拦截器
    在springboot中实现拦截器分为两步:1、创建普通拦截器,需要实现HandlerInterceptor并重写接口中相关方法;2、将上一步创建的拦截器加入到springboot配置中,配置拦截规则下面是相关代码和demo请求:定义一个普通拦截器:importorg.springframework.stereotype.Component;importorg......
  • Redis中文乱码问题
    最近排查问题,发现之前的开发将日志写在redis缓存中(不建议这样做),我在查看日志的时候发现没办法阅读,详细是这样的:查阅资料后发现是进制问题,解决方法是启动客户端的时候将redis-cli改为redis-cli--raw现在查看缓存数据就变成这样的乱码了,这是由于我们写程序使用UTF-8的编......
  • C# 12 拦截器 Interceptors
    拦截器Interceptors是一种可以在编译时以声明方式替换原有应用的方法。这种替换是通过让Interceptors声明它拦截的调用的源位置来实现的。您可以使用拦截器作为源生成器的一部分进行修改,而不是向现有源编译添加代码。 演示使用.NET8创建一个控制台应用程序。并在Property......
  • Windows Wowershell 和CMD显示中文乱码的真实原因和解决方法(转)
    原文:https://blog.csdn.net/Curious_r/article/details/124540193作者:Curious_r中文互联网上一般搜素到的解决方案都是切换编码页。但编码页不是WinodwsPowerShell对中文字符乱码的真正原因。因为编码页只是针对不支持Unicode的程序采用的默认编码,按理说你的UTF8脚本不应该会......
  • IDEA + Tomcat控制台乱码问题
    1.进入IDEA安装目录,进入bin文件夹,找到idea64.exe.vmoptions和idea.exe.vmoptions这两个文件,在每个文件新增2行,加入-Dfile.encoding=UTF-8和-Dconsole.encoding=UTF-82.打开IDEA,file—settings—Editor—FileEncodings的GlobalEncoding和ProjectEncoding和Defaultenc......