- 浏览: 2261914 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (423)
- FileNet相关 (3)
- 应用服务器相关 (22)
- Java综合 (77)
- 持久层 (24)
- struts (11)
- webservice (8)
- 虚拟机 (2)
- 光盘刻录 (0)
- AD及AD集群 (1)
- JS (33)
- F5 (0)
- loadrunner8.1 (0)
- Java 反编译工具 (2)
- DataBase (62)
- ant (1)
- 操作系统 (29)
- 我的任务 (3)
- 平台架构 (16)
- 业务规则引擎 (2)
- 模板 (1)
- EJB (5)
- spring (24)
- CMMI (1)
- 项目管理 (20)
- LDAP (13)
- JMS (10)
- JSP (19)
- JBPM (2)
- web MVC框架设计思想 (2)
- 第三方支付平台 (2)
- BUG管理工具 (1)
- 垃圾站 (2)
- php (1)
- swing (1)
- 书籍 (1)
- QQ qq (2)
- 移动互联网 (26)
- 爱听的歌曲 (0)
- hadoop (4)
- 数据库 (9)
- 设计模式 (1)
- 面试经验只谈 (1)
- 大数据 (9)
- sp (1)
- 缓存数据库 (8)
- storm (2)
- taobao (2)
- 分布式,高并发,大型互联网,负载均衡 (6)
- Apache Ignite (0)
- Docker & K8S (0)
最新评论
-
wangyudong:
新版本 Wisdom RESTClienthttps://gi ...
spring rest mvc使用RestTemplate调用 -
wangyudong:
很多API doc生成工具生成API文档需要引入第三方依赖,重 ...
spring rest mvc使用RestTemplate调用 -
zhaoshijie:
cfying 写道大侠,还是加载了两次,怎么解决啊?求。QQ: ...
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) -
xinglianxlxl:
对我有用,非常感谢
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) -
k_caesar:
多谢,学习了
利用maven的resources、filter和profile实现不同环境使用不同配置文件
关键字:springMVC有关RESTfull
Spring3中SpringMVC有关RESTfull URL的个人实现2010-07-22 00:10有关REST介绍、使用等的文章在网络上不计其数,REST好像又是一大热门,不过还好,已经有REST框架了,至少是个实质性的东西。
说实在的,有关REST这个四个英文字母我看得很多,但是一直都没有学习、研究过它到底是个什么东西,对我的学习和工作有什么影响。直到今天用Spring3的SpringMVC在做开发时才注意到它。
以前用的Struts1和Struts2做Web MVC框架,一般后缀都是.do, .jspx等,并且对于一些简单的CURD,后面还会加上?id=${id},类似其它。
所以我为了使URL更加的好看,也更想让Web爬虫光临,于是把URL用url rewrite做了个分发,例如:/user-view-1.htm 对应的是 /user/view.do?id=1
这样做后,Web站点的URL确实美观了许多。
现在公司都是用SpringMVC,其通过注释来指明URL,在两个月前第一次接触时,也确实感觉它的强大的威力。
比如:@RequestMapping(value = "/user-view-{id}"),它就可以接受一类URL,通过@PathVariable long id,就可以得到以前分发的效果了。
由于要拦截以'/'开头的URL,所以要改变原有的配置了,修改后的Web.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>aboyprod</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:META-INF/spring/*.xml</param-value>
</context-param>
<!-- 过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter>
<filter-name>SecurityControlFilter</filter-name>
<filter-class>com.aboy.web.filter.SecurityControlFilter</filter-class>
</filter>
<!--
<filter> <filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
-->
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SecurityControlFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
<filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name>
<servlet-name>dispatcher</servlet-name> </filter-mapping>
-->
<!-- Spring Starter -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>com.aboy.web.listener.JbpmContextListener</listener-class>
</listener>
<!--负责处理由JavaBeans Introspector的使用而引起的内存泄露。-->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- 支持session scope的Spring bean -->
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<!-- Servlet:Dispatcher -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Servlet:CXFServlet -->
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Mapping:Default -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</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>*.ico</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.bmp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.xml</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.txt</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<!-- Mapping:Dispatcher -->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- Mapping:CXFServlet -->
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/jws/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>
从上面的配置可以看出,显示指定了default的Servlet拦截一些静态资源。
说了这么多,好像跟RESTfull URL没有关系的,有关REST的介绍,有文:http://www.infoq.com/cn/articles/rest-introduction
下面是我自己的一些RESTfull URL设计,以user为例,列出了CURD操作,第二列为HTTP操作,ALL代表GET、POST、PUT和DELETE都行:
/user-search ALL => search()
/user-list ALL => list()
/user-list-{page} ALL => list()
/user-post ALL => post()
/user-create ALL => create()
/user-view-{id} ALL => view()
/user-modify-{id} ALL => modify()
/user-update-{id} ALL => update()
/user-remove-{id} ALL => delete()
/user-remove ALL => deleteBatch()
我们知道,HTTP的URL操作有4个:GET、POST、PUT和DELETE,一般场合中,我们只用了最常用的两个:GET和POST,我们当然完全可以充分利用全部四个。
做法就是去掉上面web.xml中有关HiddenHttpMethodFilter的注释,我们就可以这样了:
@RequestMapping(value="/user-{id}", method=RequestMethod.GET) 代表查看信息;
@RequestMapping(value="/user-{id}", method=RequestMethod.PUT) 代表更新信息;
@RequestMapping(value="/user-{id}", method=RequestMethod.DELETE) 代表删除信息;
但是除了GET之外,其它的两个操作都是提交表单操作,并且要增加一个隐藏域
<input type="hidden" name="_method" value="put"/> 或是
<input type="hidden" name="_method" value="delete"/>
可以看出其弊端了:
1、URL一样,只是不同的HTTP操作,想发个链接给朋友,也许发出去的链接对方GET后,根本不是我想发的;
2、需要增加额外的配置(web.xml,Controller);
3、非常的死板,要删除一个用户或是更新信息,必须得通过表单才行。
于是,为了唯一标注一个URL,我的做法是:模块-操作-参数……,与具体的HTTP操作无关。
比如:/user-list-{page},代表查看第{page}页user列表,这个URL,不管在哪个HTTP操作(GET、POST、PUT和DELETE),其结果都是一样的。
===========================================
如有批评、指教、疑惑,请:zhaoshijie168@126.com
祝大家使用JAVA愉快!
发表评论
-
Dubbo Main启动方式浅析
2015-05-27 13:54 15455关键字:Dubbo Main启动方式浅析 服务容器是一个s ... -
spring中的数据源配置信息加密方案
2014-10-22 10:36 1076关键字:spring中的数据源配置信息加密方案 附件是完整的 ... -
基于Spring可扩展Schema提供自定义配置支持
2014-07-21 18:38 1009关键字:基于Spring可扩展Schema提供自定义配置支持 ... -
spring 自定义注解实现(MVC层)
2014-07-21 17:32 866关键字:spring 自定义注解实现(MVC层) 前言 在 ... -
Spring MVC 单元测试
2013-12-10 17:56 7977关键字:Spring MVC 单元测试 下面一步一步带领大家 ... -
优化程序之前,可用Jamon来监测你的Spring应用
2013-11-28 23:52 2050关键字:优化程序之前,可用Jamon来监测你的Spring应 ... -
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)
2013-11-14 14:01 77275关键字:spring容器加载完毕做一件事情(利用Context ... -
Java MVC框架性能比较 jsp、struts1、struts2、springmvc3
2013-10-30 17:41 2285关键字:Java MVC框架性能比较 jsp、struts1 ... -
spring JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)
2013-03-26 15:07 9200关键字:spring JTA集成JOTM或Atomikos配置 ... -
mongodb spring支持
2012-12-17 10:11 1027关键字:mongodb spring支持 相关链接: ... -
spring aop实现日志功能
2012-11-22 14:48 3360关键字 :sping aop实现日志功能 附件是spin ... -
Spring + CXF + 注解方式(webService)
2012-11-02 11:34 6775关键字:Spring + CXF + 注解方式(webS ... -
Spring + Xfire + 注解方式
2012-11-01 15:08 1253关键字:Spring 与集成 Xfire 注解方式( Spr ... -
spring rest mvc使用RestTemplate调用
2012-11-01 12:25 70411关键字:RestTemplate使用 可参考博客: ... -
java面向切面编程
2011-09-24 15:37 2361关键字:java面向切面编程 原理简述:java面向切面编 ... -
SpringMVC添加支持Http的delete、put请求
2011-06-02 23:28 3411浏览器form表单只支持GET与POST请求,而DEL ... -
spring文件上传(3.0)
2011-06-02 22:44 2959关键字:Spring CommonsMultipartReso ... -
spring3.0多文件上传例子
2011-06-02 22:43 6675关键字:spring3.0多文件 ... -
spring3.0 mvc rest 注解之@
2011-05-16 22:17 3550关键字:spring mvc rest 注解之@ 本文转自h ... -
spring3.0 mvc和rest入门例子
2011-05-07 19:22 2870关键字:spring3.0 mvc和rest入门例子 现在 ...
相关推荐
SpringMVC是一个强大的Java web应用程序框架,用于构建高效、可维护的Web应用。它提供了模型-视图-控制器(MVC)模式,使得开发者能够更专注于业务逻辑,而不是底层的HTTP处理。RESTful架构是一种软件架构风格,常...
- 创建 Maven 或 Gradle 项目,添加 SpringMVC 相关依赖。 - 编写 SpringMVC 的配置文件,包括 `web.xml` 和 `dispatcher-servlet.xml`,配置 DispatcherServlet 和 ContextLoaderListener。 - 创建 Controller ...
只是一个整合了spring,springMVC,hibernate的基础框架java纯后台工程,使用的是RESTfull风格的Springmvc作为controller层。编译后可能好几十mb,我网慢,只有源代码,可能比较小,需要的话可以自己编译。
下面我们将深入探讨SpringMVC的相关知识点。 1. **核心组件**: - **DispatcherServlet**:它是SpringMVC的前端控制器,负责接收HTTP请求,根据请求信息找到对应的处理器,并调用处理器进行处理。 - **...
SpringMVC 是一款基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。本教程将深入探讨 SpringMVC 的核心概念、配置以及实际应用。...
SpringMVC是Spring框架的一个模块,专为构建Web应用程序提供模型-视图-控制器(MVC)架构。这个“springMVC练手代码”压缩包包含的资源可以帮助初学者或开发者深入了解并实践SpringMVC的基本操作和核心概念。 首先...
Jetbrick-SpringMVC是一个基于Java的轻量级Web应用框架,它主要为SpringMVC提供了一套增强功能和便利的扩展。这个jar包包含了Jetbrick-SpringMVC的源码,使得开发者能够深入理解其内部工作原理,方便进行定制化开发...
SpringMVC和MyBatis是Java Web开发中的两个核心框架,它们在构建高效、模块化的应用程序方面发挥着重要作用。SpringMVC是Spring框架的一部分,主要负责处理HTTP请求和响应,而MyBatis则是一个轻量级的持久层框架,...
SpringMVC是一个强大的Java Web开发框架,由Spring社区开发,它是Spring生态系统的重要组成部分,主要用于构建后端服务。SpringMVC以其灵活的配置、高度模块化和优秀的性能深受开发者喜爱。在这个"springmvc实战项目...
我们首先需要添加 SpringMVC 相关的 JAR 包,然后在 web.xml 中添加 SpringMVC 前端控制器相关配置。在 springmvc-servlet.xml 中,我们需要添加 SpringMVC 配置,以便配置 SpringMVC 框架。 Hibernate 框架 ...
SpringMVC和SQLiteJDBC是两个在Java开发中常见的组件,它们分别用于构建Web应用程序和服务端数据存储。这里我们详细探讨这两个技术以及它们如何协同工作。 **SpringMVC** SpringMVC是Spring框架的一个模块,专门...
在Maven的pom.xml文件或Gradle的build.gradle文件中,我们会看到SpringMVC及相关库的依赖条目。 2. **SpringMVC配置**:在项目中,会有一个或多个配置文件,如`DispatcherServlet-servlet.xml`,用于配置SpringMVC...
springmvc 笔记
【SpringMVC】 SpringMVC是Spring框架的一部分,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)架构。SpringMVC通过将业务逻辑、控制逻辑和显示逻辑分离,提高了代码的可维护性和可测试性。在...
springmvc基础 包含代码+知识点+详细解释 1. 什么是springmvc? 2. springmvc框架原理 前端控制器、处理器映射器、处理器适配器、视图解析器 3. springmvc入门程序 目的:对前端控制器、处理器映射器、处理器...
1. 引入依赖:在 Maven 或 Gradle 项目中添加 SpringMVC 相关的依赖库。 2. 配置 Servlet:在 web.xml 文件中配置 DispatcherServlet,并设置其初始化参数,指向 SpringMVC 的配置文件。 3. 创建 SpringMVC 配置文件...
本压缩包包含的是与SpringMVC相关的Jar包,可能包括SpringMVC的核心库、Mybatis整合所需的依赖以及支持JSON处理和文件上传的组件。 1. **SpringMVC核心组件**: - `spring-webmvc.jar`:Spring MVC的主要实现库,...
《尚硅谷SpringMVC部分全套教学文档笔记》涵盖了SpringMVC框架的核心概念和技术,通过一系列章节深入浅出地讲解了SpringMVC的各个方面。以下是基于这些文档内容的详细知识点总结: 1. **SpringMVC概述与HelloWorld*...