`
xiangxingchina
  • 浏览: 520494 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

pring3.0支持restful实例

 
阅读更多

最近在研究spring3.0以及传说中的restful,还好研究出来一个例子,现在贴出来望广大网友能一起讨论下,错误的地方恳请大家指点。项目采用SPRING3.0+HIBERNATE2.5。数据库是oracle只有一个表。

[java] view plain copy
  1. create table LMDZ  
  2. (  
  3.   KH_NUM VARCHAR2(20 ),  
  4.   LM_NUM NUMBER(2 )  
  5. );  

首先在eclipse下新建web工程。web.xml文件配置如下:

[java] view plain copy
  1. <?xml version= "1.0"  encoding= "UTF-8" ?>  
  2. <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 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >  
  3.     <!--  
  4.         该servlet为tomcat,jetty等容器提供,将静态资源映射从/改为/static /目录,如原来访问  
  5.         http://localhost/foo.css ,现在http://localhost/static/foo.css   
  6.     -->  
  7.     <servlet-mapping>  
  8.         <servlet-name>default </servlet-name>  
  9.         <url-pattern>/static /*</url-pattern>  
  10.     </servlet-mapping>  
  11.     <servlet>  
  12.         <servlet-name>demorestsms</servlet-name>  
  13.         <servlet-class >org.springframework.web.servlet.DispatcherServlet</servlet- class >  
  14.         <load-on-startup>1 </load-on-startup>  
  15.     </servlet>  
  16.    <!--  
  17.         Key of the system property that should specify the root directory of this   
  18.         web app. Applied by WebAppRootListener or Log4jConfigListener.  
  19.     -->  
  20.     <context-param>  
  21.         <param-name>webAppRootKey</param-name>  
  22.         <param-value>demorestsms.root</param-value>  
  23.     </context-param>  
  24.   
  25.     <!--  
  26.         Location of the Log4J config file, for  initialization and refresh checks.  
  27.         Applied by Log4jConfigListener.  
  28.     -->  
  29.     <context-param>  
  30.         <param-name>log4jConfigLocation</param-name>  
  31.         <param-value>/WEB-INF/classes/log4j.properties</param-value>  
  32.     </context-param>  
  33.   
  34.     <!--  
  35.         - Location of the XML file that defines the root application context.  
  36.         - Applied by ContextLoaderServlet.  
  37.         -  
  38.         - Can be set to:  
  39.         - "/WEB-INF/applicationContext-hibernate.xml"   for  the Hibernate implementation,  
  40.         - "/WEB-INF/applicationContext-jpa.xml"   for  the JPA one, or  
  41.         - "/WEB-INF/applicationContext-jdbc.xml"   for  the JDBC one.  
  42.     -->  
  43.     <context-param>  
  44.         <param-name>contextConfigLocation</param-name>  
  45.   
  46.         <param-value>/WEB-INF/applicationContext.xml</param-value>  
  47.         <!--  
  48.         <param-value>/WEB-INF/applicationContext-hibernate.xml</param-value>  
  49.         <param-value>/WEB-INF/applicationContext-jpa.xml</param-value>  
  50.         -->  
  51.   
  52.         <!--  
  53.                 To use the JPA variant above, you will need to enable Spring load-time  
  54.                 weaving in your server environment. See PetClinic's readme and/or  
  55.                 Spring's JPA documentation for  information on how to  do   this .  
  56.         -->  
  57.     </context-param>  
  58.     <!--  
  59.         - Configures Log4J for   this  web app.  
  60.         - As this  context specifies a context-param  "log4jConfigLocation" , its file path  
  61.         - is used to load the Log4J configuration, including periodic refresh checks.  
  62.         -  
  63.         - Would fall back to default  Log4J initialization (non-refreshing)  if  no special  
  64.         - context-params are given.  
  65.         -  
  66.         - Exports a "web app root key" , i.e. a system property that specifies the root  
  67.         - directory of this  web app,  for  usage in log file paths.  
  68.         - This web app specifies "petclinic.root"  (see log4j.properties file).  
  69.     -->  
  70.     <!-- Leave the listener commented-out if  using JBoss -->  
  71.     <!--  
  72.     <listener>  
  73.         <listener-class >org.springframework.web.util.Log4jConfigListener</listener- class >  
  74.     </listener>  
  75.     -->  
  76.   
  77.     <!--  
  78.         - Loads the root application context of this  web app at startup,  
  79.         - by default  from  "/WEB-INF/applicationContext.xml" .  
  80.         - Note that you need to fall back to Spring's ContextLoaderServlet for   
  81.         - J2EE servers that do  not follow the Servlet  2.4  initialization order.  
  82.         -  
  83.         - Use WebApplicationContextUtils.getWebApplicationContext(servletContext)  
  84.         - to access it anywhere in the web application, outside of the framework.  
  85.         -  
  86.         - The root context is the parent of all servlet-specific contexts.  
  87.         - This means that its beans are automatically available in these child contexts,  
  88.         - both for  getBean(name) calls and (external) bean references.  
  89.     -->  
  90.     <listener>  
  91.         <listener-class >org.springframework.web.context.ContextLoaderListener</listener- class >  
  92.     </listener>  
  93.   
  94.     <!--  
  95.         - Maps the petclinic dispatcher to "*.do" . All handler mappings in  
  96.         - petclinic-servlet.xml will by default  be applied to  this  subpath.  
  97.         - If a mapping isn't a /* subpath, the handler mappings are considered  
  98.         - relative to the web app root.  
  99.         -  
  100.         - NOTE: A single dispatcher can be mapped to multiple paths, like any servlet.  
  101.     -->  
  102.     <servlet-mapping>  
  103.         <servlet-name>zszqrestsms</servlet-name>  
  104.         <url-pattern>/</url-pattern>  
  105.     </servlet-mapping>  
  106.   
  107.     <session-config>  
  108.         <session-timeout>10 </session-timeout>  
  109.     </session-config>  
  110.   
  111.     <welcome-file-list>  
  112.         <!-- Redirects to "welcome.htm"   for  dispatcher handling -->  
  113.         <welcome-file>index.jsp</welcome-file>  
  114.     </welcome-file-list>  
  115.       
  116.     <!--error-page>  
  117.         <exception-type>java.lang.Exception</exception-type>  
  118.         <location>/WEB-INF/jsp/uncaughtException.jsp</location>  
  119.     </error-page-->  
  120.       
  121.     <!-- 浏览器不支持put,delete等method,由该filter将/blog?_method=delete转换为标准的http delete方法 -->     
  122.     <filter>     
  123.         <filter-name>HiddenHttpMethodFilter</filter-name>     
  124.         <filter-class >org.springframework.web.filter.HiddenHttpMethodFilter</filter- class >     
  125.     </filter>     
  126.          
  127.     <filter-mapping>     
  128.         <filter-name>HiddenHttpMethodFilter</filter-name>     
  129.         <servlet-name>demorestsms</servlet-name>     
  130.     </filter-mapping>  
  131.   
  132. </web-app>  

在WEB-INF下面的applicationContext.xml文件如下:

[java] view plain copy
  1. <?xml version= "1.0"  encoding= "UTF-8" ?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"   
  3.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:context= "http://www.springframework.org/schema/context"   
  4.   xmlns:tx="http://www.springframework.org/schema/tx"  xmlns:jdbc= "http://www.springframework.org/schema/jdbc"   
  5.   xmlns:p="http://www.springframework.org/schema/p"   
  6.   xsi:schemaLocation="http://www.springframework.org/schema/beans   
  7.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
  8.     http://www.springframework.org/schema/context   
  9.     http://www.springframework.org/schema/context/spring-context-3.0.xsd   
  10.     http://www.springframework.org/schema/tx   
  11.     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd   
  12.     http://www.springframework.org/schema/jdbc   
  13.     http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd">   
  14.       
  15.     <bean id="propertyConfigurer"   
  16.           class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"   
  17.           p:location="/WEB-INF/jdbc.properties"  />  
  18.       
  19.     <bean id="dataSource"   
  20.           class = "org.springframework.jdbc.datasource.DriverManagerDataSource"   
  21.           p:driverClassName="${jdbc.driverClassName}"   
  22.           p:url="${jdbc.url}"   
  23.           p:username="${jdbc.username}"   
  24.           p:password="${jdbc.password}"  />  
  25.       
  26.     <!-- ADD PERSISTENCE SUPPORT HERE (jpa, hibernate, etc) -->  
  27.     <!-- Hibernate SessionFactory -->  
  28.     <bean id="sessionFactory"   class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean"   
  29.                 p:dataSource-ref="dataSource"  p:mappingResources= "zszqlmdz.hbm.xml" >  
  30.         <property name="hibernateProperties" >  
  31.                 <props>  
  32.                         <prop key="hibernate.dialect" >${hibernate.dialect}</prop>  
  33.                         <prop key="hibernate.show_sql" >${hibernate.show_sql}</prop>  
  34.                         <prop key="hibernate.generate_statistics" >${hibernate.generate_statistics}</prop>  
  35.                 </props>  
  36.         </property>  
  37.         <property name="eventListeners" >  
  38.                 <map>  
  39.                         <entry key="merge" >  
  40.                                 <bean class = "org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener" />  
  41.                         </entry>  
  42.                 </map>  
  43.         </property>  
  44.     </bean>  
  45.   
  46.     <!-- Transaction manager for  a single Hibernate SessionFactory (alternative to JTA) -->  
  47.     <bean id="transactionManager"   class = "org.springframework.orm.hibernate3.HibernateTransactionManager"   
  48.                 p:sessionFactory-ref="sessionFactory" />  
  49.   
  50.     <!-- Transaction manager that delegates to JTA (for  a transactional JNDI DataSource) -->  
  51.     <!--  
  52.     <bean id="transactionManager"   class = "org.springframework.transaction.jta.JtaTransactionManager" />  
  53.     -->  
  54.   
  55.   
  56.     <!-- ========================= BUSINESS OBJECT DEFINITIONS ========================= -->  
  57.   
  58.     <!--  
  59.         Activates various annotations to be detected in bean classes:  
  60.         Spring's @Required and @Autowired, as well as JSR 250' @Resource .  
  61.     -->  
  62.     <context:annotation-config/>  
  63.   
  64.     <!--  
  65.         Instruct Spring to perform declarative transaction management  
  66.         automatically on annotated classes.  
  67.     -->  
  68.     <tx:annotation-driven/>  
  69.   
  70.     <!--  
  71.         Exporter that exposes the Hibernate statistics service via JMX. Autodetects the  
  72.         service MBean, using its bean name as JMX object name.  
  73.     -->  
  74.     <context:mbean-export/>  
  75.   
  76.     <!-- PetClinic's central data access object: Hibernate implementation -->  
  77.     <bean id="clinic"   class = "com.cssweb.zszq.lmdz.hibernate.HibernateClinic" />  
  78.   
  79.     <!-- Hibernate's JMX statistics service -->  
  80.     <bean name="demorestsms:type=HibernateStatistics"   class = "org.hibernate.jmx.StatisticsService"  autowire= "byName" />  
  81. </beans>  

在WEB-INF下面的demorestsms-servlet.xml文件如下:

[java] view plain copy
  1. <?xml version= "1.0"  encoding= "UTF-8" ?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"   
  3.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:context= "http://www.springframework.org/schema/context"   
  4.   xmlns:aop="http://www.springframework.org/schema/aop"  xmlns:p= "http://www.springframework.org/schema/p"   
  5.   xmlns:tx="http://www.springframework.org/schema/tx"  xmlns:jdbc= "http://www.springframework.org/schema/jdbc"   
  6.    
  7.   xsi:schemaLocation="http://www.springframework.org/schema/beans   
  8.            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
  9.            http://www.springframework.org/schema/context   
  10.            http://www.springframework.org/schema/context/spring-context-3.0.xsd   
  11.            http://www.springframework.org/schema/tx   
  12.            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd   
  13.            http://www.springframework.org/schema/jdbc   
  14.            http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd">   
  15.   
  16.     <!--  
  17.         - The controllers are autodetected POJOs labeled with the @Controller  annotation.  
  18.     -->  
  19.     <context:component-scan base-package = "com.cssweb.zszq.lmdz.web" />  
  20.   
  21.     <!--  
  22.         - The form-based controllers within this  application provide  @RequestMapping    
  23.         - annotations at the type level for  path mapping URLs and  @RequestMapping    
  24.         - at the method level for  request type mappings (e.g., GET and POST).   
  25.         - In contrast, ClinicController - which is not form-based - provides   
  26.         - @RequestMapping  only at the method level  for  path mapping URLs.  
  27.         -  
  28.         - DefaultAnnotationHandlerMapping is driven by these annotations and is   
  29.         - enabled by default  with Java  5 +.  
  30.     -->  
  31.     <bean class = "org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"  />  
  32.     <!--  
  33.         - This bean processes annotated handler methods, applying PetClinic-specific PropertyEditors  
  34.         - for  request parameter binding. It overrides the  default  AnnotationMethodHandlerAdapter.  
  35.     -->  
  36.     <bean class = "org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >  
  37.         <property name="webBindingInitializer" >  
  38.             <bean class = "com.cssweb.zszq.lmdz.web.ClinicBindingInitializer" />  
  39.         </property>  
  40.     </bean>  
  41.   
  42.     <!--  
  43.         - This bean resolves specific types of exceptions to corresponding logical   
  44.         - view names for  error views. The  default  behaviour of DispatcherServlet   
  45.         - is to propagate all exceptions to the servlet container: this  will happen   
  46.         - here with all other types of exceptions.  
  47.     -->  
  48.     <bean class = "org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" >  
  49.         <property name="exceptionMappings" >  
  50.             <props>  
  51.                 <prop key="org.springframework.dao.DataAccessException" >dataAccessFailure</prop>  
  52.                 <prop key="org.springframework.transaction.TransactionException" >dataAccessFailure</prop>  
  53.             </props>  
  54.         </property>  
  55.     </bean>  
  56.   
  57.     <!--  
  58.         - This bean configures the 'prefix'  and  'suffix'  properties of   
  59.         - InternalResourceViewResolver, which resolves logical view names   
  60.         - returned by Controllers. For example, a logical view name of "vets"    
  61.         - will be mapped to "/WEB-INF/jsp/vets.jsp" .  
  62.     -->  
  63.     <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver"  p:prefix= "/WEB-INF/jsp/"   
  64.             p:suffix=".jsp" />  
  65.   
  66.     <!--  
  67.         - Message source for   this  context, loaded from localized  "messages_xx"  files.  
  68.         - Could also reside in the root application context, as it is generic,  
  69.         - but is currently just used within PetClinic's web tier.  
  70.     -->  
  71.     <bean id="messageSource"   class = "org.springframework.context.support.ResourceBundleMessageSource"   
  72.             p:basename="messages" />  
  73.   
  74. </beans>  

在WEB-INF下面的jdbc.properties文件如下:

[java] view plain copy
  1. # To change  this  template, choose Tools | Templates  
  2. # and open the template in the editor.  
  3. jdbc.driverClassName=oracle.jdbc.driver.OracleDriver  
  4. jdbc.url=jdbc:oracle:thin:@localhost : 1521 :orcl  
  5. jdbc.username=scott  
  6. jdbc.password=tiger  
  7. hibernate.generate_statistics=true   
  8. hibernate.show_sql=true   
  9. hibernate.dialect=org.hibernate.dialect.Oracle10gDialect  

配置大致就这些,下面给出连接hibernate的接口

[java] view plain copy
  1. /*  
  2.  * To change this template, choose Tools | Templates  
  3.  * and open the template in the editor.  
  4.  */   
  5.   
  6. package  com.cssweb.zszq.lmdz;  
  7.   
  8. import  java.util.Collection;  
  9.   
  10. import  org.springframework.dao.DataAccessException;  
  11.   
  12. import  com.cssweb.zszq.lmdz.pojo.Khzl;  
  13. import  com.cssweb.zszq.lmdz.pojo.LmdzNew;  
  14.   
  15. /**  
  16.  *  
  17.  * @author HUJUN  
  18.  */   
  19. public   interface  Clinic {  
  20.     Collection<LmdzNew> findLmdzs(String fundid) throws  DataAccessException;  
  21.       
  22.     void  save(String fundid, String[] no)  throws  DataAccessException;  
  23.       
  24.     int  delete(String fundid)  throws  DataAccessException;  
  25.       
  26.     Khzl findKh(String clientId) throws  DataAccessException;  
  27.       
  28.     int  updateTelById(String fundid, String mobile)  throws  DataAccessException;  
  29. }  

连接hibernate的service类

[java] view plain copy
  1. /*  
  2.  * To change this template, choose Tools | Templates  
  3.  * and open the template in the editor.  
  4.  */   
  5.   
  6. package  com.cssweb.zszq.lmdz.hibernate;  
  7.   
  8. import  java.util.Collection;  
  9.   
  10. import  org.hibernate.Session;  
  11. import  org.hibernate.SessionFactory;  
  12. import  org.hibernate.Transaction;  
  13. import  org.springframework.beans.factory.annotation.Autowired;  
  14. import  org.springframework.transaction.annotation.Transactional;  
  15.   
  16. import  com.cssweb.zszq.lmdz.Clinic;  
  17. import  com.cssweb.zszq.lmdz.pojo.Khzl;  
  18. import  com.cssweb.zszq.lmdz.pojo.LmdzNew;  
  19. /**  
  20.  *  
  21.  * @author HUJUN  
  22.  */   
  23. public   class  HibernateClinic  implements  Clinic {  
  24.     @Autowired   
  25.     private  SessionFactory sessionFactory;  
  26.   
  27.     @Transactional (readOnly =  true )  
  28.     @SuppressWarnings ( "unchecked" )  
  29.     public  Collection<LmdzNew> findLmdzs(String fundid) {  
  30.         return  sessionFactory.getCurrentSession().createQuery( "from LmdzNew lmdz where lmdz.khNum = :fundid" )  
  31.                 .setString("fundid" , fundid).list();  
  32.     }  
  33.   
  34.     public   void  save(String fundid, String[] no) {  
  35.         Session session = sessionFactory.openSession();  
  36.         Transaction tx = session.beginTransaction();  
  37.         for  ( int  i =  0 ; i < no.length; i++) {  
  38.             LmdzNew lmdzNes = new  LmdzNew(fundid, Integer.parseInt(no[i]));  
  39.             session.save(lmdzNes);  
  40.             if  (i %  20  ==  0 ) {  
  41.                 session.flush();  
  42.                 session.clear();  
  43.             }  
  44.         }  
  45.         tx.commit();  
  46.         session.close();  
  47.     }  
  48.       
  49.     public   int  delete(String fundid) {  
  50.         return  sessionFactory.openSession().createQuery( "delete from LmdzNew lmdz where lmdz.khNum = :fundid" )  
  51.                 .setString("fundid" , fundid).executeUpdate();  
  52.     }  
  53.       
  54.     @Transactional (readOnly =  true )  
  55.     public  Khzl findKh(String clientId) {  
  56.         return  (Khzl) sessionFactory.openSession().load(Khzl. class , clientId);  
  57.     }  
  58.       
  59.     public   int  updateTelById(String fundid, String mobile) {  
  60.         return  sessionFactory.openSession().createQuery( "update Khzl set mobileTel = :mobile where clientId = :fundid" )  
  61.         .setString("fundid" , fundid)  
  62.         .setString("mobile" , mobile)  
  63.         .executeUpdate();  
  64.     }  
  65. }  

再来看action这一层的东西:

[java] view plain copy
  1. /*  
  2.  * To change this template, choose Tools | Templates  
  3.  * and open the template in the editor.  
  4.  */   
  5.   
  6. package  com.cssweb.zszq.lmdz.web;  
  7.   
  8. import  java.io.OutputStreamWriter;  
  9. import  java.io.PrintWriter;  
  10. import  java.util.Collection;  
  11. import  java.util.Iterator;  
  12.   
  13. import  javax.servlet.http.HttpServletRequest;  
  14. import  javax.servlet.http.HttpServletResponse;  
  15.   
  16. import  org.springframework.beans.factory.annotation.Autowired;  
  17. import  org.springframework.stereotype.Controller;  
  18. import  org.springframework.web.bind.annotation.PathVariable;  
  19. import  org.springframework.web.bind.annotation.RequestMapping;  
  20. import  org.springframework.web.bind.annotation.RequestMethod;  
  21.   
  22. import  com.cssweb.common.util.CollectionData;  
  23. import  com.cssweb.zszq.lmdz.Clinic;  
  24. import  com.cssweb.zszq.lmdz.pojo.Khzl;  
  25. import  com.cssweb.zszq.lmdz.pojo.LmdzNew;  
  26.   
  27. /**  
  28.  *  
  29.  * @author HUJUN  
  30.  */   
  31. @Controller      
  32. @RequestMapping ( "/zszqsms" )  
  33. public   class  LmdzForm {  
  34.     private   final  Clinic clinic;  
  35.   
  36.     @Autowired   
  37.     public  LmdzForm(Clinic clinic) {  
  38.         this .clinic = clinic;  
  39.     }  
  40.       
  41.       
  42.     @RequestMapping (value= "/{fundid}" , method = RequestMethod.GET)     
  43.     public   void  get(HttpServletRequest request, HttpServletResponse response,  @PathVariable ( "fundid" ) String fundid)  throws  Exception {  
  44.         System.out.println(">>>>>>>>>>getList>>>>>>>>>>>>>>" +fundid);  
  45.         StringBuilder msg = new  StringBuilder();  
  46.         Khzl khzl = this .clinic.findKh(fundid);  
  47.         if (khzl!= null ) {  
  48.             Collection<LmdzNew> lm = CollectionData.getLmList();  
  49.             Collection<LmdzNew> results = this .clinic.findLmdzs(fundid);  
  50.             Iterator<LmdzNew> it = lm.iterator();  
  51.             String json = "{total:" +lm.size()+ ",root:[" ;  
  52.             int  i =  0 ;  
  53.             while (it.hasNext()) {  
  54.                 LmdzNew lmdz = it.next();  
  55.                 lmdz.setState(1 );  
  56.                 json += "{lmid:'"  + lmdz.getLmNum() +  "',lmname:'"  + lmdz.getLmName() +  "',lmstate:'"  + lmdz.getState() +  "'}" ;  
  57.                 i++;  
  58.                 if  (i != lm.size() -  1 ) {  
  59.                      json += "," ;  
  60.                 }  
  61.             }  
  62.             json += "]}" ;  
  63.             msg.append("{/" msg/ ":/" "+json+" / "}" );  
  64.         }  
  65.         else  {  
  66.             msg.append("{/" msg/ ":/" 帐号不存在/ "}" );  
  67.         }  
  68.         printData(response, msg);  
  69.     }  
  70.       
  71.     @RequestMapping (value =  "/{fundid}/{no}" , method = RequestMethod.POST)  
  72.     public   void  save(HttpServletRequest request, HttpServletResponse response,  @PathVariable ( "fundid" ) String fundid,   
  73.             @PathVariable ( "no" ) String no)  throws  Exception {  
  74.         System.out.println(fundid + ">>>>>>>>>>save>>>>>>>>>>>>>>" +no);  
  75.         StringBuilder msg = new  StringBuilder();  
  76.         this .clinic.save(fundid, no.split( "," ));  
  77.         msg.append("{/" msg/ ":/" 成功/ "}" );  
  78.         printData(response, msg);  
  79.     }  
  80.       
  81.     @RequestMapping (value =  "/{fundid}/{no}" , method = RequestMethod.PUT)  
  82.     public   void  update(HttpServletRequest request, HttpServletResponse response,  @PathVariable ( "fundid" ) String fundid,   
  83.             @PathVariable ( "no" ) String no)  throws  Exception {  
  84.         System.out.println(fundid + ">>>>>>>>>>update>>>>>>>>>>>>>>" +no);  
  85.         StringBuilder msg = new  StringBuilder();  
  86.         int  i =  this .clinic.updateTelById(fundid, no);  
  87.         if (i> 0 ) {  
  88.             msg.append("{/" msg/ ":/" 成功/ "}" );  
  89.         }  
  90.         msg.append("{/" msg/ ":/" 失败/ "}" );  
  91.         printData(response, msg);  
  92.     }  
  93.       
  94.     @RequestMapping (value =  "/{fundid}" , method = RequestMethod.DELETE)  
  95.     public   void  delete(HttpServletRequest request, HttpServletResponse response,  @PathVariable ( "fundid" ) String fundid)  
  96.             throws  Exception {  
  97.         System.out.println(">>>>>>>>>>delete>>>>>>>>>>>>>>" +fundid);  
  98.         StringBuilder msg = new  StringBuilder();  
  99.         int  i =  this .clinic.delete(fundid);  
  100.         if (i> 0 ) {  
  101.             msg.append("{/" msg/ ":/" 成功/ "}" );  
  102.         }  
  103.         msg.append("{/" msg/ ":/" 失败/ "}" );  
  104.         printData(response, msg);  
  105.     }  
  106.       
  107.     private   void  printData(HttpServletResponse response, StringBuilder msg){  
  108.         try  {  
  109.             response.setContentType("text/html;charset=utf-8" );  
  110.             response.setCharacterEncoding("UTF-8" );  
  111.             PrintWriter out = new  PrintWriter( new  OutputStreamWriter(response.getOutputStream(),  "UTF-8" ));  
  112.             out.println( msg );  
  113.             out.close();  
  114.         } catch  (Exception e) {  
  115.             e.printStackTrace();  
  116.         }  
  117.     }  
  118. }  

最后还有个POJO类,呵呵:

[java] view plain copy
  1. package  com.cssweb.zszq.lmdz.pojo;  
  2.   
  3.   
  4. /**  
  5.  * LmdzNew entity. @author MyEclipse Persistence Tools  
  6.  */   
  7.   
  8. public   class  LmdzNew  implements  java.io.Serializable {  
  9.   
  10.     // Fields   
  11.   
  12.     /**  
  13.      *   
  14.      */   
  15.     private   static   final   long  serialVersionUID = -5138845755309588033L;  
  16.       
  17.     private  String khNum;  
  18.     private   int  lmNum;  
  19.       
  20.     private  String lmName;  
  21.     private   int  state;  
  22.   
  23.     // Constructors   
  24.   
  25.     /** default constructor */   
  26.     public  LmdzNew() {  
  27.     }  
  28.       
  29.     /** full constructor */   
  30.     public  LmdzNew(String khNum,  int  lmNum) {  
  31.         this .khNum = khNum;  
  32.         this .lmNum = lmNum;  
  33.     }  
  34.       
  35.     public  String getKhNum() {  
  36.         return   this .khNum;  
  37.     }  
  38.   
  39.     public   void  setKhNum(String khNum) {  
  40.         this .khNum = khNum;  
  41.     }  
  42.   
  43.     public   int  getLmNum() {  
  44.         return   this .lmNum;  
  45.     }  
  46.   
  47.     public   void  setLmNum( int  lmNum) {  
  48.         this .lmNum = lmNum;  
  49.     }  
  50.       
  51.     public  String getLmName() {  
  52.         return  lmName;  
  53.     }  
  54.   
  55.     public   void  setLmName(String lmName) {  
  56.         this .lmName = lmName;  
  57.     }  
  58.   
  59.     public   int  getState() {  
  60.         return  state;  
  61.     }  
  62.   
  63.     public   void  setState( int  state) {  
  64.         this .state = state;  
  65.     }  
  66.       
  67.     public   boolean  equals(Object other) {  
  68.         if  (( this  == other))  
  69.             return   true ;  
  70.         if  ((other ==  null ))  
  71.             return   false ;  
  72.         return   false ;  
  73.     }  
  74.       
  75.     public   int  hashCode() {  
  76.         int  result =  17 ;  
  77.   
  78.         result = 37  * result  
  79.                 + (getKhNum() == null  ?  0  :  this .getKhNum().hashCode());  
  80.         return  result;  
  81.     }  
  82. }  

好了,所有的源代码都贴出来了。整个服务端的程序可以跑在tomcat下做测试。接下来我们只需要提供rest客户端的接口让别的应用调用即可。下面再给出个调用的demo。这个项目比较简单。

还望大家多多指教,大家互相学习学习。

[java] view plain copy
  1. package  com.cssweb.zszq.client;  
  2.   
  3. import  java.io.BufferedReader;  
  4. import  java.io.IOException;  
  5. import  java.io.InputStreamReader;  
  6. import  java.net.HttpURLConnection;  
  7. import  java.net.URL;  
  8.   
  9. public   class  ClientTest {  
  10.   
  11.     public   static   void  main(String[] args)  throws  IOException {  
  12.         delete();  
  13.         update();  
  14.         save();  
  15.         select();  
  16.     }  
  17.       
  18.     /**  
  19.      * 查询栏目定制  
  20.      * 68008610为资金帐号  
  21.      */   
  22.     public   static   void  select() {  
  23.         try  {  
  24.             URL url = new  URL( "http://localhost:8080/zszqrestsms/zszqsms/68008610" );  
  25.             HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  26.             conn.setDoOutput(true );  
  27.             conn.setRequestMethod("GET" );  
  28.             conn.setRequestProperty("Content-Type" "text/json" );  
  29.             BufferedReader rd = new  BufferedReader( new  InputStreamReader(conn  
  30.                     .getInputStream()));  
  31.             String line;  
  32.             while  ((line = rd.readLine()) !=  null ) {  
  33.                 System.out.println(line);  
  34.             }  
  35.   
  36.             rd.close();  
  37.         } catch  (Exception e) {  
  38.             System.out.println("Error"  + e);  
  39.         }  
  40.     }  
  41.       
  42.     /**  
  43.      * 删除定制栏目  
  44.      * 68008610为资金帐号  
  45.      */   
  46.     public   static   void  delete() {  
  47.         try  {  
  48.             URL url = new  URL( "http://localhost:8080/zszqrestsms/zszqsms/68008610" );  
  49.             HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  50.             conn.setDoOutput(true );  
  51.             conn.setRequestMethod("DELETE" );  
  52.             conn.setRequestProperty("Content-Type" "text/json" );  
  53.             BufferedReader rd = new  BufferedReader( new  InputStreamReader(conn  
  54.                     .getInputStream()));  
  55.             String line;  
  56.             while  ((line = rd.readLine()) !=  null ) {  
  57.                 System.out.println(line);  
  58.             }  
  59.   
  60.             rd.close();  
  61.         } catch  (Exception e) {  
  62.             System.out.println("Error"  + e);  
  63.         }  
  64.     }  
  65.       
  66.     /**  
  67.      * 修改手机号码  
  68.      * 68008610为资金帐号  
  69.      */   
  70.     public   static   void  update() {  
  71.         try  {  
  72.             URL url = new  URL( "http://localhost:8080/zszqrestsms/zszqsms/68008610/1342345677" );  
  73.             HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  74.             conn.setDoOutput(true );  
  75.             conn.setRequestMethod("PUT" );  
  76.             conn.setRequestProperty("Content-Type" "text/json" );  
  77.             BufferedReader rd = new  BufferedReader( new  InputStreamReader(conn  
  78.                     .getInputStream()));  
  79.             String line;  
  80.             while  ((line = rd.readLine()) !=  null ) {  
  81.                 System.out.println(line);  
  82.             }  
  83.   
  84.             rd.close();  
  85.         } catch  (Exception e) {  
  86.             System.out.println("Error"  + e);  
  87.         }  
  88.     }  
  89.       
  90.     /**  
  91.      * 保存定制的栏目  
  92.      * 68008610为资金帐号  
  93.      */   
  94.     public   static   void  save() {  
  95.         try  {  
  96.             URL url = new  URL( "http://localhost:8080/zszqrestsms/zszqsms/68008617/1,2,3,4" );  
  97.             HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  98.             conn.setDoOutput(true );  
  99.             conn.setRequestMethod("POST" );  
  100.             conn.setRequestProperty("Content-Type" "text/json" );  
  101.             BufferedReader rd = new  BufferedReader( new  InputStreamReader(conn  
  102.                     .getInputStream()));  
  103.             String line;  
  104.             while  ((line = rd.readLine()) !=  null ) {  
  105.                 System.out.println(line);  
  106.             }  
  107.   
  108.             rd.close();  
  109.         } catch  (Exception e) {  
  110.             System.out.println("Error"  + e);  
  111.         }  
  112.     }  
  113. }  

 

分享到:
评论

相关推荐

    pring3.0中文文档

    Spring 3.0版本是其发展史上的一个重要里程碑,引入了许多新特性,提升了性能和易用性。Spring Security是Spring框架的一个子项目,专注于应用安全,提供了全面的身份验证、授权和访问控制解决方案。 Spring ...

    陈雄华Spring MVC 3.0实战指南

    一个很不错的实战指南,你值得拥有。 PS:适合初学者,知其然不知其所以然的码农。

    spring2.5+struts2+hibernate3.0JAR包集合

    标题 "spring2.5+struts2+hibernate3.0JAR包集合" 提及的是一个集成开发环境中的核心组件,这三个框架是Java Web开发中的重要工具,用于构建高效、可扩展的企业级应用程序。 Spring 2.5是Spring框架的一个版本,它...

    pring-data-redisjar和源文件

    它提供了一个统一的编程模型,支持多种Redis操作,包括但不限于键操作、字符串、哈希、列表、集合和有序集合等。通过Spring Data Redis,开发者可以利用Spring的依赖注入(DI)和声明式事务管理等特性,实现更高级别...

    pring对JDBC和orm的支持共10页.pdf.zip

    标题中的“Spring对JDBC和ORM的支持”是一个关键主题,涉及到Spring框架在数据库操作方面的核心功能。Spring是一个广泛使用的Java企业级应用开发框架,它提供了一整套工具和功能来简化JDBC(Java Database ...

    pring4新特性springmvc增强共10页.pdf

    9. **RESTful API支持**: 改进了`@RequestMapping`的处理,使其支持更多HTTP方法,如PUT、DELETE等,更便于构建RESTful API。 10. **测试增强**: Spring MVC Test框架提供了更好的测试支持,可以进行模拟请求和...

    pring定时器的使用

    在Spring 2.5和3.0之间的主要区别在于配置方式的简洁性和灵活性,以及对注解支持的增强。随着版本的更新,Spring提供了更现代和易于使用的API,使得定时任务的配置和管理更加高效。但无论在哪一版本,理解这些基本...

    mybatis+pring+springmvc+mysql的所有包的整合

    mybatis+pring+springmvc+mysql的所有包的整合jar包其中有spring-webmvc-3.2.0.RELEASE.jar和spring-core-3.2.0.RELEASE.jar以及mybatis-3.2.7.jar,junit-4.9.jar,mysql-connector-java-5.1.7-bin.jar等31个jar包

    pring4新特性之核心部分共7页.pdf.zip

    Spring4版本尤其注重性能提升、API优化以及对新技术的支持。下面,我们将深入解析这份文档中所涵盖的核心知识点。 1. **Java 8支持**: Spring4全面支持Java 8,包括Lambda表达式、新的日期与时间API等。这使得...

    Spring Bean的初始化和销毁实例详解

    Spring Bean的初始化和销毁实例详解 Spring Bean的初始化和销毁是Spring框架中一个非常重要的概念,它们都是Bean生命周期中不可或缺的一部分。在Spring框架中,我们可以使用多种方式来控制Bean的初始化和销毁,以下...

    pring4新特性之web开发增强共3页.pdf.zip

    Spring 4进一步优化了对RESTful服务的支持,提供了`@RestController`注解,将传统的`@Controller`与`@ResponseBody`结合,简化了REST服务的定义。此外,`@ExceptionHandler`注解可以帮助处理全局异常,提高代码的可...

    pring4新特性概述共2页.pdf.zip

    Spring 4还强化了对RESTful服务的支持。通过使用@CrossOrigin注解,开发者可以轻松地处理跨域资源共享(CORS)问题,这对于构建Web服务尤其有用。此外,@RequestMapping的改进使得URL映射更加灵活,可以更好地处理...

    pring初探共18页.pdf.zip

    很抱歉,根据您提供的信息,"pring初探共18页.pdf.zip" 和 "pring初探共18页.pdf." 看起来像是一个关于Spring框架的教程文档,但是具体的文件列表只提到了 "赚钱项目",这与Spring框架的学习内容不直接相关。...

    Investment Psychology Explained by Martin J. Pring

    Pring所著的《投资心理学解释》就是这一领域的重要读物,它不仅为读者提供了丰富的经典策略,还探讨了如何在市场中保持独立思考和理性决策。该书的CMT(特许市场技术分析师)认证阅读材料标签表明,这本书也常作为...

    elasticsearch7.17.10-最新支持Java1.8版本

    6. **多租户**:一个Elasticsearch实例可以支持多个索引,每个索引有自己的设置和映射,实现资源隔离。 **Elasticsearch 7.17.10的新特性和改进:** 1. **性能优化**:此版本可能包含了针对查询速度、索引速度以及...

    aplikasi-manajemen-password:在密码管理应用程序中创建 RESTful API 的 Pring-boot 练习

    这个项目提供了一个实际的平台,让开发者学习如何在Java环境中使用Spring Boot构建安全、高效的RESTful API,为密码管理应用提供后端支持。通过这个练习,开发者可以提升其对Spring Boot、RESTful API设计、数据安全...

    pring事务共9页.pdf.zip

    【标签】:“pring事务共9页.pdf.z”这个标签可能是由于输入错误,但可以推断出主题仍然围绕Spring事务。标签中的".z"可能是指压缩文件的后缀,不过常见的压缩格式是.zip,这里可能是用户的误写或者特殊格式。 ...

Global site tag (gtag.js) - Google Analytics