SpringMVC day01
执行流程:
handler,是指包含了我们请求的Controller类和Method方法的对象
组件:
- 处理器映射器。handlerMapping 返回的是控制器
- 处理器适配器。handlerAdapter 返回的是modelAndView
- modelAndView:也就指的是向视图中传递的信息,以及哪个视图
- 视图解析器。ViewResolver 解析视图
- 也就是通过扫描配置 将视图的资源路径拼接 并且访问
- 也就是通过扫描配置 将视图的资源路径拼接 并且访问
视图: Representational State Transfer 具象状态传输
请求参数的绑定:
-
普通数据类型 直接封装(参数名称和parameter名一致)
-
javaBean类型数据封装:
-
form表单中的name属性值要和要封装的javabean对象中的成员属性名称相同
-
如果封装的javabean中存在引用数据类型的话,那么依旧遵循上述的规则,
例如
Account(name,password) 中存储 User对象 user中存在 uname, uage 那么在form中传递方式应该为 name passowrd user.uname user.uage
-
-
调试异常:
-
异常信息
java.lang.NoSuchMethodException: com.gql.pojo.User.<init>()
-
原因:初始化pojo类变量需要其无参构造 重写有参构造会把默认存在的无参构造覆盖
-
-
绑定 map list集合的参数表达式传递:
-
list:
// list是要封装pojo的成员变量名 index是位置 // 成员:List <User> list = new ArrayList<User>; <input type="text" name="list[index].uname"> <input type="text" name="list[index].uname">
输出 : list=[User{uage=11, uname=‘wew’}]
-
map:
//map是要封装pojo的成员变量名 key是自定义键名称 // 成员:Map<String,User> map = new HashMap<String,User>; // (理解):map['key'] -> 指的是map中某个key对应的值对象 <input type="text" name="map['key'].uname"> <input type="text" name="map['key'].uage">
输出:map={key=User{uage=22, uname=‘qqq’}}
-
相对路径:
/ :表示根目录
./ :表示当前目录 (可以省略)
../ : 表示上一级目录(../../上二级)
post请求中文乱码问题:
-
request.setCharSetEncoding(“UTF-8”)
-
springMVC框架中提供了Filter过滤器,用于解决post请求的中文乱码问题
-
配置:web.xml
<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>
-
###### 自定义类型转换器
1. 自定义类实现 Converter<S, T>接口
2. 重写 T convert(S source) 方法
3. 在springmvc-config中加载组件
```xml
<!-- 自定义类型转换器 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<!-- 注册一个新的类型转换器-->
<property name="converters">
<!-- 像集合中添加组件 -->
<set>
<bean class="com.qqhru.utils.Conversion"></bean>
</set>
</property>
</bean>
ConversionServiceFactoryBean:
成员中有一个set类型的converters 所以在添加 组件的时候用set标签
@Nullable
private Set<?> converters;
- 输出:Thu Nov 11 00:00:00 CST 1999
常用注解
-
@RequestParam
-
定义作用:把请求中指定名称的参数给控制器中的形参赋值。
-
如果浏览器传递的参数与方法的形参名称不同,可以用此注解更改
-
理解:也就是将value对应的请求参数赋值给自定义hendller的形参
请求: method?username=“张三”
(@RequestParam(value="username" String name)){ System.out.pritln(name); //张三 }
-
-
@RequestBody
-
获取请求体(form表单)内容
获取结果是键值对形式
jsp:
<form action="param/requestBodyTest" method="post"> <input type="text" name="username" placeholder="账号请输入"> <br> <input type="password" name="password" placeholder="密码请输入"> <br> <input type="text" name="money" placeholder="money请输入"> <br> <input type="submit" value="click this href check @RequestBody annotation!"> </form>
handler
public String testBody(@RequestBody String body) // 结果: username=wangjunyu&password=3232&money=288
-
如果请求是get会报错
-
属性:
required:是否必须有请求体。
默认值是:true。当取值为 true 时,get 请求方式会报错。
如果取值为 false,get 请求得到是 null。
-
-
-
@PathVariable(地址 变量)
-
用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},这个**{id}**就是 url 占位符。
-
即可以通过path/user/number这种形式访问资源
- number指的是一个固定参数 @pathVariable注解可以获取{id}中的值
jsp:
<a href="param/pathVariableTest/10"> pathVariableTest </a> <%-- 占位符位置为10 --%>
handler
@RequestMapping("/pathVariableTest/{pid}") public String testPathVariable(@PathVariable(value = "pid") int id){ // 操作:将通过注解获取到的pid赋值给方法的形参 id System.out.println(id); return "success"; }
-
-
@RequestHeader
-
@CookieValue
-
@ModelAttribute
-
出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。
它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。
-
出现在参数上,获取指定的数据给参数赋值。
@ModelAttribute public void testModelAttribute_init(){ System.out.println("ModelAttribute_init执行了..."); //没有返回值的 } @RequestMapping("/modelAttributeTest") public String testModelAttribute(){ System.out.println("testModelAttribute执行了.."); return "success"; } //输出结果:ModelAttribute_init执行了... // testModelAttribute执行了..
-
-
@SessionAttribute