当前位置: 首页 > news >正文

海口模板建站哪家好网站的内容与功能设计

海口模板建站哪家好,网站的内容与功能设计,虚拟主机安装网站,俄罗斯搜索引擎入口Spring 3提供了对RESTful Web服务的支持。 在本教程中#xff0c;我们将向您展示如何在Spring中实现RESTful Web服务 #xff0c;或者如何将现有的Spring服务公开为RESTful Web服务 。 为了使事情变得更有趣#xff0c;我们将从上一篇关于Spring GWT Hibernate JPA Infinisp… Spring 3提供了对RESTful Web服务的支持。 在本教程中我们将向您展示如何在Spring中实现RESTful Web服务 或者如何将现有的Spring服务公开为RESTful Web服务 。 为了使事情变得更有趣我们将从上一篇关于Spring GWT Hibernate JPA Infinispan HornetQ集成的文章的 结尾处继续 。 我们将使用GWTSpringInfinispanHornetQ项目并将“ employeeService” CRUD功能公开为RESTful Web服务 。 当然您可以参考本文以了解如何将Spring服务公开为RESTful Web服务 。 实现RESTful Web服务的最流行的方法是Sun的JAX-RS规范。 有几个支持JAX-RS的项目例如CXF Jersey RESTEasy和Restlet 。 他们中的大多数人还提供Spring支持。 Spring不直接支持JAX-RS 而是将RESTful功能添加到了Spring MVC本身。 如果您不熟悉Spring MVC框架请在此处查阅Spring文档的相应章节。 对于不耐烦的人下面简要概述。 Spring MVC代表模型视图控制器。 它有助于构建灵活且松散耦合的Web应用程序。 模型-视图-控制器设计模式可确保多层Web应用程序中关注点业务逻辑表示逻辑和导航逻辑的分离。 “控制器”负责接收来自用户的请求并调用后端服务。 模型负责封装应用程序数据。 视图使用模型对象将响应呈现给用户。 简而言之 将请求发送到Spring MVC Framework时将发生以下事件序列。 “ DispatcherServlet”首先收到请求 “ DispatcherServlet”查询“ HandlerMapping”并调用与请求关联的“ Controller” “控制器”通过调用适当的服务方法来处理请求并将“ ModeAndView”对象返回到“ DispatcherServlet”。 “ ModeAndView”对象包含模型数据和视图名称 “ DispatcherServlet”将视图名称发送到“ ViewResolver”以查找要调用的实际“视图” “ DispatcherServlet”将模型对象传递给“视图”以呈现结果 在模型数据的帮助下“视图”呈现结果并将其返回给用户 聊够了 让我们弄脏双手 我们将需要“ cglib”字节码生成库和“ asm”字节码操作框架以便Spring能够将AOP方面正确地应用于“ Controller”对象。 我们将使用“CGLIB” 2.2版本您可以下载在这里和在“asm”二进制分发版你可以下载在这里 。 在“ asm”二进制发行版的/ lib / all文件夹下找到asm-all-3.3.jar并将asm-all-3.3.jar和cglib-2.2.jar都放置在项目的/ war / WEB-INF / lib文件夹下。 最后我们将需要Jackson JSON处理器。 我们将使用1.5.3版的“核心”和“映射器”发行版您可以从此处下载。 将两个jackson-core-asl-1.5.3.jar 和项目的/ war / WEB-INF / lib文件夹下的jackson-mapper-asl-1.5.3.jar。 我们必须照顾我们的Eclipse项目的依赖性。 以下jars应该包含在项目的Java构建路径中 org.springframework.web-3.0.1.RELEASE-A.jar 如上所述“ DispatcherServlet”是一个用于管理整个请求处理过程的servlet。 与其他任何servlet一样它需要在Web部署描述符或我们的应用程序中进行配置。 在/ war / WEB-INF文件夹下找到“ web.xml”文件然后添加以下内容 servletservlet-namedispatcher/servlet-nameservlet-class org.springframework.web.servlet.DispatcherServlet /servlet-classload-on-startup2/load-on-startup /servletservlet-mappingservlet-namedispatcher/servlet-nameurl-pattern/restServices/*/url-pattern /servlet-mapping 默认情况下“ DispatcherServlet”将查找名为“ {servlet-name} –servlet.xml”的文件以加载Spring MVC配置。 在我们的例子中是“ dispatcher-servlet.xml”。 在这里我们将url –模式用作“ / restServices / *”以便“ DispatcherServlet”仅处理指定模式下的所有传入请求。 创建一个“ dispatcher–servlet.xml”文件并将其放在/ war / WEB-INF文件夹下如下所示 beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:phttp://www.springframework.org/schema/p xmlns:contexthttp://www.springframework.org/schema/context xmlns:txhttp://www.springframework.org/schema/tx xmlns:mvchttp://www.springframework.org/schema/mvc xsi:schemaLocation http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsdcontext:component-scan base-packagecom.javacodegeeks.gwtspring.server.endpoints /tx:annotation-driven /mvc:annotation-driven //beans 这里要注意的事情 我们将“ contextcomponent-scan”配置元素的base-package属性设置为我们的Spring MVC注释类将驻留的位置 我们使用“ txannotation-driven”配置元素以便能够向我们的MVC类注入事务行为 “ mvcannotation-driven”是Spring 3的配置元素可大大简化Spring MVC的设置。 该标签注册了将请求分派到Controller注释类的所需的“ HandlerMapping”和“ HandlerAdapter”。 另外它根据您的类路径中存在的内容应用合理的默认值。 这样的默认值包括包括其他 支持使用NumberFormat注释格式化数字字段 如果类路径上有Joda Time则支持使用DateTimeFormat批注格式化DateCalendar和Joda Time字段 如果类路径上有JSR-303提供者则支持使用Valid注释验证Controller注释的类输入 如果类路径上包含JAXB 则支持读取和写入XML 如果杰克逊在类路径上则支持读写JSON 在项目的“服务器”包下创建一个“端点”子包。 就GWT而言服务端点是服务器端组件因此所有类都必须放在“服务器”包下。 在“端点”子包下放置“ EmployeeServiceController”类如下所示 package com.javacodegeeks.gwtspring.server.endpoints;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody;import com.javacodegeeks.gwtspring.shared.dto.EmployeeDTO; import com.javacodegeeks.gwtspring.shared.services.EmployeeService;Controller RequestMapping(/employeeService) public class EmployeeServiceController {AutowiredEmployeeService employeeService;RequestMapping(value /{id}, method RequestMethod.GET)ResponseBodypublic EmployeeDTO findEmployee(PathVariable(id) long employeeId) {return employeeService.findEmployee(employeeId);}RequestMapping(value /{id}/{name}/{surname}/{job}, method RequestMethod.POST)Transactional(propagationPropagation.REQUIRED, rollbackForException.class)public String saveEmployee(PathVariable(id) long employeeId, PathVariable String name, PathVariable String surname, PathVariable(job) String jobDescription) throws Exception {employeeService.saveEmployee(employeeId, name, surname, jobDescription);return redirect:/restServices/employeeService/ employeeId;}RequestMapping(value /{id}/{name}/{surname}/{job}, method RequestMethod.PUT)Transactional(propagationPropagation.REQUIRED, rollbackForException.class)public String updateEmployee(PathVariable(id) long employeeId, PathVariable String name, PathVariable String surname, PathVariable(job) String jobDescription) throws Exception {employeeService.updateEmployee(employeeId, name, surname, jobDescription);return redirect:/restServices/employeeService/ employeeId;}RequestMapping(value /{id}, method RequestMethod.DELETE)Transactional(propagationPropagation.REQUIRED, rollbackForException.class)ResponseBodypublic String deleteEmployee(PathVariable(id) long employeeId) throws Exception {employeeService.deleteEmployee(employeeId);return OK;}} 我们提供“ EmployeeService”和“ EmployeeDTO”实现作为参考 package com.javacodegeeks.gwtspring.server.services;import javax.annotation.PostConstruct; import javax.annotation.PreDestroy;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional;import com.javacodegeeks.gwtspring.server.dao.EmployeeDAO; import com.javacodegeeks.gwtspring.server.utils.NotificationsProducer; import com.javacodegeeks.gwtspring.shared.dto.EmployeeDTO; import com.javacodegeeks.gwtspring.shared.services.EmployeeService;Service(employeeService) public class EmployeeServiceImpl implements EmployeeService {Autowiredprivate EmployeeDAO employeeDAO;AutowiredNotificationsProducer notificationsProducer;PostConstructpublic void init() throws Exception {}PreDestroypublic void destroy() {}public EmployeeDTO findEmployee(long employeeId) {return employeeDAO.findById(employeeId);}Transactional(propagationPropagation.REQUIRED, rollbackForException.class)public void saveEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception {EmployeeDTO employeeDTO employeeDAO.findById(employeeId);if(employeeDTO null) {employeeDTO new EmployeeDTO(employeeId, name,surname, jobDescription);employeeDAO.persist(employeeDTO);}}Transactional(propagationPropagation.REQUIRED, rollbackForException.class)public void updateEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception {EmployeeDTO employeeDTO employeeDAO.findById(employeeId);if(employeeDTO ! null) {employeeDTO.setEmployeeName(name);employeeDTO.setEmployeeSurname(surname);employeeDTO.setJob(jobDescription);}}Transactional(propagationPropagation.REQUIRED, rollbackForException.class)public void deleteEmployee(long employeeId) throws Exception {EmployeeDTO employeeDTO employeeDAO.findById(employeeId);if(employeeDTO ! null)employeeDAO.remove(employeeDTO);}Transactional(propagationPropagation.REQUIRED, rollbackForException.class)public void saveOrUpdateEmployee(long employeeId, String name, String surname, String jobDescription) throws Exception {EmployeeDTO employeeDTO new EmployeeDTO(employeeId, name,surname, jobDescription);employeeDAO.merge(employeeDTO);notificationsProducer.sendNotification(Save Or Update Employee with values : \nID : employeeId \nName : name \nSurname : surname \nJob description : jobDescription);}} 如您所见“ EmployeeServiceController”充当“ employeeService”类的包装器类。 我们参考了实际的服务并实现了直接调用服务功能的方法。 要将具有“控制器”功能的“ EmployeeServiceController”类注入我们只需对其进行注释即可。 Controller批注表示已批注的类是“ Controller”类可用于“ DispatcherServlet”将请求委托给它。 在本教程的开始我们谈到了“ DispatcherServlet”如何使用“ HandlerMappings”来选择适当的“ Controllers”以委派用户请求。 RequestMapping批注用于将Web请求映射到特定的处理程序类和/或处理程序方法。 因此通过在类型级别使用RequestMapping“ / employeeService”批注我们指示“ DispatcherServlet”将“ / employeeService”资源URI下的所有Web请求委托给“ EmployeeServiceController”实例。 此外我们在方法级别使用RequestMapping批注以根据请求的资源URI将“ DispatcherServlet”委派范围缩小到特定操作。 您应该已经注意到PathVariable注释的使用。 在Spring 3中引入了通过PathVariable注释使用URI模板的方法。 URI模板是URI –类似于字符串包含一个或多个变量名。 当这些变量代替值时模板将成为URI。 因此对“ / employeeService / 1”资源URI的客户端HTTP GET请求将委派给我们的“ EmployeeServiceController”实例的“ findEmployee”操作并且“ employeeId”参数的值将设置为1。 注意仅当调度程序中存在相应的“ HandlerMapping”用于类型级别的注释和/或“ HandlerAdapter”用于方法级别的注释时才会处理RequestMapping。 由于Spring 3 MVC的简化在“ dispatcher-servlet.xml”中使用“ mvcannotation-driven”配置元素可以满足我们的所有配置需求。 在本教程的开始我们谈到了“控制器”如何通过调用适当的服务方法来处理每个请求并将“ ModeAndView”对象返回到“ DispatcherServlet”。 “ ModeAndView”对象包含模型数据和视图名称以便正确地呈现给客户端。 这种行为并不总是令人满意的。 例如在我们的示例中我们想将服务响应序列化到HTTP响应主体。 可以将ResponseBody批注放置在方法上并指示应将返回类型直接写到HTTP响应主体而不是放置在Model中或解释为视图名称。 根据客户端接受的内容类型信息来自客户端请求的“ Accept” HTTP Header字段我们将返回服务回复的XML或JSON表示形式。 为此我们通过Spring OXM模块和Jackson JSON处理器使用JAXB编组器和解组器。 最后您应该注意到“ saveEmployee”和“ updateEmployee”操作。 这两个没有ResponseBody批注并返回“ redirect/ restServices / employeeService / employeeId”字符串。 “ Controller”方法可以返回“特殊” String值该值会向“ DispatcherServlet”发出命令。 使用上述重定向命令“ DispatcherServlet”会将调用重定向到与指定URI资源关联的“ Controller”方法在我们的示例中为“ findEmployee”操作。 因此当客户端发出“ saveEmployee”或“ updateEmployee”命令时将收到刚刚插入或更新的“ employeeDTO”对象的XML或JSON表示作为答复。 下面我们介绍DTO类。 package com.javacodegeeks.gwtspring.shared.dto;import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table;import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy;Cache (usageCacheConcurrencyStrategy.TRANSACTIONAL) Entity XmlRootElement Table(name EMPLOYEE) public class EmployeeDTO implements java.io.Serializable {private static final long serialVersionUID 7440297955003302414L;IdColumn(nameemployee_id)private long employeeId;Column(nameemployee_name, nullable false, length30)private String employeeName;Column(nameemployee_surname, nullable false, length30)private String employeeSurname;Column(namejob, length50)private String job;public EmployeeDTO() {}public EmployeeDTO(int employeeId) {this.employeeId employeeId; }public EmployeeDTO(long employeeId, String employeeName, String employeeSurname,String job) {this.employeeId employeeId;this.employeeName employeeName;this.employeeSurname employeeSurname;this.job job;}public long getEmployeeId() {return employeeId;}public void setEmployeeId(long employeeId) {this.employeeId employeeId;}public String getEmployeeName() {return employeeName;}public void setEmployeeName(String employeeName) {this.employeeName employeeName;}public String getEmployeeSurname() {return employeeSurname;}public void setEmployeeSurname(String employeeSurname) {this.employeeSurname employeeSurname;}public String getJob() {return job;}public void setJob(String job) {this.job job;} } 这里唯一需要注意的是我们已经用XmlRootElement注释对DTO类进行了注释以便被JAXB编组器正确编组。 而已 要部署Web应用程序只需将/ war文件夹复制到Apache – Tomcat “ webapps”文件夹中。 您可以将war文件夹的名称更改为自己喜欢的名称最好在项目名称之后将其重命名例如GWTSpringInfinispanHornetQRemoting 在午餐之前应用程序不要忘记创建数据库模式这里是“ javacodegeeks”。 在此示例中我们使用了Apache Derby数据库版本10.6.1.0。 您可以在此处下载二进制发行版。 在发行版的/ lib目录下找到derby.jar并将其放置在项目的/ war / WEB-INF / lib目录下。 要使用Spring配置嵌入式数据库请在/ war / WEB-INF目录下的applicationContext.xml中添加以下配置代码 bean iddataSource classcom.atomikos.jdbc.AtomikosDataSourceBean init-methodinit destroy-methodcloseproperty nameuniqueResourceName valuejavacodegeeks /property namexaDataSourceClassName valueorg.apache.derby.jdbc.EmbeddedXADataSource /property namexaPropertiespropsprop keydatabaseNamejavacodegeeks/propprop keycreateDatabasecreate/prop/props/propertyproperty namemaxPoolSize value50 /property nameminPoolSize value20 / /bean 您可以下载RESTClient并测试“ employeeService”的REST接口如下所示 发出“ http// localhost8080 / GWTSpringInfinispanHornetQRemoting / restServices / employeeService / 1 / myName / mySurname / myJob”的POST请求然后应检索新创建的“ employeeDTO”的XML表示形式如下所示 ?xml version1.0 encodingUTF-8 standaloneyes employeeDTOemployeeId1/employeeIdemployeeNamemyName/employeeNameemployeeSurnamemySurname/employeeSurnamejobmyJob/job /employeeDTO 对http// localhost8080 / GWTSpringInfinispanHornetQRemoting / restServices / employeeService / 1发出GET请求通过POST操作将收到相同的结果 发出PUT请求并从“ employeeDTO”对象更新您喜欢的任何字段。 该服务将以更新的“ employeeDTO” XML表示形式进行回复 对http// localhost8080 / GWTSpringInfinispanHornetQRemoting / restServices / employeeService / 1发出DELETE请求您将收到“确定”答复 在添加HTTP标头指令以将接受的内容类型定义为“ application / json”后发出上述命令。 返回的“ employeeDTO”表示应如下所示 {employeeId:1,employeeName:myName,employeeSurname:mySurname,job:myJob} 您可以从此处下载该项目如开头所述并且不包含先前的文章所需的第三方库 玩得开心 贾斯汀 相关文章 GWT 2 Spring 3 JPA 2 Hibernate 3.5教程 GWT Spring和Hibernate进入数据网格世界 Spring 3 HornetQ 2.1集成教程 GWT 2 Spring 3 JPA 2 Hibernate 3.5教程– Eclipse和Maven 2展示 具有Spring和Maven教程的JAX–WS 翻译自: https://www.javacodegeeks.com/2010/06/spring-3-restful-web-services.html
http://www.pierceye.com/news/277775/

相关文章:

  • 网站建设后需要维护吗微信安全中心官网
  • dw可以做h5网站设计素材网站0
  • 建设银行郑州中心支行网站青海商会网站建设公司
  • 国外小型网站中国视觉设计网
  • 沈阳专业网站制作团队泰安网络软件公司
  • 网站建设招聘兼职0基础建站教程
  • 如何从零开始做网站文学网站建设平台
  • 企业网站的网址通常包含dchaser wordpress
  • 什么是做网站flash是怎么做网站的
  • 什么是速成网站石家庄网站建设就找
  • 张家界网站建设要求滨州网站建设费用
  • wordpress订阅插件南昌优化排名推广
  • 国外做网站公司能赚钱吗wordpress登录锚点弹
  • 微网站平台微网站建设方案邢台市有几个区几个县
  • 茶叶外贸网站建设中国建设银行是国企还是央企
  • 成都网站建设公司有哪些内容必应搜索
  • 青岛建设集团招聘信息网站公司官网怎么制作
  • 本溪网站开发公司电话县蒙文网站建设汇报
  • 广州建网站有哪些怎么做网站建设赚钱
  • led视频网站建设邯郸建设信息网站
  • 开发网站培训班网站详情页用cdr做可以吗
  • 相亲网站开发与设计报告广州网站维护
  • 门户网站 技术方案北京感染人数最新消息
  • 网站制作过程流程酷家乐在线设计官网
  • 六年级做网站的软件小程序开发文档微信小程序
  • 做网站要准备哪些汕头建站公司模板
  • 杭州多语言网站建设网站转app工具
  • 一流的网站建设wordpress 读者墙
  • php 视频播放网站开发php做直播类型的网站
  • 网站建设氺金手指排名11wordpress手机端菜单