webservice(七)发布webservice为tomcat服务的方法
操作循序: 此顺序基于契约优先原则,在我之前写过的webservice(六)的基础上进行修改 1.将wsdl拷贝到webContent下的WEB-INF中(导入JAX-RI包) 具体实例如下: 服务器端: 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",className = "cn.edu.zttc.service.AddResponse") public void add( @WebParam(name = "user",targetNamespace = "") User user) throws UserRunTimeException ; /** * * @param username */ @WebMethod @RequestWrapper(localName = "delete",className = "cn.edu.zttc.service.Delete") @ResponseWrapper(localName = "deleteResponse",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",className = "cn.edu.zttc.service.List") @ResponseWrapper(localName = "listResponse",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",className = "cn.edu.zttc.service.Login") @ResponseWrapper(localName = "loginResponse",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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |