
导入坐标 , SpringMVC 和 servlet
javax.servlet javax.servlet-api3.1.0 provided org.springframework spring-webmvc5.2.10.RELEASE org.apache.tomcat.maven tomcat7-maven-plugin2.1 8080 / UTF-8
定义Controller
//2.定义Controller
//2.1 使用 @Controller 定义bean
@Controller
public class UserController {
//2.2 设置当前方法的访问路径
@RequestMapping("/save")
//2.3 设置当前操作的返回值的类型
@ResponseBody
public String save() {
System.out.println("user save ...");
return "{'module','SpringMVC'}";
}
}
创建 springmvc 的配置文件 , 加载controller对应的bean
//3. 创建 springmvc 的配置文件 , 加载controller对应的bean
@Configuration //设置为配置类
@ComponentScan("com.lyx.controller") //扫描包中配置的bean
public class SpringMvcConfig {
}
定义一个servlet容器启动的配置类, 在里面加载spring的配置
//4. 定义一个servlet容器启动的配置类, 在里面加载spring的配置
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
//加载springmvc容器配置
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx; //改成返回ctx
}
//设置哪些请求归属springMVC处理
@Override
protected String[] getServletMappings() {
return new String[]{"/"}; //所有请求都归springmvc处理
}
//加载spring容器配置
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
因为功能不同, 避免Spring错误加载到SpringMVC的bean ( 加载Spring控制的bean的时候排除掉SpringMVC控制的bean )
Controller加载控制与业务bean加载控制SpringMVC相关bean ( 表现层bean )
Spring控制bean
业务bean ( Service )
功能bean ( DataSource等 )
SpringMVC相关bean加载控制
Spring相关bean加载控制
方式一: Spring加载的bean设定扫描范围为精准范围, 例如service包, dao包等
方式二: Spring加载的bean设定扫描范围为com.lyx, 排除controller包内的bean
方式三: 不区分Spring与SpringMVC的环境, 加载到同一环境中
@Configuration
@ComponentScan({"com.lyx.dao","com.lyx.service"})
public class SpringConfig {
}
方式二
@Configuration
@ComponentScan(value = "com.lyx",
excludeFilters = @ComponentScan.Filter( //排除
type = FilterType.ANNOTATION, //按注解排除
classes = Controller.class //排除掉使用COntroller注解的bean
)
)
public class SpringConfig {
}
在Controller包中的文件创建根目录, 避免因重名阐述报错
@Controller
@RequestMapping("/user") //根目录
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'moudle':'user save'}";
}
@RequestMapping("/delete")
@ResponseBody
public String delete(){
System.out.println("user delete ...");
return "{'moudle':'user delete'}";
}
}
请求方式
Get请求
@RequestMapping("/save")
@ResponseBody
public String save(String name,int age){
System.out.println("book save ...");
System.out.println("name -->"+ name);
System.out.println("age -->"+ age);
return "{'moudle':'book save'}";
}
添加参数 name age
代码修改与get请求一致, Spring整合了get请求和post请求
但是请求中不能处理中文,所以添加过滤器 ( Filter )
重写servlet容器启动的配置类中的 getServletFilters() 方法
public class SercletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class>[] getRootConfigClasses() {
return new Class[0];
}
@Override
protected Class>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
//中文乱码处理
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter(); //字符过滤器
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
}
5种参数类型的传递
//普通数据类型
@RequestMapping("/commonparam")
@ResponseBody
public String commonParam(@RequestParam("user") String username,int age){
//@RequestParam给数据取别名
System.out.println("name ==>"+ username);
System.out.println("age ==>"+ age);
return "{'modle':'common param'}";
}
//POJO参数
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
System.out.println("user ==>"+ user);
return "{'modle':'pojo param'}";
}
//嵌套POJO参数
@RequestMapping("/pojoContainPojo")
@ResponseBody
public String pojoContaainPojo(User user){
System.out.println("user ==>"+ user);
return "{'modle':'pojo param'}";
}
//数组参数
@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String[] likes){
System.out.println("数组参数传递likes ==>"+ Arrays.toString(likes));
return "{'modle':'array param'}";
}
//集合参数
@RequestMapping("/listParam")
@ResponseBody
public String listParam(@RequestParam List likes){ //将值作为参数写入集合
System.out.println("likes ==>"+ likes);
return "{'modle':'list param'}";
}