4.使用注解配置Controller类中业务方法的映射地址
在上诉代码的基础上修改
@Controller
public class UserController{
@RequestMapping("/quick")
public String test(){
System.out.println("SpringMVC test....");
//return 需要跳转的视图
return "success.jsp"
}
}
5.配置SpringMVC的核心文件spring-mvc.xml
resources目录下新建一个文件spring-mvc.xml
<!--Controller的组件扫描-->
<context:component-scan base-package="com.test.controller"/>
6.客户端发起请求测试
2.3 springMVC的组件解析
执行流程如下所示:
2.4 springMVC的注解
@RequestMapping
//作用:用于建立URL请求和处理方法之间的映射关系
//位置:
//1.类上:请求URL的第一级访问目录,如果此处不写的话,默认应用的根目录
//2.方法上:请求URL的第二级访问目录,与类上使用的RequestMapping标注的一级目录一起构成访问的虚拟路径
//参数:1.value:用于指定的URL eg:@RequestMapping(value="/quick") 只有一个参数时,value可省略
//2.method:指定http请求方式 eg:@RequestMapping(value="/quick",method="post")
//params:用于指定限制请求参数的条件,它支持简单的表达式,要求请求参数的key和value必须和配置的一模一样。 eg:params="username" 请求资源需要携带username参数 params="age!=18" 请求参数的age不能等于18
2.5 SpringMVC的注解解析
1.mvc命名空间的引入
2.组件扫描
SpringMVC是基于Spring容器的,所以在进行Spring操作时,需要将controller存储到spring容器中,如果需要使用@controller注解进行标注的话,需要使用:
<context:compponent-scan base-package="com.test.controller"/>进行组件扫描
2.6 SpringMVC的xml配置解析
//spring-mvc.xml
1.配置controller组件的扫描
2.配置组件 视图解析器,处理适配器等等 eg:可以通过配置视图解析器的前缀和后缀来简化开发。前缀:profix 后缀:suffix
2.7 知识点总结
3.SpringMVC的数据响应
=============================================================================
3.1 数据响应的方式
1.页面跳转
直接返回字符串
通过ModelAndView对象返回
//ModelAndView
//model:模型,作用:封装数据
//view:视图 作用:展示数据
ModelAndView modelandview = new ModelAndView();
//设置视图名称
modelandview.setViewName("success");
//设置model数据
modelandview.addObject("username","test");
return modelandview;
设置完model的数据后,success该视图可以直接取到设置的数据。
//可以使用下列方法取得数据
${username}
2.回写数据
直接返回字符串:
Web基础阶段,客户端访问服务器端,如果想要直接返回字符串当做响应体返回的话,可以使用response.getWriter.print(“test”) 即可,那么controller中需要返回字符串应该怎么办呢?
(1)通过SpringMVC框架注入response对象,使用response.getWriter.print(“test”) ,此时不需要视图的跳转,方法的返回值为void。(在当前页面返回数据,不要页面的跳转)
(2) 在方法上添加注解@ResponseBody 作用:不要进行页面跳转,直接返回字符串。
返回对象或者集合
可以使用SpringMVC自动帮你转换,需要配置处理映射器
return user;
//配置处理映射器
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
</list>
</property>
</bean>
// 需要添加的依赖
jackson-annotations-2.0.2.jar
jackson-databind-2.0.2.jar
jackson-core-2.0.2.jar
```
上述方法可以使用更加简便的方式配置,可以使用SpringMVC的注解代替上述繁琐的配置:
```
</mvc:annotation-driven/>
//mvc的注解驱动
//在SpringMVC的各个组件中,处理映射器、处理适配器、视图解析器三大组件,使用</mvc:annotation-driven/>自动加载
//RequestMappingHandlerMapping(处理映射器)和RequestMappingHandlerAdapter(处理适配器),可用在Spring-mvc.xml
//配置文件中使用</mvc:annotation-driven/>替代注解处理器和适配器的配置,同时使用</mvc:annotation-driven/>会默认
//配置对象或者集合的josn字符串转换。
```
[]( )3.2 知识点总结
----------------------------------------------------------------------
![知识点总结]()
[]( )4\. SpringMVC的请求
=============================================================================
[]( )4.1 请求参数的格式
------------------------------------------------------------------------
```
//请求的格式
name=value&name=value
//服务器要想获得请求的参数,有时还要进行数据的封装,Spring可以接受如下类型的参数
1.基本类型参数
2.pojo类型参数
3.数组类型参数
4.集合类型参数
```
[]( )4.2 基本类型参数
-----------------------------------------------------------------------
```
//http请求
http://localhost:8088/quick?username="zhangsan"&age=18
@RequestMapping("/quick")
//@ResponseBody该注解可以不进行页面跳转
@ResponseBody
public void save(String username,int age){
//可以直接获得http请求中携带的普通类型参数
//此处的username="zhangsan" age=18
System.out.println(username);
System.out.println(age);
}
[]( )4.3 POJO类型数据
-------------------------------------------------------------------------
controller中的业务方法中的POJO参数的属性名与请求参数的name一致,参数值会自动映射匹配。
eg:
//http请求如下所示
http://localhost:8088/quick?username=“zhangsan”&age=18
//代码如下
//定义一个User类
public class User{
private String username;
private int age;
get 和set 方法
}
//底层根据反射调用get和set方法直接自动将数据封装到User对象中
@RequestMapping("/quick")
//@ResponseBody该注解可以不进行页面跳转
@ResponseBody
public void save(User user){
//可以直接获得http请求中携带的普通类型参数
//此处的username="zhangsan" age=18
System.out.println(user);
}
//上述对应的输出为 User{username=‘zhangsan’,age=18}
[]( )4.4 数组类型对象
-----------------------------------------------------------------------
controller中的业务方法数组名称与请求参数的name一致,参数会自动映射。
eg:
http://localhost:8088/quick?str1=111&str1=222
//代码如下:
@RequestMapping("/quick")
//@ResponseBody该注解可以不进行页面跳转
@ResponseBody
public void save(String[] str1,String[] str2){
//字符数组打印的是地址
System.out.println(str1);
System.out.println(str2);
}
//str1数组应为str1[‘111’,‘222’]
[]( )4.5 集合类型的参数
------------------------------------------------------------------------
(1)获得集合参数时,需要将集合封装到一个一个POJO中才可以,可以取名为VO对象。
在jsp文件中定义,从表单上获取:
![jsp文件中定义]()
访问页面:http://localhost:8088/from.jsp
![访问页面]()
//定义VO对象
public class VO1{
private List<User user> userlist;
get 和set方法
。。。
tostring 方法//可自行选择,方便打印
}
//获取VO对象
public void save(VO1 vo1){
System.out.println(vo1);
}
//打印结果如下:
VO1{userlist=[User{username=‘zhangsan’,age=18},User{username=‘lisi’,age=20}]}
(2)当使用ajax提交时,可以指定contentType为json格式,那么在方法参数位置使用@RequestBody可以直接收集集合数据,而无需用VO类型封装
![ajax提交时]()
public void save(@RequestBody List userlist){
System.out.println(userlist);
}
//可以实现和上述一样的效果
//spring-mvc.xml需要添加下列配置
//作用:开放资源的访问
<mvc:resources mapping="/js/**" location="/js/"/>
//开放img目录下所有图片的访问资格
<mvc:resources mapping="/img/**" location="/img/"/>
//或者将静态资源的寻找交给原始的web服务器,tomcat
mvc:default-servlet-handler
[]( )4.6 请求数据乱码问题
-------------------------------------------------------------------------
当post请求数据时,数据会出现乱码问题,我们可以设置一个过滤器来进行编码的过滤
<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>
<!-- 同时开启响应和请求的编码设置-->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
//配置哪些请求
<filter-name>characterEncodingFilter</filter-name>
<servlet-name>springmvc</servlet-name>
//filter-name:过滤器的名称与过滤器中的filter-name匹配
//servlet-name:与servlet中的servlet-name匹配
[]( )4.7 参数绑定的注解@RequestParam
-------------------------------------------------------------------------------------
当请求的参数名称与controller的业务方法参数的名称不一致时,就需要注解@RequestParam注解显示的绑定
//http请求为:
http://localhost:8088/quick?name=zhangsan
//代码如下
@RequestMapping("/quick")
//@ResponseBody该注解可以不进行页面跳转
@ResponseBody
//注意name和username匹配不上
public void save(@RequestParam(value=“name”) String username){
System.out.println(username);
}
//上述打印结果为:zhangsan
//可以在RequestParam中增加参数request=false,则请求时,带不带参数皆可
//defaultValue:当没有指定请求参数时,赋值一个默认值
[]( )4.8 获取Restful风格的参数
-------------------------------------------------------------------------------
Restful风格的请求是使用url+请求方式表示一次请求目的,HTTP协议里面四个表示操作方式的动词如下:
GET:用于获取资源,
POST:用于新建资源
PUT:用于更新资源
DELETE:用于删除资源
eg:
get /user/1 得到id=1的user
post /user 新增user
put /user/1 更新id=1的user
delete /user/1 删除id=1的user
上述url地址的/user/1中的1就是要获得的请求参数,在springMVC中可以使用占位符进行参数绑定,地址/user/1可以写成/user/{id},占位符{id}就是对应1的值,在业务方法中,我们可以使用@PathVariable注解进行占位符的匹配获取工作。
//http
http://localhost:8088/test/quick/zhangsan
//代码
@RequestMapping("/user/quick/{name}")
@ResponseBody
public void save(@PathVariable(value=“name” required=true) String name){
System.out.println(name)
}
//打印结果 zhangsan
[]( )4.9 自定义类型转换器
-------------------------------------------------------------------------
SpringMVC默认提供了一些自动类型转换器,例如客户端提供的字符串类型可以转换成int类型。但是默认提供的类型转换器并不能满足所有的需求,例如日期类型转换器需要自己来实现。
自定义转换器的步骤:
1.定义转换器实现converter接口
2.在配置文件中声明转换器
3.在annotation:driven中引用转换器
//代码
public void DateConverter implement Converter<String,Date>{
public Date converter(String datestr){
//日期字符串转换成Date类型,进行返回
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse(datestr);
return date;
}
}
// 声明
<bean id="ConversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property>
<list>
<bean class="com.test.Converter.DateConverter"></bean>
</list>
</property>
</bean>
//<annotation:driven>中引用转换器
<--mvc注解驱动>
<mvc:annotation-driven conversion-service="ConversionService"/>
# 总结
其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。
这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来
**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】]()**
**目录:**
![]()
**部分内容截图:**
![]()
![]()
// 声明
<property>
<list>
<bean class="com.test.Converter.DateConverter"></bean>
</list>
</property>
//annotation:driven中引用转换器
<–mvc注解驱动>
<mvc:annotation-driven conversion-service=“ConversionService”/>
总结
其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。