我在ssh 项目中使用过滤器filter 拦截一个请求,然后在filter中想获取request(使用),然后获取请求体。
filter中部分代码如下:
for (int i = 0; i < contentLength;) try { int readlen = request.getInputStream().read(buffer, i, contentLength - i); requestPacket.append(new String(buffer)); if (readlen == -1) { return null; } i += readlen; } catch (IOException ioexception) { ioexception.printStackTrace(); } finally { // logger.info("Json Request:" + requestPacket); System.out.println("Json Request:" + requestPacket); }
但是request 的inputstream中无内容,为什么会无内容呢?
请求的方式是post,而且确实设置了请求体,怎么会没有内容呢?
测试了半天才发现是struts2 的原因:
因为struts2 的过滤器:org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
被struts2 的过滤器拦截之后,请求体就为空了。
如何解决这个问题呢?
方式一:把自定义的过滤器 放在struts的filter之前;
方式二:修改struts2 过滤器的url pattern:
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
相关推荐
3. **配置web.xml**:在`web.xml`中配置Struts2的核心过滤器`org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter`。同时,确保配置了正确的Context路径和其他必要配置。 4. **配置struts.xml*...
在Struts2中,你可以直接在Action类中声明与表单字段相对应的属性,Struts2的自动数据绑定机制会将表单参数映射到这些属性。例如,如果表单有字段`name`和`email`,Action类可以如下所示: ```java public class ...
在`web.xml`中配置Struts2 Filter,但请注意,由于我们使用了注解,此文件可以非常简洁,甚至可省略。 ### 6. 运行项目 通过创建的Jetty启动类运行项目,服务器会加载并解析Struts2 Annotation定义的Action,处理...
在Struts2中,所有的Action调用都是通过`ActionProxy`来完成的。 通过以上内容,我们可以看到Struts2是一个功能强大且易于使用的Java Web开发框架,它简化了Web应用程序的开发过程,使开发者能够更专注于业务逻辑的...
以下是对Struts2中文件上传及`codeFilter`的详细解释: **1. Struts2文件上传机制** Struts2提供了内置的支持来处理文件上传,主要利用了Apache Commons FileUpload库。在Struts2的Action类中,可以定义一个字段,...
- **开源性**:Struts2是开源项目,这意味着开发者可以自由地获取其源代码并进行二次开发或修复潜在的问题。 - **缺点**: - **代码量较大**:尽管相对于Struts1.x有所改善,但仍然存在一定的代码冗余问题。 - *...
3. **创建Action类**: Struts2中的业务逻辑由Action类执行。创建一个Action类,实现`com.opensymphony.xwork2.ActionSupport`接口,并重写`execute()`方法。例如: ```java public class HelloWorldAction extends...
Struts2内置了对OGNL的支持,可以方便地在JSP页面中使用OGNL表达式获取模型数据。 - **标签库**:Struts2提供了丰富的标签库,可以帮助开发者快速构建表单和页面元素,提高开发效率。 - **拦截器**:拦截器是Struts2...
OGNL是一种强大的表达式语言,用于在Struts2中获取和设置对象属性,以及执行复杂的逻辑操作。在视图层,它可以用来动态地渲染页面内容。 14. **Struts投影** 投影是Struts2中将对象属性映射到视图组件的方式,...
- **配置web.xml**:在`WEB-INF`目录下的`web.xml`中配置Struts2的核心过滤器`<filter>`和`<filter-mapping>`。 - **创建Action类**:编写处理用户请求的Java类,继承自`ActionSupport`,并实现相应的方法。 - **...
在Struts1中,如果需要实现相同的功能,则需要向Struts1的底层实现BeanUtil注册类型转换器,而在Struts2中则变得更加简单和直观。 4. **多样的视图技术支持**:Struts2不仅支持JSP作为视图层,还支持FreeMarker、...
总之,"Struts项目"是一个全面展示Struts2框架功能的实际应用,它涉及到了MVC模式的实现、业务逻辑处理、用户界面展示等多个方面,对于学习和理解Struts2以及Java Web开发具有很高的实践价值。通过研究这个项目,...
本文将通过一个具体的示例来详细介绍如何在Struts2项目中配置过滤器。 #### 二、过滤器配置实例分析 ##### 2.1 web.xml配置解析 在给定的web.xml配置文件中,可以看到对`SessionInvalidate`过滤器进行了定义和...
下面将详细介绍如何解决Struts2中的中文乱码问题。 #### 一、理解中文乱码的原因 中文乱码主要出现在以下几个方面:页面乱码、Action乱码以及数据库乱码。具体来说: 1. **页面乱码**:指用户在浏览器中看到的...
2. **全局变量(Global Variables)**:在Struts2中,全局变量通常是指在struts.xml配置文件中定义的可全局访问的对象,如常量、拦截器栈和结果类型。这些配置可以提高代码的复用性和可维护性。 3. **Action转化...
在Eclipse这个流行的Java集成开发环境中配置Struts2,可以帮助开发者更高效地构建动态Web项目。以下将详细介绍如何在Eclipse中成功配置Struts2。 1. **环境准备**: - 首先确保你的系统上已经安装了Java JDK和...
我们可以创建资源文件,如`message.properties`和`message_zh_CN.properties`,然后在Action中使用`getText`方法获取对应的语言消息。 最后,Struts2的插件系统非常强大,例如JSON插件可以让我们轻松地将Action结果...
这个"struts2入门demo"是为初学者准备的一个基础实践项目,旨在帮助理解Struts2的核心概念和工作流程。让我们深入探讨一下Struts2的关键知识点。 首先,Struts2是一个基于MVC(Model-View-Controller)架构的框架,...
8. **编写配置文件**:Struts2使用struts.xml配置文件来定义Action、结果类型、拦截器等。例如: ```xml <struts> <package name="default" namespace="/" extends="struts-default"> <result name="success">/...
3. **创建Action**: Struts2中的Action是业务逻辑的执行者,它负责处理用户的请求。你可以创建一个继承自`com.opensymphony.xwork2.ActionSupport`的类,然后重写execute方法来实现业务逻辑。同时,可以通过注解来...