springmvc对RESTful支持

springmvc对RESTful支持

1.什么是RESTful

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

RESTful(即Representational State Transfer的缩写)其实是一个开发理念,是对http的很好的诠释。(表现层的状态转换)

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

非REST的url:http://…/queryItems.action?id=001&type=T01

REST的url风格:http://…/items/001/get

特点:url简洁,将参数通过url传到服务端

1.2 http的方法规范

不管是删除、添加、更新,使用url是一致的。(四个HTTP动词)

删除资源,需要设置http的方法为delete;同理添加资源,需要设置http的方法为post;

更新资源,需要设置http的方法为put;获取资源,需要设置http的方法为get;

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

PS:一个controller方法既要做逻辑,又要做上述判断,太麻烦,往往实际开发不这样写

1.3对http的contentType规范

请求时指定contentType,要json数据,设置成json格式的type。。

2.REST的例子

2.1需求

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

2.2 controller

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

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

@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ktpFjycY-1640929029179)(image/wps101.jpg)]

@RequestMapping(value="/itemsView/{id}"):{×××}占位符,请求的URL可以是“/viewItems/1”或“/viewItems/2”,通过在方法中使用@PathVariable获取{×××}中的×××变量。

如果RequestMapping中表示为"/ itemsView /{id}",id和形参名称一致,@PathVariable不用指定名称。

2.3 REST方法的前端控制器配置

XML版本 - 在web.xml配置REST风格访问

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d5jwePUq-1640929029183)(image/wps102.jpg)](https://img-blog.csdnimg.cn/23c7de7cd44a463d8ab24027eab79a16.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2hhdCdzIHlvdXIgbmFtZS4=,size_11,color_FFFFFF,t_70,g_se,x_16)

<filter>
    <filter-name>HttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>HttpMethodFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
JavaConfig配置类版本 - 在web.xml配置REST风格访问

WebInitializer 类

public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{

    //启动
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
    }

    //加载Spring的配置类
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{MyBatisConfig.class , TransConfig.class};
    }

    //加载MVC的配置类
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMVCConfig.class};
    }

    //前端控制器 DispatcherServlet  RestFul风格  /
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    //过滤器
    @Override
    protected Filter[] getServletFilters() {
        Filter[] filters = {
                new CharacterEncodingFilter("UTF-8"),
                new HiddenHttpMethodFilter()
        };
        return filters;
    }
}

测试:

原来url :http://localhost:8899/testSpringMVC_MyBatis/items/editItem.action?id=1

REST风格url:http://localhost:8899/testSpringMVC_MyBatis/items/viewItems/1

3.对静态资源的解析

配置前端控制器的url-parttern中指定/,对静态资源(js、css、img等)的解析出现问题:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BoqFuE5k-1640929029189)(image/wps103.jpg)]

XML版本 - 在springmvc-annotation.xml中添加静态资源解析方法

<!-- 静态资源解析,包括:js、css、img等资源 -->
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/img/" mapping="/img/**"/>
<!-- 替代上述配置 -->
<mvc:default-servlet-handler/>  

JavaConfig配置类版本 - 在SpringMVCConfig类中添加静态资源解析方法

//对静态资源放行
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}

4.需求

操作用户(增删改查)

JSP页面:

form表单指定method为POST,且添加

<input type="hidden" name="_method" value="PUT"/>
<input type="hidden" name="_method" value="DELETE"/>
// 删
@RequestMapping(value = "/user/{id}", method = RequestMethod.DELETE)
public String delete(@PathVariable("id") Integer id) throws Exception {
		restfulService.delete(id);
		return "redirect:/users";
}

// 查
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public String get(@PathVariable Integer id, Model model) throws Exception {
		User user = restfulService.selectById(id);
		model.addAttribute("user", user);
		return "/user/userEdit.jsp";
}

// 改
@RequestMapping(value = "/update", method = RequestMethod.PUT)
public String update(User user,HttpServletRequest request) throws Exception {
		restfulService.update(user);
		return "redirect:/users";
}

删除资源,需要设置http的方法为delete;同理添加资源,需要设置http的方法为post;

更新资源,需要设置http的方法为put;获取资源,需要设置http的方法为get;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

what's your name.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值