003 使用maven创建RESTful风格的spring MVC项目(重构)

003 使用maven创建RESTful风格的spring MVC项目(重构)

视频发布在youtube上面了
https://youtu.be/4Qwotj5H04I
优酷上面的链接
http://v.youku.com/v_show/id_XMjc4NzUwNjkwMA==.html?f=49760672

接着002中的项目操作

  • 配置web.xml文件;

/src/main/webapp/WEB-INF/web.xml
web.xml 的加载顺序是:context-param -> listener -> filter -> servlet
安装了springmvc插件之后,alt+/ 找到dispatcher会输出模板,这里面就做两件事情:

  1. 映射spring DispatcherServlet
  2. 配置springMVC配置文件路径
<servlet>
   <servlet-name>springDispatcherServlet</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <init-param>
       <param-name>contextConfigLocation</param-name>
       <!-- springmvc 配置文件路径 -->
       <param-value>classpath:springmvc.xml</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
   <servlet-name>springDispatcherServlet</servlet-name>
   <!-- / 表示应答所有请求 -->
   <url-pattern>/</url-pattern>
</servlet-mapping>

这里使用4.3.7不知道为什么使用4.3.8的时候会找不到InternalResourceViewResolver有了解的同学希望能够分享一下。

<properties>
    <!-- spring版本号 -->
    <spring.version>4.3.7.RELEASE</spring.version>
</properties>

maven会自动引入相关的依赖包,所以这里只需要配置spring-webmvc就可以了
修改junit版本为4.12

<!-- SpringMVC的依赖 会自动引入相关的包-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
  • 配置springmvc.xml;
    右键单击resources目录new-other-spring Bean Configuration File:springmvc.xml
    选xsd: beans, context, mvc
    因为上次建立这个文件的时候还没添加spring相关的依赖包所以没有选择xsd,这里添加完依赖包之后,使用maven update一下,就可以选择了。
<!-- 配置自动扫描的包 -->
<context:component-scan base-package="com.study.controller"></context:component-scan>
<!-- 配置视图解析器 -->
<bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>
  • 建立控制器包
    com.study.controller
    新建一个类UserController
@Controller
public class UserController {

    @RequestMapping(value="/putRequest/{id}", method=RequestMethod.PUT)
    public String putRequestProc(@PathVariable("id") Integer id)
    {
        System.out.println("REST Request PUT: " + id);
        return "success";
    }

    @RequestMapping(value="/deleteRequest/{id}", method=RequestMethod.DELETE)
    public String deleteRequestProc(@PathVariable("id") Integer id)
    {
        System.out.println("REST Request DELETE: " + id);
        return "success";
    }

    @RequestMapping(value="/postRequest", method=RequestMethod.POST)
    public String postRequestProc()
    {
        System.out.println("postRequestProc");
        return "success";
    }

    @RequestMapping("/getRequest/{id}")
    public String getRequestProc(@PathVariable("id") Integer id)
    {
        System.out.println("getRequestProc" + id);
        return "success";
    }
}

@Controller 表示这是一个处理请求的控制器。
@RequestMapping(“/getRequest”) 表示映射请求的路径
@PathVariable(“id”) 表示请求里面的变量
都比较直观,如果想了解更详细的说明,可以去官网看相关文档。

编辑index.jsp 添加一些链接,点击后会发送getRequest请求,然后会在controller里面寻找@RequestMapping(“/getRequest”)的方法来处理请求,postRequest也是类似的处理

<form action="putRequest/1" method="post">
    <input type="hidden" name="_method" value="PUT" /> <input
        type="submit" value="testRest PUT" />
</form>
<br />
<br />
<form action="deleteRequest/1" method="post">
    <input type="hidden" name="_method" value="DELETE" /> <input
        type="submit" value="testRest DELETE" />
</form>
<br />
<br />
<form action="postRequest" method="POST">
   <input type="submit" text="Post Request">
</form>
<br><br>
<a href="getRequest/1">Hello World!</a>

点击后会发送getRequest请求,然后会在controller里面寻找@RequestMapping(“/getRequest”)的方法来处理请求,
使用视图解析器里面配置的prefix + 控制器返回值 + suffix来生成视图页面的名字在这里就是/WEB-INF/views/success.jsp
- 新建视图文件success.jsp

        <h2> Success Page</h2>

@RequestMapping 还可以修饰类,基于web项目根目录。
修饰方法的时候就是:项目路径+类路径+方法路径

REST:Representational State Transfer
表现层状态转化。听起来不是很明晰。
直接的说就是使用下面的方式来提供API接口
/order/1 GET 获取资源 id=1
/order POST 新建资源
/order/1 PUT 更新资源 id=1
/order/1 DELETE 删除资源 id=1

要使用PUT和DELETE需要在web.xml里面增加一个配置来吧POST请求转换为PUT和DELETE

<!--映射POST请求为DELETE,PUT请求-->
<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>

遇到的问题,如下:

HTTP Status 405 - JSPs only permit GET POST or HEAD

有三种解决方法

第一:taocat换到7.0以及以下版本
第二:请求先转给一个Controller,再返回jsp页面
第三种:在你的success页面头部文件将
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
多加一句话:isErrorPage设置为true,默认为false
如果有需要交流的,或者有更好的实现方法的同学,欢迎通过电子邮件来互通有无,共同进步。
ascomtohom@126.com
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值