使用SpringMVC搭建Rest服务(3)

时间:2017-06-16 09:59

SpringConfig中还配置了一个Adapter,这个转换器是Spring用来转换消息体时使用的,在这里,我们为Adapter配置了两个Converter,一个使用来处理XML的Marshaller的Converter,一个是用来处理普通类型String的Converter。因此Spring会根据情况,选择正确的Converter处理消息体。(注意,只要你提供了一个Adapter,Spring就会使用你提供的这个Adapter处理消息体,如果你没有提供,Spring将会使用默认的Adapter处理消息体,由于对于XML类型(或者JSON类型)的数据必须手动提供Converter,所以这里不能使用默认的Converter)。

之后是Spring的配置文件:

rest-servlet.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:tx="http://www.springframework.org/schema/tx"

xmlns:aop="http://www.springframework.org/schema/aop"

xsi:schemaLocation="http://www.springframework.org/schema/beans

          

          

          

          

          

          

           ">

<context:annotation-config/>

<context:component-scan base-package="com.upc.upcgrid.guan"/>                

</beans>

Spring的配置文档中,仅让Spring环境扫描标有标记类的包。

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    ">

<servlet>

<servlet-name>rest</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>/conf/rest-servlet.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>rest</servlet-name>

<url-pattern>/rest/*</url-pattern>

</servlet-mapping>  

</web-app>

Spring使用DispatcherServlet完成URI任务的匹配和分发,在创建DispatcherServlet的时候,提供了Spring配置文件的路径。

6.  Jetty服务器的配置和启动

我们这里使用较轻量级的Jetty服务器,以嵌入式的方式启动Spring服务。Jetty服务要比Tomcat小的多,并且无需安装,可以嵌入到程序中执行。下面给出Jetty的启动过程。

JettyServerStart.java

public class JettyServerStart {

public static void main(String[] args) {

Server server= new Server();//创建jetty web容器(这与tomcat容器类似)

server.setStopAtShutdown(true);//在退出程序是关闭服务

//创建连接器,每个连接器都是由IP地址和端口号组成,连接到连接器的连接将会被jetty处理

//第一个连接器的连接方式为:8586

Connector connector = new SelectChannelConnector();//创建一个连接器

connector.setPort(8586);//连接的端口号,(tomcat下)一般是8080,这里根据服务需求进行设置

connector.setHost("202.194.158.128");//ip地址

server.addConnector(connector);//添加连接

//创建本地连接器,连接方式为:8585

Connector connectorLocal = new SelectChannelConnector();

connectorLocal.setPort(8585);

connectorLocal.setHost("localhost");

server.addConnector(connectorLocal);

//配置rest服务

WebAppContext context = new WebAppContext();//创建服务上下文

context.setContextPath("/SpringMVCRestTest");//访问服务路径 {ip}:8568/SpringMVCRestTest

context.setConfigurationDiscovered(true);

context.setDescriptor(System.getProperty("user.dir")+File.separator+"conf"+File.separator+"web.xml");//指明服务描述文件,就是web.xml

context.setResourceBase(System.getProperty("user.dir"));//指定服务的资源根路径,配置文件的相对路径与服务根路径有关

server.setHandler(context);//添加处理

try {

server.start();//开启服务

server.join();

} catch (Exception e) {

e.printStackTrace();

System.exit(1);

}//开启服务

}

现在,我们执行main方法,会的到如下输出:

2011-06-24 21:22:07.609:INFO::jetty-7.3.0.v20110203

2011-06-24 21:22:07.796:INFO::NO JSP Support for /SpringMVCRestTest, did not find org.apache.jasper.servlet.JspServlet

2011-06-24 21:22:07.921:INFO::started o.e.j.w.WebAppContext{/SpringMVCRestTest,file:/I:/programs/eclipse/SpringMVCRestTest/}

2011-06-24 21:22:08.093:INFO:/SpringMVCRestTest:Initializing Spring FrameworkServlet 'rest'

2011-6-24 21:22:08 org.springframework.web.servlet.FrameworkServlet initServletBean

信息: FrameworkServlet 'rest': initialization started

2011-6-24 21:22:08 org.springframework.context.support.AbstractApplicationContext prepareRefresh

信息: Refreshing WebApplicationContext for namespace 'rest-servlet': startup date [Fri Jun 24 21:22:08 CST 2011]; root of context hierarchy

2011-6-24 21:22:08 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions

信息: Loading XML bean definitions from ServletContext resource [/conf/rest-servlet.xml]

2011-6-24 21:22:08 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons