1.@ModelAttribute

1.给共享的数据设置model数据设置,贴在形参上,也可以贴在方法上,设置一个model的key值
2.当controller方法返回一个对象的时候,,缺省值会把当前请求的url作为逻辑视图名称,共享返回对象

2.多个对象的传递

  //自定义属性注解,用于请求参数转移到对应的对象参数中去
//把一dog.开头的参数封装到dog中
@InitBinder("dog")
public void initBing(WebDataBinder binder){
binder.setFieldDefaultPrefix("dog.");
} @InitBinder("cat")
public void initBing1(WebDataBinder binder){
binder.setFieldDefaultPrefix("cat.");
} @RequestMapping("/testmany")
public String test(Cat cat,Dog dog){ System.out.println(cat);
System.out.println(dog);
return null;
}
   <form method="post" action="model/testmany">
catName:<input type="text" name="cat.name"><br/>
catAge:<input type="text" name="cat.age"><br/>
DogName:<input type="text" name="dog.name"><br/>
DogAge:<input type="text" name="dog.age"><br/>
<input type="submit" value="submit">
</form>

处理不同的数据可以传递到不同的pojo实现类中。

3.处理json

①.单个对象

     //@ResponseBody
//处理响应,把对象转为json字符串
//贴在方法上,只针对当前的方法做json处理
//在类上会对当前类的所有方法做json处理
//把单个对象转为json
@RequestMapping("/user1")
@ResponseBody
public User user1(){
User u = new User();
u.setName("MrChegns");
u.setAge(12);
return u;
}

 

②.多个对象

     //多个对象

     @RequestMapping("/user2")
@ResponseBody
public List<User> user2(){ List<User> users = new ArrayList<>();
User u1 = new User("MrChengs",12);
User u2 = new User("MrChengs",13); users.add(u1);
users.add(u2); return users;
}

 注意://返回一个String,把返回的字符串不会当作物理逻辑返回 ,当作json

     @RequestMapping(value="/test1",produces=MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public String test1(){
return "success“;
}

4.日期处理

//把请求参数封装成Date字符串
//前台向后台传数据
@RequestMapping("/test1")
public ModelAndView test(@DateTimeFormat(pattern="yyyy-MM-dd")Date d){
System.out.println(d);
return null;
}

  

time时的Date类型:

    @InitBinder
public void initBind(WebDataBinder binder){
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern("yyyy-MM-dd");
binder.registerCustomEditor(java.util.Date.class, new CustomDateEditor(sdf, true));
}
@RequestMapping("/test2")
public ModelAndView dates(User u){
System.out.println(u);
return null;
}

 

 

配置全局可以使用
新建类:
这个类需要加入到spring容器
@ControllerAdvice
public class DateformateConfig {
@InitBinder
public void initBind(WebDataBinder binder){
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern("yyyy-MM-dd");
binder.registerCustomEditor(java.util.Date.class, new CustomDateEditor(sdf, true));
}
}
@RequestMapping("/test2")
public ModelAndView dates(User u){
System.out.println(u);
return null;
}

得到结果不变

jsp页面处理:

后台向前台

public class User {
private String name;
private int age;
//东八区
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date time;
....
}
@RequestMapping("/test4")
@ResponseBody
public User user12(){
User u = new User();
u.setAge(12);
u.setName("Mrcheng");
u.setTime(new Date());
return u;
}

 5.拦截器

配置

<!-- 拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 对那些资源及进行拦截 -->
<mvc:mapping path="/**"/>
<!-- 派出不需要被拦截的 -->
<mvc:exclude-mapping path="login"/>
<bean class="com.MrChengs.interceptor.LoginCheckInterceptor" />
</mvc:interceptor>
</mvc:interceptors>

实现类登陆拦截

public class LoginCheckInterceptor implements  HandlerInterceptor{
//登陆判断
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception { if(request.getSession() == null){
response.sendRedirect(request.getContextPath()+ "/login.jsp");
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
}

  

 6.异常处理:

①.全局:
springmvc.xml
value的值也是根据逻辑视图的转换来的
<!-- 配置异常处理器 -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
//设置错误的默认视图
<property name="defaultErrorView" value="error/erroes"></property>
</bean>

错误的提示页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
error:<%=exception.getMessage() %>
</body>
</html>

错误页面获取异常信息的变量名称

<property name="exceptionAttribute" value="qqq"></property>

根据不同类型的异常配置不同的异常

<!-- 根据不同的异常类型,跳转到不同的页面 -->
<property name="exceptionMappings"> </property>

  

 7.数据校验

springmvc.xml中

<!-- 数据校验 -->
<bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"></bean>

pojo中

public class User {
private int id; @NotNull(message="username 不可以为空")
private String username; @Size(max=5,min=1,message="密码大于1小于5")
private String password;
...
}
controller类上
BindingResult  必须在 @Valid之后
@RequestMapping("/insertuser")
public String Users(@Valid User user,BindingResult bindingResult,Model model) throws Exception{ List<ObjectError> es = bindingResult.getAllErrors();
if(es.size() > 0){
model.addAttribute("es", es);
return "/insert";
} System.out.println("hellouser");
System.out.println(user);
UserMapper um = (UserMapper) getContext().getBean("userMapper");
um.addUser(user); return "redirect:/select/selectall";
}

  

jsp页面上

<c:forEach items="${es}" var="e">
<p>${e.defaultMessage}</p>
</c:forEach>

更多的可以从参考网上的更多教程.......

 8.文件上传

1.apache版本
id是固定的
springmvc.xml
<!-- 文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="1048000"></property>
</bean>

 

jsp页面

<form action="upload" method="post"  enctype="multipart/form-data">
name:<input type="text" name="username">
file:<input type="file" name="pic" >
<input type="submit" value="submit">
</form>

  

controller

@Controller
public class FileUpLoad { @Autowired
private ServletContext servletContext; @RequestMapping("/upload")
public ModelAndView upload(User user,MultipartFile pic) throws IOException{
System.out.println(user);
String fileName = pic.getOriginalFilename();
System.out.println(fileName);
String dir = servletContext.getRealPath("/photo");
Files.copy(pic.getInputStream(),Paths.get(dir, fileName));
return null;
}
}

两个同名pic位置  

基本上总结到此结束了.....

springmvc小结(下)的更多相关文章

  1. springMVC框架下JQuery传递并解析Json数据

    springMVC框架下JQuery传递并解析Json数据

  2. springmvc框架下ajax请求传参数中文乱码解决

    springmvc框架下jsp界面通过ajax请求后台数据,传递中文参数到后台显示乱码 解决方法:js代码 运用encodeURI处理两次 /* *掩码处理 */ function maskWord( ...

  3. (转)springMVC框架下JQuery传递并解析Json数据

    springMVC框架下JQuery传递并解析Json数据 json作为一种轻量级的数据交换格式,在前后台数据交换中占据着非常重要的地位.Json的语法非常简单,采用的是键值对表示形式.JSON 可以 ...

  4. SpringMvc架构下css、js、jpg加载失败问题

    SpringMvc架构下css.js.jpg加载失败问题 springMvc搭建成功后,页面出现一些错误,jsp.js等静态资源加载失败.导致页面没有显示任何样式以及 此处原因很简单,是因为相对路径在 ...

  5. 使用Javamelody验证struts-spring框架与springMVC框架下action的訪问效率

    在前文中我提到了关于为何要使用springMVC的问题,当中一点是使用springMVC比起原先的struts+spring框架在效率上是有优势的.为了验证这个问题,我做了两个Demo来验证究竟是不是 ...

  6. 微信被动回复用户消息-文本消息-springmvc环境下自动生成xml

    微信被动回复用户消息-文本消息-springmvc环境下自动生成xml springmvc - 大牛! private Object subscribeMessage(Scan scan) { Sca ...

  7. springmvc模式下的上传和下载

    接触了springmvc模式后,对上一次的上传与下载进行优化, 上次请看这里. 此处上传的功能依旧是采用表格上传.文件格式依旧是 <form action="${pageContext ...

  8. SpringMVC框架下的异常处理

    在eclipse的javaEE环境下:导包.... 1. 在 @ExceptionHandler 方法的入参中可以加入 Exception 类型的参数, 该参数即对应发生的异常对象 2. @Excep ...

  9. SpringMVC框架下的拦截器

    在eclipse的javaEE环境下:导包.... web.xml文件中的配置: <?xml version="1.0" encoding="UTF-8" ...

随机推荐

  1. Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(一:知识点回顾)

    一.知识点回顾 1.Mybatis环境搭建(DAO层的实现)(使用maven项目管理工具) 需要引入的依赖包: <!-- 单元测试junit --> <dependency> ...

  2. hdu 1011 树形背包

    http://blog.csdn.net/libin56842/article/details/9876503 这道题和poj 1155的区别是: poj1155是边的价值,所以从边的关系入手 hdu ...

  3. svn的使用总结

    在网上看到了以前介绍非常全的svn的文章,拿来分享 原文网址  http://www.cnblogs.com/jx270/archive/2013/03/04/2943595.html 还有一篇更基础 ...

  4. JavaScript中的attachEvent和addEventListener

    attachEvent和addEventListener在前端开发过程中经常性的使用,他们都可以用来绑定脚本事件,取代在html中写obj.onclick=method. 相同点: 它们都是dom对象 ...

  5. BZOJ3498: PA2009 Cakes(三元环)

    题意 题目链接 Sol 按照套路把边转成无向图,我们采取的策略是从权值大的向权值小的连边 然后从按权值从小到大枚举每个点,再枚举他们连出去的点\(v\) 如果\(v\)的度数\(\leqslant M ...

  6. 1003. 猜数游戏 (Standard IO)

    题目描述 有一个“就是它”的猜数游戏,步骤如下:请你对任意输入的一个三位数x,在这三位数后重复一遍,得到一个六位数,467-->467467.把这个数连续除以7.11.13,输出最后的商. 输入 ...

  7. Python入门-初始面向对象

    之前我们代码基本上都是面向过程的,今天我们就来初始一下python中一个重要的内容:面向对象 一.面向对象和面向过程(重点理解) 1.面向过程: 一切以事物的流程为核心. 核心是"过程&qu ...

  8. bootstrap-datepicker汉化

    bootstrap-datepicker 是一个非常优秀的时间选择插件,默认是英文显示日期的,通过下面几个小修改让其支持默认中文 1.首先将 bootstrap-datepicker.js 另存为 u ...

  9. 移动端meta标签的使用和设置

    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale= ...

  10. Keras 时序模型

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Thinking_boy1992/article/details/53207177 本文翻译自 时序模 ...