• SpringMVC注解解析和项目配置


    1:@RequestMapping注解 

    作用:用于建立请求 URL 和处理请求方法之间的对应关系

    位置:

      类上,请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录

      方法上,请求 URL 的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径

    属性:

      value:用于指定请求的URL。它和path属性的作用是一样的

      method:用于指定请求的方式

      params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样    

    例如:

      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"/> &lt;!&ndash;exclude 扫描除了这个包下的所有包,就是扫描com.springMvc下面的除了Controller的其余的包&ndash;&gt;-->
        </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"/> &lt;!&ndash;exclude 扫描除了这个包下的所有包,就是扫描com.springMvc下面的除了Controller的其余的包&ndash;&gt;-->
        </context:component-scan>

    SpringMVC的XML配置解析

    SpringMVC有默认组件配置,默认组件都是DispatcherServlet.properties配置文件中配置的,该配置文件地址org/springframework/web/servlet/DispatcherServlet.properties,该文件中配置了默认的视图解析器,如下:

     org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver 

    翻看该解析器源码,可以看到该解析器的默认设置,如下:

    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"参数,指定了访问的路径 所以我们可以只写界面的名称即可
    }

    SpringMVC的相关组件

    前端控制器:DispatcherServlet
    
    处理器映射器:HandlerMapping
    
    处理器适配器:HandlerAdapter
    
    处理器:Handler
    
    视图解析器:View Resolver
    
    视图:View

    SpringMVC的注解和配置

    请求映射注解:@RequestMapping
    
    视图解析器配置:
    
    REDIRECT_URL_PREFIX = "redirect:"  
    
    FORWARD_URL_PREFIX = "forward:"    
    
    prefix = "";     
    
    suffix = "";     

     

  • 相关阅读:
    是什么意思
    Hql查询
    java的LINQ :Linq4j简明介绍
    Sqlite内存数据库
    ACE中的Proactor介绍和应用实例
    mysql的锁表问题
    消息:'null'为空或不是对象
    FusionChart中引入图类型和数据源方法
    实现FusionChart动态获取数据(二)
    JSP页面解决文件路径方法
  • 原文地址:https://www.cnblogs.com/zhaoyunlong/p/14245662.html
Copyright © 2020-2023  润新知