在springMVC中咱们通常使用注解的形式来完成web项目,可是若是不明白springmvc的对于不一样注解的应用场景就会很容易犯错误css
一、什么是restful形式:前端
restful形式的在springmvc中使用须要修改前端控制器:非restful形式的是.do或者.action。而restful形式的是/.java
二者能够都在web.xml中配置两种前端控制器。可是注意:改成restful形式的须要设置静态资源映射,由于js、css等文件springmvc访问不到了,须要在springMVC.xml中设置web
静态资源映射:spring
<!-- 前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 加载springmvc配置 --> <init-param> <param-name>contextConfigLocation</param-name> <!-- 配置文件的地址 若是不配置contextConfigLocation, 默认查找的配置文件名称classpath下的:servlet名称+"-serlvet.xml"即:springmvc-serlvet.xml --> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 能够配置/ ,此工程 全部请求所有由springmvc解析,此种方式能够实现 RESTful方式, 须要特殊处理对静态文件的解析不能由springmvc解析 能够配置*.do或*.action,全部请求的url扩展名为.do或.action由springmvc解析, (这里的url配置即网页访问的连接路径,若是使用restful形式,则配为/,此时须要在springmvc中配置资源映射:<mvc:resource....> 若是不是/,则用*.do或*.action,此时不须要配置资源映射,springmvc就能够解析这些静态文件) 此种方法经常使用 不能够/*,若是配置/*,返回jsp也由springmvc解析,这是不对的。 --> <url-pattern>*.action</url-pattern> </servlet-mapping> <!-- restful的配置 --> <servlet> <servlet-name>springmvc_rest</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 加载springmvc配置 --> <init-param> <param-name>contextConfigLocation</param-name> <!-- 配置文件的地址 若是不配置contextConfigLocation, 默认查找的配置文件名称classpath下的:servlet名称+"-serlvet.xml"即:springmvc-serlvet.xml --> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc_rest</servlet-name> <!-- rest方式配置为/ --> <url-pattern>/</url-pattern> </servlet-mapping>
restfu形式是否获取json格式的数据,在http头文件中的accept与Content-Type中就肯定了使用哪一种数据。json
RESTful软件开发理念,RESTful对http进行很是好的诠释。服务器
RESTful即Representational State Transfer的缩写。restful
综合上面的解释,咱们总结一下什么是RESTful架构:架构
(1)每个URI表明一种资源;mvc
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端经过四个HTTP动词,对服务器端资源进行操做,实现"表现层状态转化"。
区别:下面是jsp页面书写的区别:
非RESTful的http的url:http://localhost:8080/items/editItems.action?id=${id}。页面的url是此种类型的,咱们能够判断是非restful形式的,
RESTful的url是简洁的:http:// localhost:8080/items/editItems/${id}.经过此咱们能够判断是restful形式的访问。
参数经过url传递,rest接口返回json数据
对于这个id的参数绑定的区别:
非restful的参数绑定就是以前介绍过的在controller的方法的参数中直接绑定便可。
http://localhost:8080/items/editItems.action?id=${id}
restful形式的参数绑定和@RequestMapping的写法:
http:// localhost:8080/items/editItems/${id}
因此到底使用哪一个注解,取决因而否是restful的形式访问。
四、@RequestParam与@PathVariable注释的区别
因此@PathVariable这里主要用于restful形式的访问。
@RequestParam主要用于非restful的参数绑定,可是若是页面的参数跟方法中的参数名称保持一致就不须要写此注解。若是不一致须要使用。
利用若是有默认值的话,就必需要用此注解,用defaultValue属性。