spring mvc搭建web services

来源:互联网 发布:python range函数菜鸟 编辑:程序博客网 时间:2024/05/22 15:27

问题背景

        这两日在处理上司交给的任务的时候接触到了web services,感觉这个跨越语言还有环境的接口调用方式真的是非常之优雅,于是就想着自己能不能试着实现一下。

技术选型&&准备

        在技术的选型上初期的话遇到了比较多的问题,也看到了网上非常多的技术方案,在茫茫的信息流中还是看到了一款非常适合我的方案,那就是spring mvc。

        当然,第一件需要我们做的事情就是首先将项目需要依赖的jar包全部引入,在此奉送我的pom.xml文件的内容。

<dependency>    <groupId>com.alibaba</groupId>    <artifactId>fastjson</artifactId>    <version>1.2.6</version></dependency><dependency>    <groupId>javax.servlet</groupId>    <artifactId>servlet-api</artifactId>    <version>2.5</version></dependency><dependency>    <groupId>org.springframework</groupId>    <artifactId>spring-test</artifactId>    <version>3.2.9.RELEASE</version></dependency>

具体步骤

        废话不多说,进入我们今天的主题,如何利用spring mvc搭建web services。建立项目什么的鄙人就不在多言。主要说的是:如何配置。

配置web.xml文件

配置web.xml文件,因为我们的web项目一旦部署到web容器中去,首先加载的就是这个文件,可以说,这是我们配置的起点,俗话说得好,打蛇打七寸,我们就首先从这里入手:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns="http://java.sun.com/xml/ns/javaee"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_3.xsd"    id="WebApp_ID" version="2.3">    <display-name>web services</display-name>    <welcome-file-list>        <welcome-file>index.jsp</welcome-file>    </welcome-file-list>    <!-- 服务器启动即自动加载 -->    <servlet>        <servlet-name>SpringMVC</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <!-- 指定配置文件的位置 -->            <param-name>contextConfigLocation</param-name>            <param-value>WEB-INF/spring-mvc.xml</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>SpringMVC</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping></web-app>

        这里其实也没有什么好配置的,基本就是老一套,但凡跑过spring mvc的小伙伴都看的出来这里没有什么不一样。

配置spring-mvc.xml

        从上面我们可以看到,在springmvc默认的dispatcherservlet中我们读取了spring-mvc.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:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util"    xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.5.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsdhttp://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-2.5.xsd">    <!-- 使能注解 -->    <context:annotation-config />    <!-- 制定扫描注解的base包 -->    <context:component-scan base-package="com.weimob.webservices.controller" />    <!-- 配置mvc的注解映射 -->    <bean        class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />    <!-- 配置适配器 -->    <bean        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /></beans>

        从上面的配置我们可以看到,出现了两个在以往的配置中不会出现的类,那就是DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter,这里的话这两个类主要是用来做返回参数的适配的,也就是说你返回一个对象的话,其会自动适配为json格式的字符串。但是,今天我们并没有采取这样的方式,下面将会详细说明。其实着重强调这里的原因是这里体现了java的一种设计模式,适配器模式。

@Controller层的书写

        Controller层的书写是最后的重中之重,下面,让我们来看看:

package com.weimob.webservices.controller;/** * proxy</br> * @author fulei.yang * */@Controllerpublic class TestController {    private static final String DEFAULT_CHARSET = "UTF-8";    private static final String DEFAULT_CONTENT_TYPE_NAME = "content-type";    private static final String DEFAULT_CONTENT_TYPE_VALUE = "application/json;charset=UTF-8";    @RequestMapping(method = RequestMethod.POST, value = "/testpost")    public void testPost(HttpServletRequest httpRequest, HttpServletResponse httpResponse) {        // 输出的时候规范编码格式        httpResponse.setCharacterEncoding(DEFAULT_CHARSET);        httpResponse.setHeader(DEFAULT_CONTENT_TYPE_NAME, DEFAULT_CONTENT_TYPE_VALUE);        // 写入传送到客户端的内容        try {            PrintWriter pWriter = httpResponse.getWriter();            Customer customer = new Customer("fulei", "man", "age");            pWriter.print(JSON.toJSONString(customer));            pWriter.flush();            pWriter.close();        } catch (IOException e) {            e.printStackTrace();        }    }}

        从上面的内容我们可以看到这样的几个注解,下面一一说明:

注解名 作用 @Controller 确定这个类属于Controller层,这个层级化主要负责处理外来请求 @RequestMapping 这个就是Base_url后面跟的path,也就是资源所在的路径。(value代表path,前面的参数代表如何请求)

        到了这一步,我们的开发任务也就已经做完了,接下来进入测试阶段。

测试

        首先将我们的应用部署到服务器上去,我在这里使用的是postman进行测试的,在路径输入:

http://localhost:8080/testpost

然后提交请求即可,具体的图就不在这里放出来了,对了,代码里面的Customer类是我本地的一个POJO类,这个不是什么重点问题。就不在多言了。

总结

        我发现在网上写这个方面的资料都是一笔带过,很不适合我这样的小白。其实在做的过程中遇到了很多坑,比如说:

1:在配置spring-mvc.xml文件的时候就因为缺少了xsd文件吃亏了。
2:在方法中输出到pWriter的时候没有设置编码格式导致乱码。
3:以为这个方法必须返回,要不然Client拿不到数据。其实完全不是这样的。

        当然,有一颗折腾的心,有啥问题解决不了呢?你说是吧?这篇文章只是一个大概的总结,到时候会对web services在进行比较详细的总结的。

题外话

        欢迎大家到我的个人博客HenryMemory’s Blog。谷歌一下wangmeng1314也可以偶!

HenryMemory’s Blog

0 0