springmvc

6.盘点springmvc的常用接口之Converter(中篇)

99封情书 提交于 2019-12-02 17:26:24
6.盘点springmvc的常用接口之Converter(中篇)### 上一章简单介绍了 Converter 接口的使用, Converter 接口是用于明确原类型和目标类型之间的转换。 那么怎么才能从原类型转换到某一类的目标类型呢?比如字符串转枚举类型,我有PersonType和PersonStatus两个枚举类型,那么就得有两个转换器 PersonTypeConverter 、 PersonStatusConverter ,枚举类型再多点, Converter 也跟着多。所以Spring提供了一个工厂接口 org.springframework.core.convert.converter.ConverterFactory 。 接口说明 public interface ConverterFactory<S, R> { <T extends R> Converter<S, T> getConverter(Class<T> targetType); } 其中泛型S是source原类型,R是目标类型, T是R的子类型。 和一般的工厂模式一样,这就是提供给我们一个根据子类型返回相应转换器的工具。 如果按 Converter 的思路做,代码应该是这样子: public class StringToPersonStatusConverter implements Converter

盘点springmvc的常用接口

不羁岁月 提交于 2019-12-02 17:26:03
盘点springmvc的常用接口### springmvc是如今非常流行的web开发框架之一。我个人非常喜欢它约定优于配置的理念。它暴露出非常多的接口,可以让用户自定义自己的实现,从而可以满足大家的各种各样的需求。 而springmvc也不仅仅是一个“插板”。它也提供了非常多常用的接口实现,一般地,使用它自带的实现类也即可满足大部分的需求了。 看了周边好多开发者使用springmvc,真的让我非常哭笑不得。大家都把springmvc这么神奇的框架,当做servlet来使用,依然是 public void demo(HttpServletRequest request, HttpServletResponse response) { String name = request.getParameter("name"); if (StringUtils.hasText(name)) { try { InputStream is = request.getInputStream(); // do something response.getWriter().write("content"); } catch (IOException e) { e.printStackTrace(); } } } 有些人会说,这样写也没什么不对啊,业务照样可以正常跑啊。 这就涉及到代码侵入性的问题了

3.盘点springmvc的常用接口之HttpMessageConverter

我们两清 提交于 2019-12-02 17:21:38
3. 盘点springmvc的常用接口之HttpMessageConverter### 前言 举例: POST http://localhost:8080/demo3 传入富文本数据流:Bill Gates 在controller中获得Person对象并响应Person内容:Bill Gates 原始写法: @RequestMapping(method = RequestMethod.POST) public void postPerson(HttpServletRequest request, HttpServletResponse response) { try { String content = new String(IOUtils.toByteArray(request.getInputStream())); String[] strs = content.split("\\s"); Person person = new Person(strs[0], strs[1]); // TODO do something for person log.info(person.toString()); String text = person.getFirstName() + " " + person.getLastName(); response.getWriter()

你真的理解SpringMVC DispatcherServlet中的映射了吗?

故事扮演 提交于 2019-12-02 09:47:10
一、Request URL 与 Servlet url-pattern匹配顺序与关系 当一个请求发送到 servlet 容器(服务器)的时候,容器先会将请求的 url 减去当前应用上下文的路径,就是 scheme://ip:port/context 的 url 作为 servlet 的映射 url ,访问的是 http://localhost:8080/test/index.html ,我的应用上下文( context )是 test ,容器会将 http://localhost:8080/test 去掉,剩下的 /index.html 部分拿来和 servlet 的 url-pattern 进行匹配。 1. 精确路径匹配 ( 完全匹配 ) 以 ”/” 开始的,不包含通配符 * (不以通配符结尾)的,例如: <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/index.html</url-pattern> </servlet-mapping> 2. 最长路径匹配(路径匹配) 以 ”/” 开始的,并且以通配符 * 结尾的(通配符只能在结尾,不能放中间。例如, /index/te*/index.html 这样的) <servlet-mapping> <servlet-name>default<

springmvc学习笔记(14)-springmvc校验

半世苍凉 提交于 2019-12-02 06:37:12
springmvc学习笔记(14)-springmvc校验 标签: springmvc [TOC] 本文主要介绍springmvc校验,包括环境准备,校验器配置,pojo张添加校验规则,捕获和显示检验错误信息以及分组校验简单示例。 校验理解 项目中,通常使用较多是前端的校验,比如页面中js校验。对于安全要求较高点建议在服务端进行校验。 服务端校验: 控制层conroller:校验页面请求的参数的合法性。在服务端控制层conroller校验,不区分客户端类型(浏览器、手机客户端、远程调用) 业务层service(使用较多):主要校验关键业务参数,仅限于service接口中使用的参数。 持久层dao:一般是不校验的。 springmvc校验需求 springmvc使用hibernate的校验框架validation(和hibernate没有任何关系)。 校验思路: 页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面。 具体需求: 商品修改,添加校验(校验商品名称长度,生产日期的非空校验),如果校验出错,在商品修改页面显示错误信息。 环境准备 我们需要三个jar包: hibernate-validator.jar jboss-logging.jar validation-api.jar 这里我们添加maven依赖 <

SpringMVC整合JSON、XML视图

做~自己de王妃 提交于 2019-12-02 00:59:38
原创不易,转载请注明出处: SpringMVC整合JSON、XML视图 代码下载地址: http://www.zuidaima.com/share/1751862737554432.htm SpringMVC中整合了JSON、XML的视图,可以通过这些视图完成Java对象 到XML、JSON的转换。转换XML提供了MarshallingView,开发者只需用注入相应的marshaller、和属性配置,即可自动完成 Java的Model对象中的数据到XML的编组。 Email:hoojo_@126.com Blog: http://blog.csdn.net/IBM_hoojo http://hoojo.cnblogs.com/ 一、 准备工作 1、 本次程序会涉及到Jackson、xStream、Jibx、Jaxb2、castor等技术,如果你对这些技术还不是很了解。建议阅读: http://www.cnblogs.com/hoojo/archive/2011/04/27/2030264.html 这篇文章中涉及到的内容应该对你有不少帮助。 2、 jar包下载 spring各版本jar下载地址: http://ebr.springsource.com/repository/app/library/detail?name=org.springframework.spring

SpringMVC中servletFileUpload解析为空

自作多情 提交于 2019-12-01 20:43:45
原因分析 首先我们来看下Spring mvc 中文件上传的配置 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8" /> <property name="maxUploadSize" value="2000000000" /> </bean> 再来看看Controller中使用 public void upload2(HttpServletRequest request) { // 转型为MultipartHttpRequest try { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; List<MultipartFile> fileList = multipartRequest.getFiles("file"); for (MultipartFile mf : fileList) { if(!mf.isEmpty()){ } } } catch (Exception e) { e

SpringMVC控制器接收不了PUT提交的参数的解决方案

烈酒焚心 提交于 2019-12-01 18:45:28
这次改造了下框架,把控制器的API全部REST化,不做不知道,SpringMVC的REST有各种坑让你去跳,顺利绕过它们花了我不少时间,这次来提下SpringMVC的PUT提交参数为null的情况。 照常先贴出我的控制器代码,没什么特别的,就是打印出接受到的前台参数值: @RequestMapping(value = "/{id}", method = RequestMethod.PUT) @ResponseBody public Map<String, Object> update( @RequestParam(value = "isform", required = false) String isform, @PathVariable("id") String id) { System.out.println("id value: " + id); System.out.println("isform value: " + isform); return null; } 很常规的PUT控制器,用来修改原有的记录,原有的的web.xml中,我只添加了一个和REST涉及的过滤器 org.springframework.web.filter.HiddenHttpMethodFilter <filter> <filter-name>HttpMethodFilter</filter

Spring MVC过滤器-HiddenHttpMethodFilter

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-01 18:45:15
浏览器form表单只支持GET与POST请求,而DELETE、PUT等method并不支持,spring3.0添加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET、POST、PUT与DELETE请求,该过滤器为HiddenHttpMethodFilter。 HiddenHttpMethodFilter的父类是OncePerRequestFilter,它继承了父类的doFilterInternal方法,工作原理是将jsp页面的form表单的method属性值在doFilterInternal方法中转化为标准的Http方法,即GET,、POST、 HEAD、OPTIONS、PUT、DELETE、TRACE,然后到Controller中找到对应的方法。例如,在使用注解时我们可能会在Controller中用于@RequestMapping(value = "list", method = RequestMethod.PUT),所以如果你的表单中使用的是<form method="put">,那么这个表单会被提交到标了Method="PUT"的方法中。 需要注意的是,由于 doFilterInternal方法只对method为post的表单进行过滤 ,所以在页面中必须如下设置: <form action="..." method="post"> <input type=

SpringMVC+MyBatis项目总结(一)

☆樱花仙子☆ 提交于 2019-12-01 16:02:53
环境Spring3.2+Mybatis 3.2.7,JDK 1.6,开发工具Myeclipse 2014 GA Pro,数据库MySQL 5.5(数据采用之前Oracle的,直接用Navicat从Oracle导入到Mysql,然后改了一下数据类型,主键自增) Mapper和实体部分使用Mybatis Generator生成(取消了Example),然后按照传智播客教程上面的做法,每个实体都谢了扩展实体,需要分页的和需要条件查询的都写了Vo类,基础Mapper的ResultMap类型基本都是对应的扩展类,最终基础Mapper只是负责增加数据,删除数据(根据主键),更新数据,剩下的都在扩展Mapper中(3个必须的,根据主键查询,查询全部,查询数量)。 SQLMapConfig.xml中配置了typeAliases,然后我竟然没有用缩写= =还是用了全路径名称= = Spring的配置都在一起applicationContext.xml中,包括数据源,sqlSessionFactory,SpringMVC相关的配置,具体如下 <!-- Bean扫描配置 --> <context:component-scan base-package="cn.edu.bjut.zj.tims"/> <!-- 开启注解开发模式 --> <context:annotation-config/> <!--