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的组件解析


springmvc 播放视频 spring的视频_mvc

执行流程如下所示:

springmvc 播放视频 spring的视频_mvc_02

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命名空间的引入

springmvc 播放视频 spring的视频_java_03

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 知识点总结


springmvc 播放视频 spring的视频_后端_04

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”/>

总结

其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。