最近练习了一下spring mvc,计划以后多用,所以做做笔记。
● 第一个头疼的问题
模仿官方的例子搭建一个工程,居然死在不能访问首页上,折腾了两天才发现问题所在。
在web.xml里配置:
[code="xml"]appServlet/
spring-mvc配置文件里:
[code="xml"]
然后访问首页,一直打不开,访问其它页面完全没问题。再做一个测试,加上一行配置:
[code="xml"]
然后访问http://localhost:8080/a,很正常。但http://localhost:8080/就是不行。不管怎么google都找不到答案,郁闷了两天后突然发觉了问题:
在web的根目录有一个index.html文件,删掉了就没事!
● 简化RequestMapping
如何去掉每个方法头顶的RequestMapping(value="xxx")中的xxxx,因为一般都会与方法名相同,再写就多余了。像struts2的convention插件那样就挺好。
Google了很久,别人也找不到答案。
●事务问题
在Controller中调用service层的方法访问数据库时,出现当前线程没有session的问题,很诡异,之前用struts2时很正常。在老外的论坛中找到一个解决方法:在DispatcherServlet的配置文件中添加。问题是解决了,但这个方法很奇怪,因为已经在applicationContext.xml中配置了tx。
还不明白是怎么回事。
后来找到解决方案。造成事务失效的原因是,mvc的配置文件先被处理,Service类此时还没有进行事务增强处理,所以不具备事务的能力,而轮到applicationContext.xml被处理时,已经被处理过的组件将被忽略。解决方法是,mvc的配置文件中不进行Service类的扫描:
[code="xml"]
<context:component-scan base-package="xx.xx">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
</context:component-scan>
后来发现,其实更好的方法是,既然同时用了spring和spring MVC,没必要搞出一个applicationContext.xml和一个spring-mvc.xml,应该统一,不要重复配置
●中文乱码问题
直接用@ResponseBody输出字符串会有中文乱码出现,原因可Google到,其中一个解决方法是:在mvc的配置文件中添加以下配置(注意,必须添加在之前。并且,只添加StringHttpMessageConverter是不行的,那样输出json时会报错,所以只好也添加了MappingJacksonHttpMessageConverter,如果用到其它的Converter估计同样要添加。
这不是一个好的解决办法。)
[code="xml"] text/plain;charset=UTF-8application/json;charset=UTF-8
目前比较好的方法可能就是修改源码并重新编译了,将StringHttpMessageConverter类中的Charset.forName("ISO-8859-1");修改为Charset.forName("utf-8");这样最保险,不会引起其它错误,只是编译源码有点麻烦。
● 配置异常处理
[code="xml"]error/expectederror/unexpected
● 页面传入集合参数
[code="java"]//: test/params?xxIds=2,3,4 或 test/param2?xxIds=2&xxIds=3&xxIds=4
@RequestMapping("/test/params")
public @ResponseBody String params(int[] xxIds){
for (int id: xxIds){
//....
}
return "xxx";
}
● 页面传入bean
[code="java"]//:test/bean?s1=abc&s2=ddd&i=45&bool=1
@RequestMapping("/test/bean")
public @ResponseBody String bean(Bean bean){
return bean != null ? bean.toString() : "null";
}
● 页面传入List和Map
[code="java"]/*
List和Map不能直接传,必须绑定到某个对象上,而且,在url中指定参数时,格式有点怪异:List必须指定下标,格式为listName[i].prop=xx,Map的键也必须用中括号[],不能直接用点,格式为mapName[keyName]=value
*/
● 向页面传出json
记得添加相应的jackson依赖包,此外无需额外配置。
[code="java"]//:test/json
@RequestMapping("/test/json")
public @ResponseBody Bean json(){
Bean bean = new Bean();
bean.setS1("abc");
bean.setS2("ddd");
return bean;
}
●hibernate代理对象的json转换
用session.get(id)来取出非代理对象,而不要用session.load(id)来取出代理对象。
●让Controller接受日期参数
在Controller类中添加如下方法:
[code="java"]@InitBinder
protected void initBinder(WebDataBinder binder){
binder.registerCustomerEditor(Date.class, new PropertyEdiotrSupport(){
public void setAsText(String value){
setValue(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value));
}
public void getAsText(){
return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format((Date)getValue()));
}
});
}
分享到:
相关推荐
spring MVC笔记spring MVC笔记spring MVC笔记spring MVC笔记
Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建模型-视图-控制器(Model-View-Controller)架构的应用程序提供了强有力的支持。...文档和博客如《spring mvc笔记》可以帮助初学者更好地理解和应用这个框架。
spring mvc 基础笔记 源代码. 下载后倒入到eclipse当中。 请重新倒入Tomcat安装目录lib文件夹下的servlet-api.jar. 如果是jQuery.js文件有红色叉表示错误的话请无视。
将应用程序分为 Controller、Model、View 三层,Controller 接收客户端请求,调用 ...Spring MVC 就是对这套流程的封装,屏蔽了很多底层代码,开放出接口,让开发者可以更加轻松、便捷地完成基于 MVC 模式的 Web 开发。
在这个学习笔记中,我们将深入探讨如何在Spring MVC中处理JSON格式的数据,包括输入和输出。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于前后端数据传输。 1. **JSON格式简介** ...
本学习笔记主要围绕Spring MVC的使用、配置和核心组件进行深入探讨,旨在帮助开发者更好地理解和掌握这一框架。 在Spring MVC中,Model代表业务逻辑和数据,View负责数据的展示,而Controller处理用户请求,协调...
这个压缩包“Spring MVC学习笔记MD.7z”包含了作者在学习Spring MVC过程中的笔记、源代码以及相关文档,非常适合初学者或希望深入理解Spring MVC的开发者。 首先,`SpringMVC-Study.7z` 可能是作者整理的Spring MVC...
以下是对Spring MVC学习笔记的详细解释: 1. **创建项目**: 创建Spring MVC项目通常从构建一个Maven工程开始。在命令行中使用Maven的`archetype:generate`命令创建一个JEE5的Web工程。在提供的例子中,使用了特定...
### Spring MVC 学习笔记 #### 一、Spring MVC 核心组件与工作流程 **Spring MVC** 是 **Spring Framework** 的一个重要模块,主要用于构建基于 Web 的应用程序。它提供了简化 Web 开发的一系列功能,包括但不限于...
Spring MVC是Spring框架的一部分,用于构建Web应用程序的模型-视图-控制器(Model-View-Controller)实现。Spring MVC通过分离业务逻辑、数据模型和视图界面来简化Web应用程序的开发。开发者可以使用注解或XML配置的...
根据SpringMVC狂神说公众号做的笔记,把他做成了md方便大家阅读
**Spring MVC 学习笔记 一 创建项目** 在IT领域,Spring MVC是Java Web开发中的一个强大框架,它简化了构建交互式Web应用程序的过程。本笔记将深入探讨如何创建一个基本的Spring MVC项目,让我们开始吧。 首先,...
Spring 3.0 MVC 是一个用于构建 Web 应用程序的全功能模型-视图-控制器(MVC)框架,它是 Spring 框架的一个核心模块。Spring MVC 提供了一种可插拔的架构,允许开发者选择使用内置的 Spring Web 框架,或者与其他 ...
Spring MVC是Spring框架的一部分,它是用于构建Web应用程序的一个模型-视图-控制器(Model-View-Controller,简称MVC)框架。Spring MVC的主要目的是将Web层的业务逻辑从表示层中分离出来,使得各个层次间的依赖性减少...
Spring、Spring MVC和MyBatis是Java EE中最受欢迎的框架之一。这些框架的整合使用广泛用于构建企业级应用。下面将详细介绍这些框架的核心概念、模块组成、实例化Bean的方式以及依赖注入的机制和优势。 Spring框架...
**Spring MVC 概述** Spring MVC 是 Spring 框架的一部分,它是一个用于构建 Web 应用程序的轻量级、模型-视图-控制器(MVC)框架。Spring MVC 提供了处理 HTTP 请求和响应的机制,以及解耦业务逻辑和用户界面的...