绿色为重要
一、前台请求参数
@RequestMapping("/test") //可以为空 默认为0 如果是Integer的话,后面两个可以不写,也会显示null
public String test(@RequestParam("username") String un,@RequestParam(value="age",required=false,defaultValue="0") int age){
……
}
二、参数映射到路径中
@RequestMapping("/test/
{id}") //一般是嵌入增删改查里面,简单时候就是可以少些几个input,再练习练习,查查资料看,这个挺关键的一个技术
public String test(@PathVariable("id") Integer id){
...out(id);
}
三、hiddenHttpMethodFilter过滤器(GET\POST\PUT\DELETET提交表单)
web.xml配置:
jsp: get是查,增删改都是post,post是新增,PUT是修改,DELETE是删除
<form action="test/1" method="post">
如果是put和delete需要加<input type="hidden" name="_method" value="DELETE"/>//必须是完全一样的
...
</form>
后台:
@RequestMapping(value="/test/{id}",method=RequestMethod.DELETE)
public String test(@PathVariable Integer id){
...out(id);
}
四、存入session
类方法中都是正常写
类注解:
@SessionAttributes(value={"user"},types={String.class})
解释:values里面的值是map的key,写多少都行
type是属性,这里是说只要是String,就写入session
五、ModelAttribute(就是直接注入对象的属性,但是
一些属性
比如密码和创建日期
是不能修改
的,就需要用到)
正常form提交,正常的属性注入,假如传入的对象是User
那么类里面加一个方法即可:
@ModelAttribute
//只要方法标注了这个,那么这个方法在执行之前就会被springmvc调用,这里的用处就是在程序调用这个方法之前,从数据库里面查出来的User对
象其实已经放到了requset或是session里面了;
而且,如果不加这个方法,其他的方法需要注入User属性,但是属性不完全,并且还有
@SessionAttributes
values=(values={"user"})
的话,会报错。 //id不是必须的
public void getUser(RequestParam(value="id",required=false) Integer id,Map<String ,Object> map){
if(id!=null){
//id可以为空,为空的时候,要么就没传这个对象,要么就是新建这个对象,都和密码没有关系
User user=new User(.......);
//相当于从
数据库
里面取到这个对象,这里简单示例
map.put("user",user);
//注意,这里的key必须是User的小写(
User是别的方法的导入参数
)
}
}
other:public void test(
User user){....}
其他的方法如果接受到User对象,并且没有密码属性,那么就自动装配了数据库里面的属性
②如果map.put("")里面确实不想为user,那么在别的方法注入的时候,就必须这样写:
假如这里的map.put("abc",abc);
那么 public String test(@ModelAttribute("abc") User user){....} 修饰即可
六、国际化
看视频26就可以了,使用fmt格式,jstl视图,加个配置文件直接搞定
mvc.xml里面也可以配置直接跳转,使用mvc标签
七、mvc有自己的页面表单标签,form:form。。。不知道是否好用。配合验证是挺好
八、数据格式化
1、配置文件:一般是默认的,如果是需要自定义的话,那么就看视频35
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
</bean>
2、实体类:
@NotEmpty
//非空
private String lastName;
@Email
//一般的email格式
private String email;
@Past
//验证比当前时间晚
@DateTimeFormat(pattern="yyyy-MM-dd")//设置格式
private Date birth;
@NumberFormat(pattern="#,###,###.#") //设置格式
private Float salary;
九、错误验证,自定义(一般不用,如果需要返回自己的错误提示,就用这个,40虽然是国际化,但是也是39的延伸,很简单)
视频39、40
十、Json
@responsebody,和3个jar包,直接看视频就行
十一、文件上传
方法传参:@RequestParam("name") MultipartFile file
web.xml需要配置,视频47
留了一个问题,如果是多文件上传怎么办?
十一、异常处理
spring配置文件:
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
</mvc:interceptors>
统一抛出异常:
1、首先,在handler里面找到对应的异常抛出方法,如果找不到,就会找
@ControllerAdvice注解的类
各个抛出的类写法和一般的controller方法写法是一致的
@ExceptionHandler({ArithmeticException.class}) //这是一个异常的类名,最大一般是RuntimeException,运行时错误
public ModelAndView handleArithmeticException(Exception ex){
ModelAndView mv=new ModelAndView("error");
mv.addObject("exception",ex);
return mv;
}
统一的:
新建类
@ControllerAdvice
public class handleException {
@ExceptionHandler({
RuntimeException
.class})
public ModelAndView handleArithmeticException(Exception ex){
其他都一样