SpringMVC简单介绍与REST风格的URL

Spring MVC

Spring MVC属于SpringFrameWork的后续产品。Spring框架提供了构建WEB应用程序的全功能MVC模块。
使用Spring可插入的MVC框架,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架。
Spring MVC 3.0新特性
支持REST风格的URL
添加更多注解,可完全注解驱动
引入HTTP输入输出转换器(HttpMessageConverter)
和数据转换、格式化、验证框架无缝集成
对象静态资源处理提供特殊支持
更加灵活的控制器方法签名,可完全独立于ServletAPI
SpringMVC开发环境的简单搭建
需要加载的依赖
<!-- springmvc依赖 -->
  <dependency>
  	<groupId>org.springframework</groupId>
  	<artifactId>spring-webmvc</artifactId>
  	<version>4.2.0.RELEASE</version>
  </dependency>
springmvc最核心的类是DispatcherServlet
我们需要将它配置在web.xml    
	<servlet>
		<servlet-name>mvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>mvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
通过<url-patten>指定的路径,进入DispatcherServlet类里的service方法去处理
我们还需要在WebRoot下配置一个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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">


</beans>
配置好后我们就可以发布到tomcat
访问index
SpringMVC开发结构
package com.baobaotao.web;
...
@Controller                           ① 将UserController变成一个Handler
@RequestMapping(“/user”)   ②指定控制器映射的URL
public class UserController {

	@RequestMapping(value = “/register”) ③处理方法对应的URL,相对于
                                                                                    ②处的URL
	public String register() {
	          return “user/register”; ④返回逻辑视图名
	}
}
@RequestMapping支持URL
@RequestMapping不但支持标准的URL,还支持Ant风格(即?、*和**的字符,参见3.3.2节的内容)的和带{xxx}占位符的URL。以下URL都是合法的:
/user/*/createUser
    匹配/user/aaa/createUser、/user/bbb/createUser等URL。
/user/**/createUser
匹配/user/createUser/user/bbb/aa/createUserURL
/user/createUser??
匹配/user/createUseraa、/user/createUserbb等URL。
/user/{userid}
匹配/user/123/user/abcURL
/user/**/{userid}
匹配/user/aa/bb/123、/user/aa/abc等URL。
/company/{companyid}/user/{userid}/detail
匹配/company/123/user/313/detaiURL
Restful风格设计概念
REST,即Representational State Transfer的缩写。“表现层状态转化”。研究计算机科学两大前沿---软件和网络---的交叉点
“表现层”其实指的是“资源”(Resources)的“表现层”。所谓“资源”,就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具有信息。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。
restful URI的设计不该包含动词。因此“资源”表示一种实体,所以应该是名词,URI不应该有动词,某个URI是/arcticle/show/1,其中show是动词,这个URI就设计错了,正确的写法应该是//arcticle/1,然后用GET方法表示show.
优质WEB框架五条关键原则列举如下:
为所有“事物”定义ID
将所有事物连接在一起(超链接)
使用标准方法(Get、Post、Delete、Put)
资源多重表述(针对不同的需求提供资源多重表述 arcticle/1)
无状态通信(节省服务器内存)
REST是设计风格而不是标准  目的只是让URI看起来更简洁使用,是资源状态的一种表达,资源时由URI来指定,对资源的操作包括获取、创建、修改、删除资源这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。通过操作资源的表现形式来操作资源。
常用操作:
GET 获取
POST 提交
PUT 更新
DELETE 删除
常用的URI风格例如:
http://write.blog.csdn.net/postlist/0/all/draft
SpringMVC配置
<servlet>
	<servlet-name>mvc</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>mvc</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>
SpringMVC限定请求方法
请求方法,在HTTP中这被叫做动词(varb),除了两个大家熟知的(GET和POST)之外,标准方法集合中还包含PUT、DELETE、HEAD和OPTIONS。这些方法的含义连同行为许诺都一起定义在HTTP规范之中,一般浏览器只支持GET和POST方法。

示例:
查询
创建一个jsp
 <body>
    <form action="<%=path%>/query" method="get">
    	<input type="text" name="name"/><input type="submit" value="查询"> 
    </form>
  </body>
创建一个@Controller层的类
package cn.et.springmvc.lession01;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 * SpringMVC中一个路径和方法的映射叫做一个action(动作)
 * @author Administrator
 *
 */
@Controller
public class HelloController{

	@RequestMapping("/query")
	public String query(String name,HttpServletResponse response) throws Exception{
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println(name+":查询");
		return null;
	}
}
访问index并查询


新增
<body>
    <form action="<%=path%>/add/55" method="post">
    	<input type="text" name="name"/><input type="submit" value="添加"> 
    </form>
  </body>
@RequestMapping(value="/add/{id}",method=RequestMethod.POST)
	public String add(@PathVariable(value="id")String id,String name,HttpServletResponse response) throws Exception{
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println(id+"="+name+":添加");
		return null;
	}
因为是修改所以我们需要在web.xml里配置一个请求限定的
<!-- 请求method支持put和delete必须添加过滤器 -->
	<filter>
		<filter-name>myFile</filter-name>
		<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>myFile</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
通过POST请求的_method参数指定请求方法,HiddenHttpMethodFilter动态更改HTTP头信息。


修改
 <body>
    <form action="<%=path%>/update/11" method="post">
    	<input type="hidden"name="_method" value="put" > 
    	<input type="text" name="name"/><input type="submit" value="提交"> 
    </form>
  </body>
@RequestMapping(value="/update/{id}",method=RequestMethod.PUT)
	public String update(@PathVariable(value="id")String id,String name,HttpServletResponse response) throws Exception{
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println(id+"="+name+":修改");
		return null;
	}
删除
 <body>
    <form action="<%=path%>/delete" method="post">
    	<input type="hidden"name="_method" value="delete" > 
    	<input type="text" name="name"/><input type="submit" value="提交"> 
    </form>
  </body>
@RequestMapping(value="/delete",method=RequestMethod.DELETE)
	public String delete(String name,HttpServletResponse response) throws Exception{
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println(name+":删除");
		return null;
	}



个URI就设计错了,正确的R写法应该是// arc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值