Tag: spring mvc

长轮询冻结浏览器并阻止其他ajax请求

我试图在我的Spring-MVC Web App中实现长轮询,但是在4-5继续AJAX请求之后它冻结了我的浏览器和其他请求。我不知道什么是在这里是我的相关代码。 控制器方法:(服务器端): – @Asynchronous @RequestMapping(“/notify”) public @ResponseBody Events notifyEvent(HttpServletRequest request) { Events events = null; try { events = (Events) request.getSession(false).getServletContext().getAttribute(“events”); System.out.println(“Request Came from” + ((com.hcdc.coedp.safe.domain.User) request.getSession(false).getAttribute(Constants.KEY_LOGGED_IN_USER)).getLoginId()); if (!events.getTypeOfEvents().isEmpty()) { System.out.println(“Removing older entries”); events.getTypeOfEvents().clear(); } while (!events.isHappend()) { //Waiting for event to happen. } events = Events.getInstance(); events.setHappend(false); request.getSession(false).getServletContext().setAttribute(“events”, events); }catch (Exception e) […]

Spring MVC将一个值列表从JSP页面传递给控制器

如果我在 这样的HTML: 我知道在servlet中我可以使用以下方法获取值: String[] values = request.getParameterValues(“myValues”); 如何使用Spring MVC做类似的事情?

在spring mvc控制器中使用Services和DAO

我正在构建一个Web应用程序,主要构成来自后端/数据库的数据的CRUD操作。 在某些情况下,我必须编写业务逻辑(我确信随着我们深入开发,我们将构建更多业务逻辑)。 目前,我创建的每个UI屏幕都创建了一个模型类,Service类,DAO类,一个控制器(本质上是它的servlet)和一堆jsp页面。 在大多数情况下,服务类只是从DAO调用方法来传递模型对象。 基本上我们使用模型类来映射UI屏幕中的数据。 因此,控制器将在提交表单时填充模型对象。 我已经开始使用服务类来保持从Web层到DAO层的分离层。 但有时我觉得服务类只是添加不必要的API调用级别,我认为我可以将DAO注入Controller并更快地完成任务。 我想仅在需要执行其他业务逻辑时才使用服务类。 如果你必须设计一个应用程序,你考虑使用控制器 – > DAO vs controller-> Service-> DAO控制流程?

接口和@RequestBody

我目前正在开展一个项目,该项目允许用户在给定的时间段内(通过网络)预订所选资源的使用。 在这个程序中,我试图遵循Spring对接口编程的哲学(以及通用的最佳实践),因此我尝试在具体类之间重复function的任何地方使用接口。 我创建的一个接口称为BookableResourceController,它指定控制器处理所需的任何类型资源所需的最低function所需的方法。 我还使用了第二个接口BookableResource,它识别哪些对象模拟了允许通过应用程序预订的资源。 我目前遇到的问题是,BookableResourceController定义的一些方法使用@RequestBody映射将JSON对象转换为方法参数,并且由于Jackson只能将JSON转换为“SimpleType”对象,因此我收到错误我将输入参数指定为BookableResource。 @RequestMapping(value=”/delete.html”, method = RequestMethod.POST) public ModelAndView processDeleteResource( @RequestBody BookableResource resource); 无法构造org.codehaus.jackson.map.type.SimpleType的实例,问题:抽象类型只能使用其他类型信息进行实例化 据我所知,这个错误意味着我需要定义BookableResource的特定实现,这意味着我很可能需要从接口中排除这些方法,即使任何用于此目的的控制器都需要这些方法。 我要问的是,是否有人知道如何将接口定义为使用JSON的@RequestBody映射所期望的对象,或者是否有人建议如何构造我的控制器接口以包含这些方法? 干杯

Beanvalidation组序列不起作用

我正在使用spring 4.1,hibernatevalidation器5.1.3进行我的项目。 我一直试图让GroupSequence从最近2天开始工作。 我已经提到了validation文档,博客和stackoverflow上发布的一些问题。 请看下面的课程。 当我从注释中删除GroupSequence和groups时,所有validation消息都会出现在一起,即对名称和其他字段的所有检查都会一起触发。 让我们说名字字段 – 我想首先validation@NotBlank和@Size,然后名称应该与模式匹配,最后由于数据库调用应该检查@UniqueName。 为此,我按照文档和答案中的建议创建了GroupSequence。 但是当触发validation时,只会为名称触发@NotBlank和@Size。 当我从剩余的注释中删除组值时,它们开始工作但是所有错误消息都会立即显示,这是我不想要的。 我希望使用组指定的注释First.class在Second.classvalidation之前一起触发。 我不明白为什么用group指定的validation没有被解雇。 有人可以指导我。 @GroupSequence({MyForm.class, OrderedChecks.class}) public class MyForm { @NotBlank @Size(min = 2, max = 40) @Pattern(regexp = “^[\\p{Alnum} ]+$”, groups = First.class) @UniqueName(groups = Second.class)//Custom validation private String name; @NotBlank @Size(min = 2, max = 40) private String url; @NotBlank @Size(max = […]

如何触发预定的Spring批处理作业?

我希望能够使用REST控制器开始我的工作,然后当作业启动时,它应该按计划运行,直到我再次使用REST停止它。 所以这是我的控制器: @RestController public class LauncherController { @Autowired JobLauncher jobLauncher; @Autowired Job job; @RequestMapping(“/launch”) public String launch() throws Exception { … jobLauncher.run(job, jobParameters); } 这是Batch conf的一部分: @Configuration @EnableBatchProcessing @EnableScheduling public class BatchConfiguration { @Autowired public JobBuilderFactory jobBuilderFactory; @Autowired public StepBuilderFactory stepBuilderFactory; @Scheduled(cron = “0/5 * * * * ?”) @Bean public Job job() { return […]

Spring Controller:使用域对象作为@RequestBody

我有一个域对象类User (它是一个JPA实体): @Entity public class User { private String name; private boolean enabled = true; // getters/setters } 我正在尝试使用Spring 3 MVC提供REST API以允许客户端创建新用户: @Controller public class UserController { @RequestMapping(value=”/user”, method=RequestMethod.POST) @ResponseBody public String createRealm(@RequestBody User user) { user.setEnabled(true); // client is not allowed to modify this field userService.createUser(user); … } } 它工作得很好,但我不知道将域对象用作@RequestBody是否是一个好主意,因为我必须保护一些不应被客户端直接修改的字段(即在这种情况下为“enabled”)。 这些替代方案的优缺点是什么: 使用域对象并保护不允许用户修改的字段(例如,将它们设置为null或手动设置为其默认值) 使用一组新的辅助对象 (类似于DTO),例如仅包含我想通过REST […]

将messageSource移动到applicationContext会导致默认的messageSource在dispatcher-servlet上下文中不可见

我有一个webapp,我在web.xml中定义了基本的dispatcher-servlet上下文,并加载了applicationContext 。 我在dispatcher-servlet定义了messageSource ,并将其注入控制器。 我也在applicationContext定义了我的服务,我可以将它们注入我的控制器(在dispatcher-servlet上下文中定义)。 但是当我将messageSource定义移动到applicationContext以便某些服务可以解析消息时, dispatcher-servlet上下文显示它没有找到messageSource bean并且正在使用默认值,因此控制器会注入错误的bean。 知道为什么applicationContext的messageSource定义对dispatcher-servlet上下文不可见? 我看到我的messageSource bean被加载到日志的applicationContext部分: 2058 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory – Creating shared instance of singleton bean ‘messageSource’ 2058 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory – Creating instance of bean ‘messageSource’ … 2082 [main] DEBUG org.springframework.web.context.support.XmlWebApplicationContext – Using MessageSource [mycommons.spring.ResourceBundleMessageSourceWithDefaultResolution: basenames=[messages]] 我在加载dispatcher-servlet看到这个日志: 3858 [main] DEBUG org.springframework.web.context.support.XmlWebApplicationContext – Unable to locate MessageSource with name […]

Spring Boot:为RestControllers配置url前缀

我不是Spring专家,而且它是黑盒子,即使使用Spring的文档,我也很难自己解决问题。 有时,我只是不知道我正在寻找什么才能开始我的搜索…… 在我的Spring Boot应用程序中,我试图弄清楚如何为我的所有RestControllers配置一个唯一的url前缀。 我真正想要的就是从根上下文“/”中提供我的静态内容,但是可以从不同的上下文访问我的RestController端点,比如“/ api / *”。 我知道如何通过application.properties更改应用程序的默认上下文,但这不是我想要的。 当谈到servlet,映射等时,我在这里表现出我的无知,因为我说我正试图为两种不同类型的内容获得两种不同的上下文。

将大型应用程序从Spring 3.0.x升级到4.1.x – 我应该遵循哪些最佳实践/程序?

我已经使用Spring大约一年了,而且我很舒服地使用它,但是我在大多数情况下都避免跳过引擎盖。 我的任务是升级从Spring 3.0.x到Spring 4.1.x的大型关键任务企业应用程序。 制作像这样的大型,不可避免的挑剔和复杂变化的最佳实践是什么? (任何超出‘扔进jar文件,看看会发生什么’和‘阅读文档: http : //spring.io/ ‘会非常有帮助) 系统: Java 6 – jax-b / -p / -ws /,Apache Commons, Spring 3.0.5 – 通常(核心,上下文,bean等),MVC,AOP,ORM,JDBC,Acegi Hibernate 3.5 雄猫6 0unit testing或任何类型的自动测试。 Maven依赖管理和构建自动化。 半控制器使用注释进行请求响应映射,一半使用simpleFormController模式,一半使用自动assembly,一半使用xml连接。 数百个观点,数十个控制器。 到目前为止我采取的步骤: 准备一个(主要是自动化的)回归测试脚本(以便我可以确保我没有破坏任何东西) 我开始一次阅读“升级指南”,“升级到3.1”,“升级到3.2”,并对听起来熟悉的事情做笔记,但我想我需要更深入地了解我的系统,以及一般的spring,在我对此作为一种详尽的方法充满信心之前。 这通常感觉像是一种随意的方法,这不是我想要的这种复杂的变化。 我的问题: 对于像这样的工作,哪些步骤/程序被认为是“最佳实践”? 对你这样的工作来说,有什么东西可以作为’陷阱’吗?