-----处理json问题,前端接受、发送json数据,或者控制器接收、发送json数据
需要包jackson-jr-all-2.4.3.jar;jackson-annotations-2.6.0.jar;jackson-core-2.6.0.jar;jackson-databind-2.6.0.jar
spring4如下配置
@ResponseBody 处理json时使用,用于将数据转换成json格式返回前端
@RequestBody 用于接受前端ajax发出的json数据
控制器内的方法通过map发送数据给前端,也可返回具体对象 等
eg.
前端页面
1.导包commons-fileupload 和 commons.io
2.配置文件
限制文件上传大小可以在配置文件设置
限制文件类型只能在控制器中获取文件名的后缀去判断
文件下载
1.前端页面
springmvc 中
在返回值String方法的 return里写,return "forward:另一个action的路径"属于请求转发
return "redirect:另一个action的路径" 属于url重定向,重定向无法共享request域参数,但是return "redirect:另一个action的路径?参数名=参数值",这样也可以共享,或者放在session中
在控制器类 方法里的参数列表中,可以通过声明 HttpServletRequest request, HttpServletResopnse response, HttpServletSession session 来调用 这些 传统api中的方法处理
处理编码问题需要在web.xml里设置编码过滤器只解决post方式
注意要写在前面,不然可能会出现先经过spring处理而导致编码设置失效
-----其他的
加载静态资源,如图片,css,js之类的
<mvc:resources location="" mapping="" />
mapping:映射
location:本地资源路径,注意必须是webapp根目录下的路径。
两个*,它表示映射resources/下所有的URL,包括子路径(即接多个/)
当有spring和springmvc注解时,为了不发生注解读取失效,需要加入下面这句,表示不读取下面的注解,放给其他文件读取
比如在spring配置文件中加入下面语句,表示不读取springmvc的注解,让springmvc配置文件去读取(即在springmvc配置文件中需要配置注解扫描)
需要包jackson-jr-all-2.4.3.jar;jackson-annotations-2.6.0.jar;jackson-core-2.6.0.jar;jackson-databind-2.6.0.jar
spring4如下配置
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJackson2HttpMessageConverter" />
</list>
</property>
</bean>
<bean id="mappingJackson2HttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
<value>text/json;charset=UTF-8</value>
</list>
</property>
</bean>
@ResponseBody 处理json时使用,用于将数据转换成json格式返回前端
@RequestBody 用于接受前端ajax发出的json数据
控制器内的方法通过map发送数据给前端,也可返回具体对象 等
eg.
@RequestMapping(value="/ajaxString.action")
public @ResponseBody void loginUI(String name) throws Exception{
System.out.println(name); //也可通过request.getParameter("name");接收
}
@RequestMapping(value="/ajaxObject.action")
public @ResponseBody Map loginUI1(@RequestBody User user) throws Exception{
System.out.println(user.getName());
Map<String,Object> map = new HashMap<>();
map.put("msg", "asd");
map.put("user", user);
return map;
}
//若是返回具体对象,则怎么写
/* @RequestMapping(value="/ajaxObject.action")
public @ResponseBody User loginUI1(@RequestBody User user) throws Exception{
System.out.println(user.getName());
user.setPassword("asdasdasdasda");
return user;
}*/
前端页面
<script type="text/javascript" src="/js/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
function doTest1(){
$.ajax({
url:"${basePath}/login/ajaxString.action",
data:{"name":"阿斯顿"},
type:"post",
async:true,
success:function(msg){
alert(msg.msg); //返回undefine,因为后台返回值卫void
},
});
}
function doTest2(){
data={"name":"2323"};
$.ajax({
url:"${basePath}/login/ajaxObject.action",
type:"post",
dataType:"json",
contentType: 'application/json',
data:JSON.stringify(data),
async:true,
success:function(msg){
alert(msg.msg); //返回后台设置的数据
alert(msg.user.name);
}
});
}
</script>
<a href="javascript:doTest2()" id="ajax" >ajax2</a>
1.导包commons-fileupload 和 commons.io
2.配置文件
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="102400000"></property>
</bean>
3.前端 (注意enctype的值要写成multipart/form-data)<form action="${basePath}/upload.action" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">上传</button>
</form>
4.控制器@RequestMapping(value="/upload.action")
public String upload(HttpServletRequest request,@RequestParam("file") MultipartFile file) throws Exception{
System.out.println(file.getName()); //表单按钮的name
System.out.println(file.getOriginalFilename()); //上传的文件的名字
if(!file.isEmpty())
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
//获取目录
String path = request.getServletContext().getRealPath("/upload/");
//为上传的文件命名
String fileName = file.getOriginalFilename();
String realFileName = sdf.format(new Date()) + fileName.substring(fileName.lastIndexOf("."));
file.transferTo(new File(path + File.separator + realFileName)); //将上传的文件保存到一个目录中
}
return "/success.jsp";
}
限制文件上传大小可以在配置文件设置
限制文件类型只能在控制器中获取文件名的后缀去判断
文件下载
1.前端页面
<a href="${basePath}/download.action?filename=QQ截图20170716131950.jpg">下载</a>
2.控制器 @RequestMapping(value="/download.action")
public ResponseEntity<byte[]> download(HttpServletRequest request,
@RequestParam("filename") String filename) throws Exception{
//获取下载路径
String filePath = request.getServletContext().getRealPath("/upload/");
File file = new File(filePath + File.separator + filename);
//http头
HttpHeaders headers = new HttpHeaders();
//下载显示的文件名,不然下载时浏览器识别不了中文
String downloadFielName = new String(filename.getBytes("UTF-8"),"ISO8859-1");
//设置相应报头,通知浏览器以attachment(下载方式)打开图片
headers.setContentDispositionFormData("attachment", downloadFielName);
//application/octet-stream : 二进制流数据(最常见的文件下载)。
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers,HttpStatus.CREATED);
}
springmvc 中
在返回值String方法的 return里写,return "forward:另一个action的路径"属于请求转发
return "redirect:另一个action的路径" 属于url重定向,重定向无法共享request域参数,但是return "redirect:另一个action的路径?参数名=参数值",这样也可以共享,或者放在session中
在控制器类 方法里的参数列表中,可以通过声明 HttpServletRequest request, HttpServletResopnse response, HttpServletSession session 来调用 这些 传统api中的方法处理
-----
处理编码问题处理编码问题需要在web.xml里设置编码过滤器只解决post方式
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意要写在前面,不然可能会出现先经过spring处理而导致编码设置失效
-----其他的
加载静态资源,如图片,css,js之类的
<mvc:resources location="" mapping="" />
mapping:映射
location:本地资源路径,注意必须是webapp根目录下的路径。
两个*,它表示映射resources/下所有的URL,包括子路径(即接多个/)
当有spring和springmvc注解时,为了不发生注解读取失效,需要加入下面这句,表示不读取下面的注解,放给其他文件读取
比如在spring配置文件中加入下面语句,表示不读取springmvc的注解,让springmvc配置文件去读取(即在springmvc配置文件中需要配置注解扫描)
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>