`
schy_hqh
  • 浏览: 558469 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Webservice中获取Servlet的相关对象

 
阅读更多

 第一种方式:

通过注入WebServiceContext ,获取request、session等

 

 @Resource
 private WebServiceContext webServiceContext;

 
 public String getLoginUser() {
  HttpServletRequest request = 
    (HttpServletRequest) webServiceContext.getMessageContext().get(MessageContext.SERVLET_REQUEST);
  HttpSession session = request.getSession();
  return session.getAttribute("loginUser").toString();
 }

 

 

第二种方式:

通过ThreadLocal进行传递

package com.hqh.student.ws.util;

/**
 * 通过ThreadLocal传递session中的信息
 * 也可以用来传递其它信息,如request对象等
 * @author lenovo
 *
 */
public class LoginUserContext {
	private static ThreadLocal<String> loginUser = new ThreadLocal<String>();
	
	public static String getLoginUser() {
		return loginUser.get();
	}
	
	public static void setLoginUser(String _loginUser) {
		loginUser.set(_loginUser);
	}
	
	public static void remove() {
		loginUser.remove();
	}
}

 

编写一个Filter,通过Filter为ThreadLocal设置需要传递的值

主要是从filter中获取servlet对象,再获取session中的登陆信息

package com.hqh.student.ws.util;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * 通过filter获取servlet相关信息
 * 然后设置到ThreadLocal中,方便一些不能被spring管理的对象使用
 *
 */
public class LoginUserFilter implements Filter {

	public void destroy() {

	}

	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		try {
			HttpServletRequest request = (HttpServletRequest)req;
			HttpSession session = request.getSession();
			String username = (String) session.getAttribute("loginUser");
			System.out.println("LoginUserFilter get username from session:"+username);
			if(username!=null) {
				//throw new RuntimeException("用户未登陆!");
				System.out.println("设置用户信息到LoginUserContext的ThreadLocal属性中");
				LoginUserContext.setLoginUser(username);
			}
			chain.doFilter(req, resp);
		} finally {
			//释放ThreadLocal中存放的信息
			LoginUserContext.remove();
		}
	}

	public void init(FilterConfig arg0) throws ServletException {

	}

}

 

web.xml中加入filter

<!-- 在filter中获取servlet的相关对象,设置到ThreadLocal中 -->
<filter>
	<filter-name>LoginUserFilter</filter-name>
	<filter-class>com.hqh.student.ws.util.LoginUserFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>LoginUserFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

  

 

 

在Handler中通过ThreadLocal变量来获取数据

package com.hqh.student.ws.handler;

import java.util.Set;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;

import com.hqh.student.ws.util.LoginUserContext;

public class LicenseHandler implements SOAPHandler<SOAPMessageContext> {
	
	public void close(MessageContext ctx) {
		
	}

	public boolean handleFault(SOAPMessageContext ctx) {
		return false;
	}

	public boolean handleMessage(SOAPMessageContext context) {
		try {
			Boolean out = (Boolean) context.get(SOAPMessageContext.MESSAGE_OUTBOUND_PROPERTY);
			if(out) {
				System.out.println("message outing...");
				SOAPEnvelope soapEnv = context.getMessage().getSOAPPart().getEnvelope();
				SOAPBody soapBody = soapEnv.getBody();
				//获取当前在调用服务的哪个方法
				String localName = soapBody.getFirstChild().getLocalName();
//				System.out.println(localName);
				if(!"getStudent".equals(localName)) {
					return true;
				}
				
				//如果是getStudent,则加入头信息
				SOAPHeader soapHeader = soapEnv.getHeader();
				if(soapHeader==null) {
					soapHeader = soapEnv.addHeader();
				}
				//创建QName
				String nameSpace = "http://ws.student.hqh.com";//wsdl的targetNamespace
				String part = "license";//message的name,必须与wsdl中定义的一致
				String prefix = "ns";//前缀
				QName headerQName = new QName(nameSpace, part, prefix);
				/**
				 * 从SOAPMessageContext中获取session中存放的信息
				 * 由于Handler没有被spring管理,所以获取不到HttpServletRequest
				 */
				//HttpServletRequest request = (HttpServletRequest) context.get(MessageContext.SERVLET_REQUEST);
				//String loginUser = request.getSession().getAttribute("loginUser").toString();
				
                                //从ThreadLocal中取出登陆用户信息
				String loginUser = LoginUserContext.getLoginUser();
				System.out.println("get loginUser from session:"+loginUser);
				if(loginUser==null) {
					System.out.println("loginUser is null");
				}
				//将QName加入Header,并设定值
				soapHeader.addHeaderElement(headerQName).setValue(loginUser);
			} else {
				System.out.println("message come back...");
			}
			return true;
		} catch (SOAPException e) {
			e.printStackTrace();
		}
		return false;
	}

	public Set<QName> getHeaders() {
		return null;
	}


}

 

 

 

分享到:
评论

相关推荐

    Andriod访问WebService和Servlet.zip

    在Android开发中,访问Web服务,如WebService和Servlet,是常见的需求,这通常涉及到网络通信和数据交换。本文将深入探讨Android如何利用kSOAP2库与基于Axis的WebService进行通信,以及如何处理Servlet返回的数据,...

    java webservice服务器端获取request对象的三种方式

    下面是一个简单的示例方法,用于从`HttpServletRequest`对象中提取客户端IP地址: ```java public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); ...

    webservice获取List案例

    Webservice获取List案例是Java开发中常见的应用场景,它涉及到如何通过Web服务接口获取并处理列表类型的数据。在这个案例中,我们将探讨如何创建一个Web服务端点,客户端如何调用该服务,以及如何以Web工程的形式...

    webservice之通俗理解

    在WebService中,Servlet通常用于处理SOAP请求。 #### 四、部署配置 1. **server-config.wsdd**:这是一个配置文件,用于指定WebService的部署细节。其中包括了服务的URL、方法名等信息。 2. **web.xml**:这是...

    java调用webservice.pdf

    文档中的“***”表明了WebService被部署在了Tomcat服务器上,客户端可以通过访问该URL获取WSDL文件描述,并利用它来调用远程服务。 最后,文档中还隐含了一些其他Java WebService开发的知识点,如JAX-WS的注解使用...

    webservice的客户端 页面 JSP servlet 实现

    4. **JSP展示结果**:Servlet处理完请求后,可以将结果存储在HttpSession或HttpServletResponse对象中,然后重定向到JSP页面。在JSP页面中,可以通过EL表达式或者JSTL标签来获取并展示数据。 5. **创建JSP页面**:...

    JSON返回值格式的WebService样例

    在本示例中,“JSON返回值格式的WebService样例”旨在展示如何构建一个Web服务,该服务能够从数据库获取数据,并以JSON格式将结果返回给调用者。 首先,我们需要了解WebService的基本概念。WebService是一种基于...

    webservice 和android 调用客户端

    WebService通常使用XML(可扩展标记语言)进行数据传输,以SOAP(简单对象访问协议)作为通信协议,运行在像Tomcat这样的应用服务器上。 **1. WebService的基本概念** - **WebService**: 是一种基于HTTP协议的,...

    21.集成开发需求方案附件二:OA系统工作流WebService接口使用说明.doc

    在实际应用中,通过这些接口,开发者可以实现与泛微OA系统进行深度集成,比如获取员工的待办事项并在自己的应用程序中显示,或者统计已处理的流程数量以用于报告和分析。需要注意的是,`conditions`参数允许自定义...

    WebService

    通过以上介绍,我们可以看到在不同的WebService框架中,获取客户端IP地址的方式虽然有所不同,但核心思想都是利用HTTP请求对象中的相关信息。在实际开发过程中,选择合适的框架和技术方案对于提高开发效率和降低维护...

    java调用webservice实例代码

    Java调用WebService是一种常见的在Java应用中集成外部服务或与不同平台进行数据交换的技术。本实例将通过两个Web小项目,一个是客户端(Client),另一个是WebService服务器端,来阐述如何在Java中实现这一功能。 ...

    泛微 ecology9.0 文档(DocService)WebService接口使用说明

    - 功能描述:获取用户有权限访问的所有文档对象数组,但不包含具体内容和附件。 #### 四、接口调用示例 以下是一个简单的示例代码,展示如何使用Eclipse自动生成的客户端程序来调用DocService接口的方法: ```...

    webService

    - **UserService接口**:定义了获取用户的接口方法,使用`@WebService`注解标记为Web服务接口。 - **UserServiceImpl类**:实现了`UserService`接口,提供了具体的业务逻辑,如模拟数据库查询并返回用户信息。 ####...

    WebService Axis 搭建开发

    - `web.xml`文件通常可以从Axis的示例项目中复制相关配置。 3. **配置web.xml** - 添加`servlet`元素,包括`AxisServlet`和`AdminServlet`,这些servlet负责处理Web服务请求和管理。 - 更新`web.xml`,确保它...

    基于Servlet发送、接收SOAP消息的java源程序

    - 接收SOAP请求:Servlet通过`HttpServletRequest`对象获取HTTP请求体,然后解析SOAP消息。 - 处理SOAP请求:根据SOAP请求中的内容,服务器执行相应业务逻辑,并构建SOAP响应。 - 发送SOAP响应:利用`...

    在JAX-WS 中实现多个WebService间会话保持

    在JAX-WS中实现多个WebService间的会话保持是一个关键的技术需求,特别是在处理涉及多步骤交互的业务逻辑时。JAX-WS(Java API for XML Web Services)是Java平台上的Web服务开发框架,它简化了服务端和客户端的创建...

    webservice

    通过以上步骤,我们不仅可以了解WebService的基本概念,还可以掌握如何在MyEclipse中使用XFire框架来创建、配置和测试WebService。这种技术对于实现不同系统之间的通信非常有用,尤其是在企业级应用中。

    JAVA用WebService实现调用天气预报功能

    通过运行这个项目,我们可以看到如何实际操作这些步骤,实现从Java应用调用WebService获取天气预报数据的过程。 总的来说,这个项目展示了Java如何利用WebService技术实现跨系统的信息交互,特别是与中央气象台的...

Global site tag (gtag.js) - Google Analytics