简述:基于Java实现Mvc模型的轻量级web框架
配置案例过程:
导入maven:
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.19</version>
</dependency>
配置SpringConfig
@Configuration
@ComponentScan("com.wlb.controller")
public class SpringMvcConfig {
}
配置:AbstractDispatcherServletInitializer
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
/*
加载springmvc中的对象
*/
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
/**
* 加载那些请求让spring处理
* @return
*/
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
执行流程:
记载bean的方式
另一种写法:
请求:
参数的种类:(传递的参数的种类)
1.普通参数:http://localhost:8080/save?name=zhangsan&age=8
按照普通习惯来说,前端传来的值应该跟controller中的参数一样,例如public void add(String name,int age),但是如果特殊情况下前后端的参数不一样可以用@RequestPam,例如,从后台传来的参数是username,就要用public void add(@RequestPam(“username”)String name,int age),就是将前端的username跟controller中的name进行绑定。
2,POJO参数:http://localhost:8080/save?name=zhangsan&age=8
public void pojoParam(User user),因为上述中的zhangsan和age是User类中的实体类,传过来的参数如果跟类中的参数一样,会自动注入封装成User类
3,嵌套pojo属性:http://localhost:8080/save?name=zhangsan&age=8
如果User类中包含一个address类,那么只需要在前端传值中改变为address.**(*代表address的属性)
4,数组参数:http://localhost:8080/save?likes=game&likes=shangwang&likes=sss
public void pojoParam(String[ ] likes)
如果url中改为like,那么就不会注入likes中
5,集合参数:http://localhost:8080/save?likes=game&likes=shangwang&likes=sss
public void pojoParam(@RequestParam List<String> likes)
因为List<String>是一个List引用类,String是他的属性,如果不加@RequestParam,则代表likes是传入的List的属性,但是List的属性是固定好的,所以需要加@RequestParam,进行绑定,相当于给String这个属性传入值为likes。
Json数据类型
1,数组对象
坐标:
***@EnableWebMvc 加载SpringMvcConfig,开启json数据转化为实体类的方法。信息是存在请求体中
[“aaa”,"bbb","ccc"]==>public void pojoParam(@RequestBody List<String> likes)
@RequestBody是在将请求体中的json转化为body对象
2,pojo对象
{"name":"zhangsan",
"age":13,
"address":{
"city":"xuzhou:
}}==>public void pojoParam(@RequestBody User user)
3,多个pojo对象
前端传多个json的对象
{ "name":{
**:**
},
"address":{
**:""
}
}==>public void pojoParam(@RequestParam List<User> user)
日期类型参数传递:(String转Date)
http://localhost:8080/save?date1=2008/1/1 3:12:10 ==> public void Datatmps(@DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss) Data data)
其中pattern中得格式必须要和url中的格式完全一致。(注意“-”“/”)
响应:
servlet模式主要是响应页面。
@RequestMapping
public String toJump("/**"){
***;
return "**.html"}
json大部分是响应数据。
@RequestMapping
@ResponseBody
public String toJump("/**"){
***;
return "**.html"} ==>返回的是字符串 **.html
返回pojo对象的json对象只需要@ResponseBody 把String改变为具体的类
@ResponseBody:设置当前控制器返回值未响应体