文档章节

cxf+spring+tomcat 发布RESTful类型的服务

哭哭吓唬你
 哭哭吓唬你
发布于 2014/05/29 16:29
字数 1199
阅读 85
收藏 0
点赞 0
评论 0

具体关于SOAP和RESTful类型的服务的区别,可自行百度。

创建web工程,我的工程名是:RESTStyleMailServer

工程结构

1. JavaBean的编写。

package edu.ncut.mail;

import java.io.Serializable;
import java.util.Observable;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="Mail")
public class Mail extends Observable implements Serializable{
	
	/**  设置SMTP端口号  */    
	private static final String MAIL_PORT = "25";
	/**  邮件发送服务器地址  */    
	private static final String MAIL_SERVAL_HOST = "smtp.126.com";
	/**  邮件发送服务器是否需要验证,默认为TRUE  */    
	private boolean validate ;
	/**  邮件主题  */    
	private String subject;
	/**  邮件内容  */    
	private String content;
	private String fromAddress;
	private String toAddress;
	/**  验证时的用户名和密码  */    
	private String username = null;
	private String password = null;
	private transient Authenticator authenticator = null;
	//验证
	
	public String sendMail(){
		
		if(isValidate()){
			authenticator = new Authenticator() {

				@Override
				protected PasswordAuthentication getPasswordAuthentication() {
					// TODO Auto-generated method stub
					return new PasswordAuthentication(getUsername(), getPassword());
				}
				
			};
		}
		if(isValidate() && authenticator == null){
			return "failure";
		}
		
		this.setChanged();
		this.notifyObservers(this);
		return "success";
	}
	public Mail(){
		validate = true;
	}
	
	public Mail(String from, String to, String subject, String content,
			String password) {
		this.fromAddress = from;
		this.toAddress = to;
		this.subject = subject;
		this.content = content;
		this.password = password;
		this.username = from;
		validate = true;
	}

	/**
	 * 方法名称:getProp()
	 * 方法描述:验证时所需要的额属性
	 * @param  
	 * @return String    
	 * @Exception 
	 */
	public Properties getProp() {
		Properties p = new Properties();
		p.put("mail.smtp.host", MAIL_SERVAL_HOST);
		p.put("mail.smtp.port", MAIL_PORT);
		p.put("mail.smtp.auth", validate ? "true" : "false");
		return p;
	}
	public String getSubject() {
		return subject;
	}


	public String getUsername() {
		return username;
	}


	public void setUsername(String username) {
		this.username = username;
	}


	public String getPassword() {
		return password;
	}


	public void setPassword(String password) {
		this.password = password;
	}
	public boolean isValidate() {
		return validate;
	}
	public void setValidate(boolean validate) {
		this.validate = validate;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}


	public String getFromAddress() {
		return fromAddress;
	}


	public void setFromAddress(String fromAddress) {
		this.fromAddress = fromAddress;
		setUsername(fromAddress);
	}


	public String getToAddress() {
		return toAddress;
	}


	public void setToAddress(String toAddress) {
		this.toAddress = toAddress;
	}


	public Authenticator getAuthenticator() {
		return authenticator;
	}


	public void setAuthenticator(Authenticator authenticator) {
		this.authenticator = authenticator;
	}
	@Override
	public String toString() {
		return "Mail [validate=" + validate + ", subject=" + subject
				+ ", content=" + content + ", fromAddress=" + fromAddress
				+ ", toAddress=" + toAddress + ", username=" + username
				+ ", password=" + password + "]";
	}
	
}
import java.io.Serializable;
import java.util.Observable;
import java.util.Observer;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="Sender")
public class Sender implements Observer,Serializable {

	
	/**     
	 * @param o
	 * @param obj    
	 * @see java.util.Observer#update(java.util.Observable, java.lang.Object)    
	 */
	@Override
	public void update(Observable o, Object obj) {
		// TODO Auto-generated method stub

		System.out.println("execute");
		final Mail mail = (Mail)obj;
		System.out.println(mail);
		
		//创建session
		try {
			Session session = Session.getInstance(mail.getProp(), mail.getAuthenticator());
			Message message = new MimeMessage(session);
			message.setSubject(mail.getSubject());
			message.setFrom(new InternetAddress(mail.getFromAddress()));
			message.setRecipient(Message.RecipientType.TO, new InternetAddress(mail.getToAddress()));
			message.setText(mail.getContent());
			//发送
			Transport.send(message);
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	

}
2. 对外服务接口的编写。
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import edu.ncut.mail.Mail;
import edu.ncut.mail.Sender;

@Produces({MediaType.TEXT_XML})  
@Path("/impl")
public class MailServiceImpl {

/*

   注释(Annotation):在 javax.ws.rs.* 中定义,是 JAX-RS (JSR 311) 规范的一部分。 
   @Path:定义资源基 URI。由上下文根和主机名组成,资源标识符类似于 http://localhost:8080/RESTful/rest/hello。 
   @GET:这意味着以下方法可以响应 HTTP GET 方法。 
   @Produces:以纯文本方式定义响应内容 MIME 类型。
   @Context: 使用该注释注入上下文对象,比如 Request、Response、UriInfo、ServletContext 等。 
   @Path("{contact}"):这是 @Path 注释,与根路径 “/contacts” 结合形成子资源的 URI。 
   @PathParam("contact"):该注释将参数注入方法参数的路径,在本例中就是联系人 id。其他可用的注释有 @FormParam、@QueryParam 等。 
   @Produces:响应支持多个 MIME 类型。在本例和上一个示例中,APPLICATION/XML 将是默认的 MIME 类型。

*/
	@GET
	@Path("/send/{from}/{to}/{subject}/{content}/{password}")
	@Produces({MediaType.TEXT_XML})
	public void sendMail(@PathParam("from")String from,@PathParam("to")String to, 
			@PathParam("subject")String subject, @PathParam("content")String content, @PathParam("password")String password ) {
		// TODO Auto-generated method stub
		System.out.println("execute");
		
		Mail mail = new Mail(from, to, subject, content, password);
		Sender sender = new Sender();
		mail.addObserver(sender);
		mail.sendMail();
	}
	
	@GET
	@Path("/test{id}")
	@Produces({MediaType.TEXT_XML})
	public void test(@PathParam("id")int id){
		System.out.println("test****" + id);
	}
	
	
	@POST
        @Path("/sendByPost")
        @Produces({MediaType.TEXT_XML})
        public String sendMailByPost(@QueryParam("from")String from,@QueryParam("to")String to, 
            @QueryParam("subject")String subject, @QueryParam("content")String content ) {
        // TODO Auto-generated method stub
        System.out.println("execute");
        
        Mail mail = new Mail(to, subject, content);
        Sender sender = new Sender();
        mail.setSender(sender);
        return mail.sendMail();
    }

}
3. spring配置文件:beans.xml
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
	xmlns:jaxrs="http://cxf.apache.org/jaxrs"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans.xsd
	http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
	http://cxf.apache.org/jaxrs
	http://cxf.apache.org/schemas/jaxrs.xsd">

	<!-- 此处为对外发布的服务的类-->
	<bean id="mail" class="edu.ncut.view.impl.MailServiceImpl"/>
        <!--address 为服务的地址-->
     <jaxrs:server id="restServiceContainer" address="/mailService">
		<jaxrs:serviceBeans>
			<ref bean="mail" />
		</jaxrs:serviceBeans>
		<jaxrs:extensionMappings>
			<entry key="json" value="application/json" />
			<entry key="xml" value="application/xml" />
		</jaxrs:extensionMappings>
		<jaxrs:languageMappings>
			<entry key="en" value="en-gb" />
		</jaxrs:languageMappings>
	</jaxrs:server>

</beans>
注意:可能有的文章说明在beans.xml中加了这些内容:
<import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/cxf-extension-http.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />



但是在本例中发现,以上三句内容不需要。


4. 配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="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_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>RestStyleMailServer</display-name>

<!-- Spring 配置 -->
  <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:beans.xml</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>

    </listener>
    
    
    <!-- cxf配置 -->
	<servlet>
		<servlet-name>restStyleMailServer</servlet-name>
		<!-- <servlet-class>edu.ncut.listener.NonSpringServlet</servlet-class> -->
		 <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>restStyleMailServer</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>

<!-- 	<session-config>
		<session-timeout>60</session-timeout>
	</session-config> -->
</web-app>
配置完成后启动tomcat发布。

http://localhost:8080/RESTStyleMailServer/这样可查看是否成功

如果出现上图的内容,表示成功。


测试test方法,http://localhost:8080/RESTStyleMailServer/mailService/impl/test1.会在控制台打印内容


© 著作权归作者所有

共有 人打赏支持
哭哭吓唬你
粉丝 3
博文 93
码字总数 39471
作品 0
石景山
程序员
JAX-RS 方式的 RESTful Web Service 开发

Web Service 目前在风格上有两大类,一个是基于 SOAP 协议,一个是完全遵循 HTTP 协议规范的RESTful 风格。 SOAP 方式的 web service 已经很成熟了,应用也很广,已经成为 Web Service 的工业...

小致dad ⋅ 2016/07/13 ⋅ 0

【转】使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务

简介: Spring,构建 Java™ 平台和 Enterprise Edition (Java EE) 应用程序的著名框架,现在在其模型-视图-控制器(Model-View-Controller ,MVC)层支持具象状态传输 (REST)。RESTful web...

老盖 ⋅ 2011/08/25 ⋅ 0

使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务

Spring,构建 Java™ 平台和 Enterprise Edition (Java EE) 应用程序的著名框架,现在在其模型-视图-控制器(Model-View-Controller ,MVC)层支持具象状态传输 (REST)。RESTful web 服务根据...

IBMdW ⋅ 2011/08/05 ⋅ 2

Vestful v1.0.rc.1 发布,通用 Restful 服务框架

Vestful 是基于 Voovan 开发的通用 Restful 服务框架。旨在为广大开发者提供一个快速、稳定、功能丰富、自产文档的 Restful 框架。目的是在完成业务实现的同时,说明文档、接口服务等同时完成...

愚民日记 ⋅ 2017/03/14 ⋅ 5

Encuestame 1.144 发布,调查问卷系统

Encuestame 1.144 发布,该版本包含了投票、搜索和个人信息界面上的改进,RESTful API 新增了服务列表的接口和RSS服务列表,同时改进内核,更加稳定。 Encuestame 是一个调查管理系统。它集成...

红薯 ⋅ 2012/04/29 ⋅ 0

Activiti rest api 使用

题外: 设计器修改为基于H5的了,有点小幸福~~ 哈哈 版本信息:5.19.0 REST主要核心包在源码 modules 下面 主要三个部分 1. activiti-common-rest 基本设置,内容较少 2. activiti-rest(旧的...

triankg ⋅ 2016/01/22 ⋅ 0

利用 Dojo Toolkit 使用 web 服务

本文是关于使用 web 服务的 — 简单服务和 RESTful web 服务 — 使用 Dojo Toolkit。为了更好地理解本文,您需要在您的系统进行以下安装和配置: 一个文本编辑器或集成开发环境(IDE) (本文...

小卒过河 ⋅ 2011/07/25 ⋅ 0

Apache Wink 1.2.0-incubating 发布

Apache Wink 已经一年多了,还在孵化阶段,目前发布了 1.2.0 版本,完整的发布详情请下载后查看: http://incubator.apache.org/wink/downloads.html Apache Wink是一个是使用简单,稳定的Jav...

oschina ⋅ 2012/05/24 ⋅ 2

Hasor-Web v0.0.1 发布 轻量级Java Web 框架

首先引用Wiki的介绍一下Hasor: “Hasor是一款开源框架。它是为了解决企业模块化开发中复杂性而创建的。Hasor遵循简单的依赖、单一职责,在开发多模块企业项目中更加有调理。然而Hasor的用途...

哈库纳 ⋅ 2013/09/30 ⋅ 0

Keycloak 3.1.0.CR1 发布,SSO 集成解决方案

Keycloak 3.1.0.CR1 发布了。Keycloak 是一个为浏览器和 RESTful Web 服务提供 SSO 的集成。基于 OAuth 2.0 和 JSON Web Token(JWT) 规范。最开始是面向 JBoss 和 Wildfly 通讯,但已经计划为...

局长 ⋅ 2017/04/28 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Mahout基于内存的DataMode 推荐引擎Demo2

Mahout基于内存的DataMode 推荐引擎Demo2 //注释的部分是基于文件也可以理解为基于日志文件的, //DataModel 可以有很多种,实现abstractDataMode的子类,原则上都可以作为数据源,个人觉得,...

xiaomin0322 ⋅ 10分钟前 ⋅ 0

Docker部署Tomcat及Web应用

一、在线下载docker yum install -y epel-releaseyum install docker-io # 安装dockerchkconfig docker on # 加入开机启动service docker start # 启动docker服务 1 ...

Jeam_ ⋅ 11分钟前 ⋅ 0

研发运营一体化能力成熟度模型

研发运营一体化是指在 IT 软件及相关服务的研发及交付过程中,将应用的需求、开发、测试、部 署和运营统一起来,基于整个组织的协作和应用架构的优化,实现敏捷开发、持续交付和应用运营的无...

stars永恒 ⋅ 16分钟前 ⋅ 0

jQuery缩小放大触发事件

jquery的resize()方法使用 <html> <head> <script type="text/javascript" src="/jquery/jquery.js"></script> <script type="text/javascript"> var i = 0; $(document).ready(function(){ ......

RobertZou ⋅ 17分钟前 ⋅ 0

eclipse python 搭建

https://jingyan.baidu.com/article/9113f81b68ebce2b3214c7e0.html https://www.cnblogs.com/ZhangRuoXu/p/6397756.html https://blog.csdn.net/zhangphil/article/details/78962159 字符集......

之渊 ⋅ 17分钟前 ⋅ 0

weex,react native,flutter

weex: 一次编写,处处运行 RN: 学一次,到处写(针对安卓,IOS平台特性 各自写,会有很大一部分是一样的代码) 这些方案是否真正的解决了跨平台问题呢?从目前的状况来看,很显然是没有的,因...

东东笔记 ⋅ 23分钟前 ⋅ 0

Spring Cloud微服务分布式云架构-集成项目

Spring Cloud集成项目有很多,下面我们列举一下和Spring Cloud相关的优秀项目,我们的企业架构中用到了很多的优秀项目,说白了,也是站在巨人的肩膀上去整合的。在学习Spring Cloud之前大家必...

明理萝 ⋅ 28分钟前 ⋅ 1

SpringMVC图片上传问题解决

当我们上传图片时一直发现: MultipartFile file = null; if (request instanceof MultipartHttpServletRequest) 匹配不上, 解决方案: 在前端xml加入如下配置代码即可 <!-- 图片上传bean --...

泉天下 ⋅ 30分钟前 ⋅ 0

Spring表达式语言(SpEL)

1、SpEL引用 Spring EL在bean创建时执行其中的表达式。此外,所有的Spring表达式都可以通过XML或注解的方式实现。下面将使用Spring表达式语言(SpEL),注入字符串,整数,Bean到属性。 SpEL的...

霍淇滨 ⋅ 46分钟前 ⋅ 0

Gradle使用阿里云镜像

gradle 生命周期中有一个初始化( Initialization )的过程,这个过程运行在 build script 之前,我们可以在这个地方做一点系统全局的设置,如配置仓库地址。 你可以在以下几个位置实现仓库地址...

明MikeWoo ⋅ 54分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部