文章目录
4、使用注解开发SpringMVC
基本的一些流程创建web项目、导入pom依赖、编写代码、参数。
编写代码
-
web.xml
- 注册DispatcherServlet
- 关联springMVc配置文件
- 设置启动级别为1
- 映射路径为/
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!-- 配置DispatchServlet : 这个是springMVC的核心:请求分发器:前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- DispatcherServlet 要绑定spring的配置文件 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <!-- 启动级别 --> <load-on-startup>1</load-on-startup> </servlet> <!-- 在springMVC中 / /* /: 只配置所有的请求,不会配置jsp页面 /*: 置所有的请求,包括jsp页面 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
-
springmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 自动扫描包、让指定包下的注解生效、由ioc容器统一管理 --> <context:component-scan base-package="com.wei.controller"/> <!-- 让SpringMvc不处理静态资源 如 .css .js等等... --> <mvc:default-servlet-handler/> <!-- 支持mvc注解驱动 在spring中一般 彩用@RequestMapping注解来完成映射关系 要想使@RequestMapping注解生效 必须向上下文中注册DefaultAnnotationHandlerMapping 和一个AnnotationMethodHandLerAdapter实例 这两个实例分别在类级别和方法级别处理。 而annotation-driven配置帮助我们自动完成上述两个实例的注入。 --> <mvc:annotation-driven/> <!-- 自动注入映射器和适配器 --> <!-- 视图解析器--> <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp/"/> <!-- 后缀 --> <property name="suffix" value=".jsp"/> </bean> </beans>
-
创建controller.java
@Controller public class HelloController { @RequestMapping("/hello") public String Hello(Model model){ //在模型中添加msg属性和值、可以在jsp页面中直接获取 model.addAttribute("msg","SpringMVC"); // return走的是视图解析器 /WEB-INF/jsp/hello.jsp return "hello"; } }
-
hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> ${msg} </body> </html>
-
测试结果
小结:
- 实现步骤
- 创建web项目
- 导入pom约束
- 编写web.xml、注册DispatcherServlet
- 编写springMVC文件
- 编写controller文件
- 测试结果
- 使用SpringMVC必须要配置三大件
- 处理器映射器、处理器适配器、视图解析器
- 通常我们只需要配置视图解析器、而处理器映射器和处理器适配器只需要我们开启注解驱动即可
5、Controller、RESTful风格
控制器Controller
- 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现。
- 控制器负责解析用户的请求并将其转换为一个模型。
- 在Spring MVC中-一个控制器类可以包含多个方法
- 在Spring MVC中,对于Controller的配置方式有很多种
5.1、实现接口方式
有一个接口controller实现类这个类就是一个控制器类它负责返回一个model
-
编写实现Controller接口的类
public class ControllerTest1 implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { ModelAndView vm = new ModelAndView(); vm.addObject("msg","ControllerTest1");// 模型 vm.setViewName("test");//视图 return vm; } }
-
将这个bean注入到spring中
<bean id="/t1" class="com.wei.controller.ControllerTest1"/>
-
编写前端jsp/这里要注意的是路径要和视图解析器对应上、否者找不到这个视图
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> ${msg} </body> </html>
-
配置tomcat测试结果
-
小结
- 实现接口Controller定义控制器是较老的办法
- 缺点是:一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller; 定义的方式比较麻烦;
5.2、注解Controller
-
@Cpntroller注解类型用于声明Spring类的实例是一个控制器
-
Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,需要在配置文件中声明组件扫描。
<!-- 自动扫描包、让指定包下的注解生效、由ioc容器统一管理 --> <context:component-scan base-package="com.wei.controller"/>
-
增加一个controller类、使用注解实现
@Controller public class ControllerTest2{ @RequestMapping("/t1") public String controllerTest2(Model model){ //springMVC会实例化一个model向视图值传值 model.addAttribute("msg","ControllerTest2"); //返回视图的位置 return "test"; } }
-
测试结果
5.3、@RequestMapping
@RequestMapping注解用于映射url到控制器类或-个特定的处理程序方法。可用于类或方法上。于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
@Controller
@RequestMapping("/test")
public class ControllerTest2{
@RequestMapping("/t2")
public String controllerTest2(Model model){
//springMVC会实例化一个model向视图值传值
model.addAttribute("msg","ControllerTest2");
//返回视图的位置
return "test";
}
}
从上面代码可以看出使用了两个一个在类上一个在方法上、如果在类上加了、访问路径就要加上类上的路径
如:
http://localhost:8080/test/t2
如没有在类上加
http://localhost:8080/t2
可以看出他就是多了一层关系、在访问时要加上而已。
其他@RequestMapping中还可以加其他参数
如:
@RequestMapping(value = "commit/{a}/{b}",method = RequestMethod.GET)
限定请求方式、限定为get请求、不是get请求则报错
RequestMethod.GET — 》 这个get可以换成post等等一些值里面可以设置:GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE : 请求方式
还有可以使用这种注解—》@GetMapping("/t1") : 设置资源访问路径、并设置请求的方式为get请求
- 还有其他的几种注解对应的是各种请求方式
- @GetMapping
- @PostMapping
- @PutMapping
- @DeleteMapping
- @PatchMapping
5.4、RESTful风格
什么是RESTful风格:他仅仅就是一个风格、是请求的一种风格
如:
http://localhost:8080/t2?name=小明&age=15 以前的提交url
http://localhost:8080/t2/name/小明/age/15 RESTful风格
代码测试
-
创建一个controller类
@Controller public class RestFulController { }
-
使用@PathVariable注解跟@RequestMapping注解中的{a}/{b}的值对应上
@Controller public class RestFulController { @RequestMapping("commit/{a}/{b}") public String Test(@PathVariable int a, @PathVariable int b, Model model){ int count = a+b; model.addAttribute("msg","结果是"+count); return "test"; } }