设为首页 收藏本站
查看: 610|回复: 0

[经验分享] webservice(七)发布webservice为tomcat服务的方法

[复制链接]

尚未签到

发表于 2017-2-8 10:46:34 | 显示全部楼层 |阅读模式
  操作循序:
  此顺序基于契约优先原则,在我之前写过的webservice(六)的基础上进行修改
  1.将wsdl拷贝到webContent下的WEB-INF中(导入JAX-RI包)

在wsdl中就可以使用include方式来导入了(暂时先不要进行导入,经测试发现导入可能引发问题)

修改实现类中的wsdlLocation的目录名
2.在web-inf下创建一个文件名为:sun-jaxws.xml

并进行如下修改:

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

<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"

version="2.0">

<!-- 1.Servlet中所需要对应的名称2.实现类3.浏览器的后缀 -->

<endpoint name="UserService" implementation="cn.edu.zttc.service.UserServiceImpl"

url-pattern="/us" />

</endpoints>
3.配置web.xml

加入监听器

<listener>

<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>

</listener>

<servlet>

<servlet-name>UserService</servlet-name>

<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>UserService</servlet-name>

<url-pattern>/us</url-pattern>

</servlet-mapping>
  

  具体实例如下:
  服务器端:

  user.wsdl

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://service.zttc.edu.cn"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
name="UserService"
targetNamespace="http://service.zttc.edu.cn">
<!--
wrappered 推荐使用的方式
-->
<wsdl:types>
<xsd:schema targetNamespace="http://service.zttc.edu.cn">
<!-- import是在导入的时候加入了命名空间 -->
<!-- <xsd:import namespace="http://service.zttc.edu.cn" schemaLocation="user.xsd"/> -->
<!-- include是在当前的schema中加入了命名空间 -->
<!-- <xsd:include schemaLocation="user.xsd"/> -->
<xsd:element name="add" type="tns:add"></xsd:element>
<xsd:element name="addResponse" type="tns:addResponse"></xsd:element>
<xsd:element name="delete" type="tns:delete"></xsd:element>
<xsd:element name="deleteResponse" type="tns:deleteResponse"></xsd:element>
<xsd:element name="list" type="tns:list"></xsd:element>
<xsd:element name="listResponse" type="tns:listResponse"></xsd:element>
<xsd:element name="login" type="tns:login"></xsd:element>
<xsd:element name="loginResponse" type="tns:loginResponse"></xsd:element>
<!-- 1.添加异常 -->
<xsd:element name="UserRunTimeException" type="tns:UserRunTimeException"></xsd:element>
<xsd:complexType name="UserRunTimeException">
<xsd:sequence>
<xsd:element name="message" type="xsd:string"></xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="add">
<xsd:sequence>
<xsd:element name="user" type="tns:user"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="addResponse">
<xsd:sequence/>
</xsd:complexType>
<xsd:complexType name="delete">
<xsd:sequence>
<xsd:element name="username" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="deleteResponse">
<xsd:sequence/>
</xsd:complexType>
<xsd:complexType name="list">
<xsd:sequence/>
</xsd:complexType>
<xsd:complexType name="listResponse">
<xsd:sequence minOccurs="1" maxOccurs="unbounded">
<xsd:element name="user" type="tns:user"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="login">
<xsd:sequence>
<xsd:element name="username" type="xsd:string"/>
<xsd:element name="password" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="loginResponse">
<xsd:sequence>
<xsd:element name="user" type="tns:user"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="user">
<xsd:sequence>
<xsd:element name="username" type="xsd:string"/>
<xsd:element name="password" type="xsd:string"/>
<xsd:element name="nickname" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
<wsdl:message name="add">
<wsdl:part element="tns:add" name="parameters" />
</wsdl:message>
<wsdl:message name="addResponse">
<wsdl:part element="tns:addResponse" name="parameters" />
</wsdl:message>
<wsdl:message name="delete">
<wsdl:part element="tns:delete" name="parameters" />
</wsdl:message>
<wsdl:message name="deleteResponse">
<wsdl:part element="tns:deleteResponse" name="parameters" />
</wsdl:message>
<wsdl:message name="list">
<wsdl:part element="tns:list" name="parameters" />
</wsdl:message>
<wsdl:message name="listResponse">
<wsdl:part element="tns:listResponse" name="parameters" />
</wsdl:message>
<wsdl:message name="login">
<wsdl:part element="tns:login" name="parameters" />
</wsdl:message>
<wsdl:message name="loginResponse">
<wsdl:part element="tns:loginResponse" name="parameters" />
</wsdl:message>
<!-- 2.创建异常消息 -->
<wsdl:message name="UserRunTimeException">
<wsdl:part element="tns:UserRunTimeException" name="fault" />
</wsdl:message>
<wsdl:portType name="IUserService">
<wsdl:operation name="add">
<wsdl:input message="tns:add" />
<wsdl:output message="tns:addResponse" />
<!-- 3.为方法设置异常 -->
<wsdl:fault name="UserRunTimeException" message="tns:UserRunTimeException"/>
</wsdl:operation>
<wsdl:operation name="delete">
<wsdl:input message="tns:delete" />
<wsdl:output message="tns:deleteResponse" />
</wsdl:operation>
<wsdl:operation name="list">
<wsdl:input message="tns:list" />
<wsdl:output message="tns:listResponse" />
</wsdl:operation>
<wsdl:operation name="login">
<wsdl:input message="tns:login" />
<wsdl:output message="tns:loginResponse" />
<!-- 3.为方法设置异常 -->
<wsdl:fault name="UserRunTimeException" message="tns:UserRunTimeException"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="userServiceSOAP" type="tns:IUserService">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="add">
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
<!-- 4.进行异常的fault绑定 -->
<wsdl:fault name="UserRunTimeException">
<soap:fault name="UserRunTimeException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="delete">
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="list">
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="login">
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
<!-- 4.进行异常的fault绑定 -->
<wsdl:fault name="UserRunTimeException">
<soap:fault name="UserRunTimeException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<!-- 在当前文件的最上面的name中填写的 -->
<wsdl:service name="UserService">
<wsdl:port binding="tns:userServiceSOAP" name="userServicePort">
<soap:address location="http://localhost:8080/web-soa/us" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>



生成IUserService
package cn.edu.zttc.service;
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
import org.zttc.dao.UserRunTimeException;
import org.zttc.vo.User;

/**
* This class was generated by the JAX-WS RI.
* JAX-WS RI 2.2.4-b01
* Generated source version: 2.2
*
*/
@WebService(name = "IUserService", targetNamespace = "http://service.zttc.edu.cn")
public interface IUserService {

/**
*
* @param user
* @throws UserRunTimeException_Exception
*/
@WebMethod
@RequestWrapper(localName = "add", targetNamespace = "http://service.zttc.edu.cn", className = "cn.edu.zttc.service.Add")
@ResponseWrapper(localName = "addResponse", targetNamespace = "http://service.zttc.edu.cn", className = "cn.edu.zttc.service.AddResponse")
public void add(
@WebParam(name = "user", targetNamespace = "")
User user)
throws UserRunTimeException
;
/**
*
* @param username
*/
@WebMethod
@RequestWrapper(localName = "delete", targetNamespace = "http://service.zttc.edu.cn", className = "cn.edu.zttc.service.Delete")
@ResponseWrapper(localName = "deleteResponse", targetNamespace = "http://service.zttc.edu.cn", className = "cn.edu.zttc.service.DeleteResponse")
public void delete(
@WebParam(name = "username", targetNamespace = "")
String username);
/**
*
* @return
*     returns java.util.List<cn.edu.zttc.service.User>
*/
@WebMethod
@WebResult(name = "user", targetNamespace = "")
@RequestWrapper(localName = "list", targetNamespace = "http://service.zttc.edu.cn", className = "cn.edu.zttc.service.List")
@ResponseWrapper(localName = "listResponse", targetNamespace = "http://service.zttc.edu.cn", className = "cn.edu.zttc.service.ListResponse")
public List<User> list();
/**
*
* @param username
* @param password
* @return
*     returns cn.edu.zttc.service.User
* @throws UserRunTimeException_Exception
*/
@WebMethod
@WebResult(name = "user", targetNamespace = "")
@RequestWrapper(localName = "login", targetNamespace = "http://service.zttc.edu.cn", className = "cn.edu.zttc.service.Login")
@ResponseWrapper(localName = "loginResponse", targetNamespace = "http://service.zttc.edu.cn", className = "cn.edu.zttc.service.LoginResponse")
public User login(
@WebParam(name = "username", targetNamespace = "")
String username,
@WebParam(name = "password", targetNamespace = "")
String password)
throws UserRunTimeException
;
}



实现类
package cn.edu.zttc.service;
import java.util.List;
import javax.jws.WebService;
import org.zttc.dao.UserDao;
import org.zttc.dao.UserRunTimeException;
import org.zttc.vo.User;
@WebService(endpointInterface="cn.edu.zttc.service.IUserService",
wsdlLocation="WEB-INF/wsdl/user.wsdl",
serviceName="UserService",
portName="userServicePort",
targetNamespace="http://service.zttc.edu.cn")
public class UserServiceImpl implements IUserService {
private UserDao userDao = UserDao.newInstence();
@Override
public void add(User user) throws UserRunTimeException {
userDao.add(user);
}
@Override
public void delete(String username) {
userDao.delete(username);
}
@Override
public List<User> list() {
return userDao.list();
}
@Override
public User login(String username, String password) throws UserRunTimeException {
return userDao.login(username, password);
}
}



DAO方法
package org.zttc.dao;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.zttc.vo.User;
public class UserDao {
private static final Map<String,User> users = new HashMap<String, User>();
private static UserDao dao = null;
public UserDao(){
users.put("admin", new User("admin", "admin", "超级管理员"));
}
public static UserDao newInstence(){
if (null==dao)dao = new UserDao();
return dao;
}
public void add(User user) throws UserRunTimeException{
System.out.println("---------add--------"+user);
System.out.println("---------user.getUsername()--------"+user.getUsername());
if (users.containsKey(user.getUsername())) {
throw new UserRunTimeException("用户已存在");
}
users.put(user.getUsername(), user);
}
public void delete(String username){
System.out.println("---------delete--------"+username);
users.remove(username);
}
public List<User> list(){
System.out.println("---------list--------"+users);
Set<String> keys = users.keySet();
List<User> list = new ArrayList<User>();
for (String key : keys) {
list.add(users.get(key));
}
return list;
}
public User login(String username,String password) throws UserRunTimeException{
System.out.println("---------login--------"+username+password);
if (!users.containsKey(username)) {
throw new UserRunTimeException("用户不存在");
}
User u = users.get(username);
if (!password.equals(u.getPassword())) {
throw new UserRunTimeException("用户密码不正确");
}
return u;
}
}



填写异常类
package org.zttc.dao;
/**
* 继承RunTimeException会在服务器端抛出异常
* 所以要继承为Exception
*/
public class UserRunTimeException extends Exception {
private static final long serialVersionUID = 1L;
public UserRunTimeException() {
super();
}
public UserRunTimeException(String arg0, Throwable arg1, boolean arg2,
boolean arg3) {
super(arg0, arg1, arg2, arg3);
}
public UserRunTimeException(String arg0, Throwable arg1) {
super(arg0, arg1);
}
public UserRunTimeException(String arg0) {
super(arg0);
}
public UserRunTimeException(Throwable arg0) {
super(arg0);
}
}



实体类
package org.zttc.vo;
public class User {
private String username;
private String password;
private String nickname;
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 String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public User(String username, String password, String nickname) {
super();
this.username = username;
this.password = password;
this.nickname = nickname;
}
public User() {
super();
}
}



sun-jaxws.xml
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
version="2.0">
<!-- 1.Servlet中所需要对应的名称2.实现类3.浏览器的后缀 -->
<endpoint name="UserService" implementation="cn.edu.zttc.service.UserServiceImpl"
url-pattern="/us" />
</endpoints>



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/web-app_2_5.xsd" 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>07_soa</display-name>
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>UserService</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserService</servlet-name>
<url-pattern>/us</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>

客户端代码:  根据web服务连接(http://localhost:8989/web-soa/us?wsdl)生成后添加测试类:


package org.zttc.test;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import javax.xml.namespace.QName;
import org.junit.Before;
import org.junit.Test;
import cn.edu.zttc.service.IUserService;
import cn.edu.zttc.service.User;
import cn.edu.zttc.service.UserRunTimeException_Exception;
import cn.edu.zttc.service.UserService;
public class TestService {
private IUserService port;
private UserService us;
private String ns = "http://service.zttc.edu.cn";
@Before
public void init(){
try {
URL url = new URL("http://localhost:8989/web-soa/us?wsdl");
QName name = new QName(ns,"UserService");
us = new UserService(url,name);
port = us.getUserServicePort();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
@Test
public void testList(){
List<User> list = port.list();
for (User user : list) {
System.out.println(user.getNickname());
}
}
@Test
public void testAdd(){
try{
User user = new User();
user.setNickname("搜索");
user.setPassword("456123");
user.setUsername("ss");
port.add(user);
}catch (UserRunTimeException_Exception e) {
System.out.println(e.getMessage());
}
}
@Test
public void testLogin(){
try{
User u = port.login("ss", "456123");
System.out.println(u.getNickname());
}catch (UserRunTimeException_Exception e) {
System.out.println(e.getMessage());
}
}
@Test
public void testDelete(){
port.delete("ss");
}
}


  list.jsp

<%@page import="cn.edu.zttc.service.User"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
当前用户:${loginUser.nickname}
<%
List<User> users = (List<User>)request.getAttribute("users");
for(User u:users){
%>
<%=u.getNickname()%>-------<%=u.getUsername()%>
<a href="user.do?username=<%=u.getUsername()%>&method=delete">删除</a>
<%
}
%>
</body>
</html>


add.jsp
<%@page import="cn.edu.zttc.service.User"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="user.do" method="post">
<input type="hidden" name="method" value="add">
Username:<input type="text" name="username"/><br/>
password:<input type="text" name="password"/><br/>
nickname:<input type="text" name="nickname"/><br/>
<input type="submit">
</form>
</body>
</html>


login.jsp
<%@page import="cn.edu.zttc.service.User"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="user.do" method="post">
<input type="hidden" name="method" value="login">
Username:<input type="text" name="username"/><br/>
password:<input type="text" name="password"/><br/>
<input type="submit">
</form>
</body>
</html>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-339156-1-1.html 上篇帖子: 解决tomcat默认45s启动超时的问题 下篇帖子: tomcat 性能调优---经典
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表