1:@RequestMapping注解
作用:用于建立请求 URL 和处理请求方法之间的对应关系
位置:
类上,请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录
方法上,请求 URL 的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径
属性:
value:用于指定请求的URL。它和path属性的作用是一样的
method:用于指定请求的方式
params = {"accountName"},表示请求参数必须有accountName
params = {"moeny!100"},表示请求参数中money不能是100
@RequestMapping(value = "/quick",method = RequestMethod.GET,params = {"name"}) 指定我们的url是/quick,请求是get请求,必须携带参数name
@RequestMapping在设置url地址的时候,既可以使用value也可以使用path,但是通常也都是省略不写
@RequestMapping()也可以做用在类上和方法搭配使用,搭配使用时候访问的url就要加上做用在类上的路径,并且返回的页面信息是要绝对路径的地址不能是相对路径
@Controller @RequestMapping("user")// 指定这个类下的所有的方法都是的访问路径前都是/user下的 public class QuickController { @RequestMapping("/quick") // localhost:8080/user/quick public String save(){ return "/success.jsp"; } // 因为是找到相对路径,我们是在quick的相对路径就是/user下的success.jsp ,所以要使用绝对路径就要在success.jsp前加上/ }
以上面为例我们在类上也制定了@RequestMapping之后访问的url必须是:http://localhost:8080/user/quick 然后返回的节目必须前面加上 / 是绝对路径,不然就是404
mvc命名空间的引入:
命名空间:xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
约束地址:http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
SpringMvc的组件扫描
SpringMVC基于Spring容器,所以在进行SpringMVC操作时,需要将Controller存储到Spring容器中,如果使用@Controller注解标注的话,
就需要使用<context:component-scan base-package=“com.itheima.controller"/>进行组件扫描。
<!-- 配置注解扫描--> <context:component-scan base-package="com.springMvc"> <context:include-filter type="annotation" expression="com.springMvc.Controller"/><!-- include-filter 指定只扫描这个包--> <!-- <context:exclude-filter type="annotation" expression="com.springMvc.Controller"/> <!–exclude 扫描除了这个包下的所有包,就是扫描com.springMvc下面的除了Controller的其余的包–>--> </context:component-scan>
springMvc.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:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-- 配置注解扫描--> <context:component-scan base-package="com.springMvc"> <context:include-filter type="annotation" expression="com.springMvc.Controller"/><!-- include-filter 指定只扫描这个包--> <!-- <context:exclude-filter type="annotation" expression="com.springMvc.Controller"/> <!–exclude 扫描除了这个包下的所有包,就是扫描com.springMvc下面的除了Controller的其余的包–>--> </context:component-scan>
翻看该解析器源码,可以看到该解析器的默认设置,如下:
REDIRECT_URL_PREFIX = "redirect:" --重定向前缀
FORWARD_URL_PREFIX = "forward:" --转发前缀(默认值)
prefix = ""; --视图名称前缀
suffix = ""; --视图名称后缀
我们不仅仅可以在@requestMapping中限定请求的参数,我们也就可以在@RequestParam注解中限定请求的参数
@RequestParam
作用: 仅仅只在方法上使用作用在方法的参数框内
@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
语法:
语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””) value:参数名 required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。 defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值
比如我们想要接受一个参数并且限制这个参数不为空,就可以在对应的方法框内进行此注解的使用
必须传递参数
@RequestMapping(path = "/quickTen") @ResponseBody public void quick9(@RequestParam(required = true) String name){ //指定请求必须有参数name,这个参数不可以为空 System.out.println(name); }
上面访问不传递参数就会报错:
required = false可以不用传递此参数
@RequestMapping(path = "quickEleven") @ResponseBody public void quick10(@RequestParam(required = false) String name){ //指定参数可以为空,不传name这个参数也不报错 System.out.println(name); //null }
defaultValue和required = true 一起使用required = true 会失效,自动改为false
@RequestMapping(path = "/quickTwelve") @ResponseBody public void quick11(@RequestParam(required = true,defaultValue = "老王") String name){//前面限定不能为空,但是后面加了默认值,限定的required = true就失效了,改为false System.out.println(name); }
prefix :前缀
suffix: 后缀
你的java代码的返回值会和前缀和后缀的内容进行拼接返回
<!-- 配置内部资源视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views"/> <!--指定你的界面文件读取目录--> <property name="suffix" value=".jsp"/> <!--指定你的界面文件加上.jsp,也就是你的java代码中不用在配置xx.jsp这样了 只需要写上要返回的界面名称就可以--> </bean>
界面返回设置:
我们在类中进行界面的返回的时候一般都是返回这个前端界面的全称例如:"xxx.jsp"或者"xxx.html" ,我们可以在xml中设置:InternalResourceViewResolver 类的参数来设置
如果我们想只想写返回界面的名称不指定路径和界面后缀名 可以这样设置
springMvc.xml
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <!--指定你的界面文件读取目录--> <property name="suffix" value=".jsp"/> <!--指定你的界面文件加上.jsp,也就是你的java代码中不用在配置xx.jsp这样了 只需要写上要返回的界面名称就可以--> </bean>
java代码
@Controller @RequestMapping("user")// 指定这个类下的所有的方法都是的访问路径前都是/user下的 public class QuickController { @RequestMapping("/quick") // localhost:8080/user/quick public String save(){ return "success"; } // 因为我们的配置文件中设置了 <property name="prefix" 和 <property name="suffix"参数,指定了访问的路径 所以我们可以只写界面的名称即可 }
前端控制器:DispatcherServlet
处理器映射器:HandlerMapping
处理器适配器:HandlerAdapter
处理器:Handler
视图解析器:View Resolver
视图:View
请求映射注解:@RequestMapping
视图解析器配置:
REDIRECT_URL_PREFIX = "redirect:"
FORWARD_URL_PREFIX = "forward:"
prefix = "";
suffix = "";