SpringMVC对RESTful格式的url支持

来源:互联网 发布:云计算概念龙头股 编辑:程序博客网 时间:2024/05/17 01:48

什么是RESTful

RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。

RESTful(即Representational State Transfer的缩写)其实是一个开发理念,是对http的很好的诠释。

1、对url进行规范,写RESTful格式的url

非REST的url:http://…../queryItems.action?id=001&type=T01
REST的url风格:http://…./items/001
特点:url简洁,将参数通过url传到服务端

2、http的方法规范
不管是删除、添加、更新。。使用url是一致的,如果进行删除,需要设置http的方法为delete,同理添加。。。

后台controller方法:判断http方法,如果是delete执行删除,如果是post执行添加。

3、对http的contentType规范
请求时指定contentType,要json数据时,设置成json格式的type。。

REST的例子

查询商品信息,返回json数据。

controller

定义方法,进行url映射使用REST风格的url,将查询商品信息传入controller .

输出json使用@ResponseBody将java对象输出json。

    /**     * 查询商品信息,输出json     * /testRESTfulLink/{name}/{time}里面的{name}和{time}表示占位符,通过@PathVariable获取占位符中的参数,默认@PathVariable获取与形参名相同的占位符所表示的值。     * 如果@PathVariable获取了一个不存在的占位符的值,如@PathVariable(name = "lang") String xxx,这个就会报异常!!!!     * 在@PathVariable(name = "name")中的name名称可以省略,写成@PathVariable("name")两种都表示获取name占位符中的值。     * 形参顺序没有要求,本来就是通过@PathVariable来获取占位符的值。     * 如果我们的浏览器链接没有和该地址匹配上,也就是说该有占位符的地方浏览器url中没有,那么就会出现404----/testRESTfulLink/{name}/{time}     * 如:/testRESTfulLink/FireLang/2017-05-06 访问正常     * /testRESTfulLink/FireLang 出现404     *     * @param time     * @param xxx     * @return     * @throws Exception     */    @RequestMapping("/testRESTfulLink/{name}/{time}")    public @ResponseBody ItemCustom testRESTfulLink(@PathVariable String time,@PathVariable(name = "name") String xxx) throws  Exception{        ItemCustom itemCustom = new ItemCustom();        itemCustom.setName(xxx);        itemCustom.setCreatetime(new SimpleDateFormat("yyyy-MM-dd").parse(time));        return  itemCustom;    }

在web.xml配置:

注意:如果要实现这种风格的浏览器,那么前端控制器必须拦截所有的请求,所以要把Servlet的url-pattern设置为"/",当然对于你不需要拦截的请求,你可以根据请求后缀名,如请求.css,.js,.html等后缀结尾的请求包含在外。

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">    <!-- SpringMVC前端控制器 -->  <servlet>    <servlet-name>SpringMVC</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    <!-- contextConfigLocation配置SpringMVC加载的配置文件(配置处理器映射器、适配器等等)        如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-servlet.xml(SpringMVC-servlet.xml)    -->    <init-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath:Spring/applicationContext*.xml</param-value>    </init-param>    <!-- 配置servlet创建的优先级 -->    <load-on-startup>1</load-on-startup>  </servlet>  <servlet-mapping>    <servlet-name>SpringMVC</servlet-name>    <!--         第一种:*.action,访问以.action结尾由DispatcherServlet进行解析        第二种:/,所以访问的地址由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析,对于静态文件的解析需要配置,不让DispatcherServlet进行解析。        使用此种方式可以实现 RESTful 风格的url 。        第三种:/*,这样配置不对,使用这种配置,最终要转发到一个jsp页面时,仍然会由DispatcherServlet解析jsp地址,不能根据jsp页面找到Handler,会报错。    -->    <url-pattern>/</url-pattern>  </servlet-mapping>    <!-- post乱码过虑器 -->    <filter>        <filter-name>CharacterEncodingFilter</filter-name>        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>        <init-param>            <param-name>encoding</param-name>            <param-value>utf-8</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>CharacterEncodingFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <!-- 这里就是去掉那些不需要被前端控制器处理的请求,让Tomcat默认servlet帮你解析 -->    <servlet-mapping>        <servlet-name>default</servlet-name>        <url-pattern>*.jpg</url-pattern>    </servlet-mapping>    <servlet-mapping>        <servlet-name>default</servlet-name>        <url-pattern>*.js</url-pattern>    </servlet-mapping>    <servlet-mapping>        <servlet-name>default</servlet-name>        <url-pattern>*.css</url-pattern>    </servlet-mapping>    <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>index.htm</welcome-file>    <welcome-file>index.jsp</welcome-file>    <welcome-file>default.html</welcome-file>    <welcome-file>default.htm</welcome-file>    <welcome-file>default.jsp</welcome-file>  </welcome-file-list></web-app>

你会看都别人是下面这种写法来排除访问静态资源:

在springmvc.xml中添加静态资源解析方法。

这里写图片描述

mapping表示要过滤的访问路径("/**" 表示过滤所有层级路径),不让前端控制器来处理。
location表示过滤请求后要访问的静态资源路径。

关于访问静态文件的配置方式你可以查看该博客

本博客代码下载

1 0
原创粉丝点击