GVKun编程网logo

Spring MVC:如何修改从Spring控制器发送的响应?(springmvc的控制器方法中如何实现转发和重定向)

28

此处将为大家介绍关于SpringMVC:如何修改从Spring控制器发送的响应?的详细内容,并且为您解答有关springmvc的控制器方法中如何实现转发和重定向的相关问题,此外,我们还将为您介绍关于j

此处将为大家介绍关于Spring MVC:如何修改从Spring控制器发送的响应?的详细内容,并且为您解答有关springmvc的控制器方法中如何实现转发和重定向的相关问题,此外,我们还将为您介绍关于java day62【 响应数据和结果视图 、 SpringMVC 实现文件上传 、 SpringMVC 中的异常处理 、 SpringMVC 中的拦截器 】、java – Spring MVC:如果我在控制器动作中启动线程会发生什么?、JavaEE——SpringMVC(13)--SpringMVC运行流程 在 Spring 的环境下使用 SpringMVC、JSON – Spring MVC:如何将json数据发布到spring MVC控制器的有用信息。

本文目录一览:

Spring MVC:如何修改从Spring控制器发送的响应?(springmvc的控制器方法中如何实现转发和重定向)

Spring MVC:如何修改从Spring控制器发送的响应?(springmvc的控制器方法中如何实现转发和重定向)

我有一个使用Spring MVC 3.1.3的应用程序,以及使用Dojo
1.4开发的UI。该应用程序有几个控制器可以处理通过上载的二进制文件dojo.io.iframe.send。控制器发送一个json响应,该响应必须包含

<html><body><textarea>{my json response}</textarea></body></html>.

我已经实现了在web.xml中定义的自定义过滤器:

<filter>    <filter-name>dojoIframeFilter</filter-name>    <filter-class>com.app.web.MultipartAjaxFilter</filter-class></filter><filter-mapping>    <filter-name>dojoIframeFilter</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>

过滤器的doFilter具有此行为,该行为取自http://www.oracle.com/technetwork/java/filters-137243.html

public void doFilter(ServletRequest request, ServletResponse response,        FilterChain chain) throws IOException, ServletException {    if (request.getContentType() != null            && request.getContentType().contains("multipart/form-data")) {        CharResponseWrapper wrapper = new CharResponseWrapper((HttpServletResponse) response);        chain.doFilter(request, wrapper);        log.info(wrapper.toString());        //Modify response here    }     else {        chain.doFilter(request, response);    }}

包装器的输出为空。我还尝试了许多其他组合,例如为spring的调度程序servlet放置自定义过滤器,取消了doFilter内的if块,这些都不起作用。我还尝试编写Spring拦截器,但也失败了。有人可以提出其他想法吗?

提前致谢。

更新: 我禁用了spring安全性,并使用普通spring mvc进行了测试,但是问题仍然存在。我修改了标题和问题描述。

答案1

小编典典

朋友,除了成功修改ServletResponse之外,我们还需要子类ServletOutputStream。请参阅http://docstore.mik.ua/orelly/xml/jxslt/ch08_04.htm了解详细解决方案。

java day62【 响应数据和结果视图 、 SpringMVC 实现文件上传 、 SpringMVC 中的异常处理 、 SpringMVC 中的拦截器 】

java day62【 响应数据和结果视图 、 SpringMVC 实现文件上传 、 SpringMVC 中的异常处理 、 SpringMVC 中的拦截器 】

第 1 章 响应数据和结果视图

1.1 返回值分类

1.1.1 字符串

1.1.2 void

1.1.3 ModelAndView

1.2 转发和重定向

1.2.1 forward 转发

1.2.2 Redirect 重定向

1.3ResponseBody 响应 json 数据

1.3.1 使用说明

1.3.2 使用示例

第 2 章 SpringMVC 实现文件上传

2.1 文件上传的回顾

2.1.1 文件上传的必要前提

2.1.2 文件上传的原理分析

2.1.3 借助第三方组件实现文件上传

2.2springmvc 传统方式的文件上传

2.2.1 说明

2.2.2 实现步骤

2.2.2.1 第一步:拷贝文件上传的 jar 包到工程的 lib 目录

2.2.2.2 第二步:编写 jsp 页面

2.2.2.3 第三步:编写控制器

2.2.2.4 第四步:配置文件解析器

2.3springmvc 跨服务器方式的文件上传

2.3.1 分服务器的目的

2.3.2 准备两个 tomcat 服务器,并创建一个用于存放图片的 web 工程

2.3.3 拷贝 jar 包

 

2.3.4 编写控制器实现上传图片

2.3.5 编写 jsp 页面

2.3.6 配置解析器

第 3 章 SpringMVC 中的异常处理

3.1 异常处理的思路

3.2 实现步骤

3.2.1 编写异常类和错误页面

3.2.2 自定义异常处理器

3.2.3 配置异常处理器

3.2.4 运行结果:

第 4 章 SpringMVC 中的拦截器

4.1 拦截器的作用

4.2 自定义拦截器的步骤

4.2.1 第一步:编写一个普通类实现 HandlerInterceptor 接口

4.2.2 第二步:配置拦截器

4.2.3 测试运行结果:

 4.3 拦截器的细节

4.3.1 拦截器的放行

4.3.2 拦截器中方法的说明

4.3.3 拦截器的作用路径

4.3.4 多个拦截器的执行顺序

4.4 正常流程测试

4.4.1 配置文件:

4.4.2 拦截器 1 的代码:

4.4.3 拦截器 2 的代码:

4.4.4 运行结果:

4.5 中断流程测试

4.5.1 配置文件:

4.5.2 拦截器 1 的代码:

4.5.3 拦截器 2 的代码:

4.5.4 运行结果:

4.6 拦截器的简单案例(验证用户是否登录)

4.6.1 实现思路

4.6.2 控制器代码

4.6.3 拦截器代码

 

java – Spring MVC:如果我在控制器动作中启动线程会发生什么?

java – Spring MVC:如果我在控制器动作中启动线程会发生什么?

在Spring MVC Controller中我想启动一个在我的控制器发送响应时继续工作的线程.这适用于spring-mvc吗?

最佳ReaGrds,
海因里希

最佳答案
是的,它会起作用.在我工作的一个Web应用程序上,我需要根据用户的操作发送通知电子邮件.我在服务上添加了一个post-commit拦截器,并在一个单独的线程中触发了电子邮件. (在我的情况下,恰好比将代码放在控制器中更清洁,因为我只希望在事务提交时发生.)

你确实需要确保线程实际上在某个时刻停止运行,或者通过将守护进程设置为true(如果没有通知就停止服务器杀死线程)或者确保其run方法中的代码总是在某个时候终止.

你最好使用线程池而不是创建新线程,这样你就不会冒资源耗尽的风险(线程停顿通常不是独立事件,如果线程挂起,下一个线程可能也会挂起,所以你需要一种减少损失的方法).使用@Async注释的方法将使用您可以配置的执行程序执行,如the Spring documentation所示.

JavaEE——SpringMVC(13)--SpringMVC运行流程 在 Spring 的环境下使用 SpringMVC

JavaEE——SpringMVC(13)--SpringMVC运行流程 在 Spring 的环境下使用 SpringMVC

需要进行 Spring 整合 SpringMVC 吗 ?
还是否需要再加入 Spring 的 IOC 容器 ?
是否需要再 web.xml 文件中配置启动 Spring IOC 容器的 ContextLoaderListener ?
spring的IOC

package com.atguigu.springmvc;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

	@Autowired
	private HelloWorld helloWorld;
	
	public UserService() {
		System.out.println("UserService Constructor...");
	}
	
}

  

SpringMVC的IOC

package com.atguigu.springmvc;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloWorld {

	@Autowired
	private UserService userService;
	
	public HelloWorld() {
		System.out.println("HelloWorld Constructor...");
	}
	
	@RequestMapping("/helloworld")
	public String hello(){
		System.out.println("success");
		System.out.println(userService);
		return "success";
	}
	
}

  

1. 需要: 通常情况下, 类似于数据源, 事务, 整合其他框架都是放在 Spring 的配置文件中(而不是放在 SpringMVC 的配置文件中).
实际上放入 Spring 配置文件对应的 IOC 容器中的还有 Service 和 Dao.
2. 不需要: 都放在 SpringMVC 的配置文件中. 也可以分多个 Spring 的配置文件, 然后使用 import 节点导入其他的配置文件

问题: 若 Spring 的 IOC 容器和 SpringMVC 的 IOC 容器扫描的包有重合的部分, 就会导致有的 bean 会被创建 2 次.
解决:
  1. 使 Spring 的 IOC 容器扫描的包和 SpringMVC 的 IOC 容器扫描的包没有重合的部分.
  *2. 使用 exclude-filter 和 include-filter 子节点来规定只能扫描的注解

springmvc.xml

<context:component-scan base-package="com.atguigu.springmvc" use-default-filters="false">
		<context:include-filter type="annotation" 
			expression="org.springframework.stereotype.Controller"/>
		<context:include-filter type="annotation" 
			expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
	</context:component-scan>

  

bean.xml

<context:component-scan base-package="com.atguigu.springmvc">
		<context:exclude-filter type="annotation" 
			expression="org.springframework.stereotype.Controller"/>
		<context:exclude-filter type="annotation" 
			expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
	</context:component-scan>

  

SpringMVC 的 IOC 容器中的 bean 可以来引用 Spring IOC 容器中的 bean.
返回来呢 ? 反之则不行. Spring IOC 容器中的 bean 却不能来引用 SpringMVC IOC 容器中的 bean!

 

JSON – Spring MVC:如何将json数据发布到spring MVC控制器

JSON – Spring MVC:如何将json数据发布到spring MVC控制器

我在将jsp数据从jsp发布到控制器时遇到问题.我每次尝试都会收到ajax错误错误请求.我是JSON的新手,我真的不知道我做错了什么.我搜索并尝试了一些我可以在这个网站找到的样本,但我仍然有问题.

在我的控制器中:

@RequestMapping (method = RequestMethod.POST,headers ={"Accept=application/json"},value = "/form")
public String postJournalEntry (@RequestParam ("json") String json,Model model) {
    System.out.println(json);
    return "successfullySaved";
}

在我的jsp中:

$("#btnPostGlEntry").click(function () {
    var glEntries = '{"glEntries":[{"generalLedgerId":"1"},{"accountId":"4"},{"amount":"344.44"},{"description":"Test Entry"},{"debit":"Yes"}]}';
    $.ajax({
        type: "POST",contentType: "application/json",dataType: "json",url: contextpath + "/generalLedger/journalEntries/form",data : JSON.stringify(glEntries),success: function(data) {
            alert("Success!!!");
        },error: function (jqXHR,textStatus,errorThrown) {
            alert(jqXHR + " : " + textStatus + " : " + errorThrown);
        }
    });
});

注意:我甚至不确定我的控制器中的功能是否正确.我认为我的控制器和我的ajax是错误的.请帮忙.

最佳答案
如果你想将你的JSON反序列化到某个类中,那么你必须定义这样的方法(并且不要忘记添加jsonConverter,如前面的答案):

.... method(@RequestBody MyClass data){ ... }

但是,如果您希望您的方法接受JSON作为String而不是这样做:

.... method(@RequestBody String json){ ... }

所以,基本上,如果你发布JSON,这意味着JSON不是一个参数,它是请求的主体.最后你必须使用@RequestBody注释,而不是@RequestParam.

你可以在这里找到Spring Mvc和JSON的精彩视频教程:sites.google.com/site/upida4j/example

今天关于Spring MVC:如何修改从Spring控制器发送的响应?springmvc的控制器方法中如何实现转发和重定向的介绍到此结束,谢谢您的阅读,有关java day62【 响应数据和结果视图 、 SpringMVC 实现文件上传 、 SpringMVC 中的异常处理 、 SpringMVC 中的拦截器 】、java – Spring MVC:如果我在控制器动作中启动线程会发生什么?、JavaEE——SpringMVC(13)--SpringMVC运行流程 在 Spring 的环境下使用 SpringMVC、JSON – Spring MVC:如何将json数据发布到spring MVC控制器等更多相关知识的信息可以在本站进行查询。

本文标签: