`
iehyou
  • 浏览: 132726 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Servlet 接受解析HTTP请求XML数据,返回XML

    博客分类:
  • J2EE
阅读更多
项目需要Servlet接受http提交过来的XML解析后,返回数据.

OutputStream output = null;
		HttpURLConnection conn = null;
		Document document = null;
        SAXReader reader = new SAXReader();
        URL _url;
		
		if (StringUtil.isNotEmpty(xml)) {
			try {
				_url = new URL(url);
				conn = (HttpURLConnection) _url.openConnection();
				conn.setDoOutput(true);
				conn.setRequestMethod("POST");
				output = conn.getOutputStream();
				output.write(xml.getBytes());
				output.flush();
				document = reader.read(new InputStreamReader(conn.getInputStream(), "GBK"));
				
				document.setXMLEncoding("GBK");
				return document.asXML();
			} catch (MalformedURLException e1) {
//				log.error(e1.toString());
				e1.printStackTrace();
			} catch (IOException e2) {
//				log.error(e2.toString());
				e2.printStackTrace();
			} catch (DocumentException e3) {
//				log.error(e3.toString());
				e3.printStackTrace();
			} finally {
	            try {
	            	if (output != null) {
	            		output.close();
	            	}
	            	if (conn != null) {
	            		conn.disconnect();
	            	}
				} catch (IOException e) {
					e.printStackTrace();
				}
	        }
		}
		return "";

服务器的Servlet使用DOM4J调用解析.原先的一个项目这样调用是可以的.
SAXReader reader = new SAXReader();
document = reader.read(request.getInputStream());

不知道什么原因报错了..
org.dom4j.DocumentException: Error on line -1 of document  : Premature end of file. Nested exception: Premature end of file.
at org.dom4j.io.SAXReader.read(SAXReader.java:482)
at org.dom4j.io.SAXReader.read(SAXReader.java:343)
at com.wasu.itv.web.servlet.ObjectServlet.execute(ObjectServlet.java:75)
at com.wasu.itv.web.servlet.ObjectServlet.doPost(ObjectServlet.java:66)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:199)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:145)
at org.extremecomponents.table.filter.AbstractExportFilter.doFilter(Unknown Source)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:165)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:145)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:75)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:165)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:145)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:955)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:139)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:955)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2460)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:119)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:955)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:955)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:157)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)
Nested exception: 

查了很久,还是不知道什么原因引起的.环境也是和原先的一样.郁闷死了,只有想其他的方法了.通过调试查看request对象,发现xml还是被作为参数保存.参数名是"<?xml version",
就写成如下:
SAXReader reader = new SAXReader();
		StringBuffer doc=new StringBuffer("<?xml version=");
		doc.append(request.getParameter("<?xml version"));
		InputStream   inputStream   =   new   ByteArrayInputStream(doc.toString().getBytes());
		document = reader.read(inputStream);

下面就是解析XML和创建XML返回数据.
public void execute(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		Document document = null;
		SAXReader reader = new SAXReader();
		
		StringBuffer doc=new StringBuffer("<?xml version=");
		doc.append(request.getParameter("<?xml version"));
		InputStream   inputStream   =   new   ByteArrayInputStream(doc.toString().getBytes());
		XMLWriter writer = null; 
		Document resDoc=null;
		try {
			document = reader.read(inputStream);
			if (document!= null) {
				Node objectType=document.selectSingleNode("//req/objectType");
				Node objectTitle=document.selectSingleNode("//req/objectTitle");
				if(objectTitle!=null&&objectType!=null&&objectType.getText().equals(Constants.VOTE.toString())){
					voteManager=(VoteManagerImpl)SpringWebUtils.getApplicationContext(request).getBean("voteManager");
					List votes=voteManager.loadAllByQuery(objectTitle.getText(),null, null, null, null, null, null);
					VoteDTO dto=null;
					if(votes.size()>0){
						dto=(VoteDTO)votes.get(0);
						dto=voteManager.load(dto.getVoteId());
						List<VoteOpt> opts=dto.getVoteOpts();
						resDoc = DocumentHelper.createDocument();   
						Element resElement = resDoc.addElement("res");   
						Element codeElement = resElement.addElement("code");
						codeElement.setText("0");   
						Element descElement =resElement.addElement("desc");
						descElement.setText("查询成功");   
						Element otElement =resElement.addElement("objectTitle");
						otElement.setText(dto.getVoteTitle());   
						Element optionsElement =resElement.addElement("options");
						for (Iterator iterator = opts.iterator(); iterator
						.hasNext();) {
							VoteOpt opt = (VoteOpt) iterator.next();
							Element optionElement =optionsElement.addElement("option");
							
							Element optValueElement =optionElement.addElement("optValue");
							optValueElement.setText(opt.getOptValue());
							Element optNameElement =optionElement.addElement("optName");
							optNameElement.setText(opt.getOptName());
							Element optCountElement =optionElement.addElement("optCount");
							optCountElement.setText(opt.getOptCount().toString());
						}
					}
					else{
						resDoc=getErrorDocument("没有此主题");
					}
				}
				else{
					resDoc=getErrorDocument("请求主题类型不正确");
				}
			}
			else{
				resDoc=getErrorDocument("请求报文格式错误");
			}
			
		} catch (Exception ex) {
			ex.printStackTrace();
			log.error(ex.toString());	
			resDoc=getErrorDocument("请求处理出现错误:"+ex.toString());
		} finally {
			OutputFormat format = OutputFormat.createCompactFormat();   
			format.setEncoding("GBK");   
			writer = new XMLWriter(response.getOutputStream(),   
                    format); 
			writer.write(resDoc);   
            writer.close();   
			if (writer != null) {
				writer.close();
			}
		}
	}
	
	public Document getErrorDocument(String msg){
		Document resDoc = DocumentHelper.createDocument();   
		Element resElement = resDoc.addElement("res");   
		Element codeElement = resElement.addElement("code");
		codeElement.setText("-1");   
		Element descElement =resElement.addElement("desc");
		descElement.setText(msg);   
		return resDoc;
	}

分享到:
评论
1 楼 bmpbhg 2012-07-10  
和你的类似,不过我这边报的是
org.dom4j.DocumentException: Error on line 1 of document  : Premature end of file. Nested exception: Premature end of file.
而且时有时无,很是郁闷,用的是你第一种写法;
你现在找到原因了么?
不行我也试试你第二种写法;

相关推荐

    jQuery解析返回的xml和json方法详解

    一、jQuery 解析ajax请求返回的xml格式的数据 1、发送ajax请求 [removed] function jqxml(){ $.ajax({ url:"http://localhost:18080/servlet/Servlet1", // 请求方式 type:"post", // 服务器返回的数据的格式...

    Servlet 容器工作原理解析

    Servlet 容器如何解析你在 web.xml 中定义的 Servlet ?用户的请求是如何被分配给指定的 Servlet 的? Servlet 容器如何管理 Servlet 生命周期?你还将了解到最新的 Servlet 的 API 的类层次结构,以及 Servlet 中...

    Servlet请求和响应的资料,帮助初学者掌握Servlet的请求和响应

    3. web容器通过请求的URL来选择需要用哪个Servlet来处理请求(这个就是web.xml中配置的或者 @webServlet注解的作用了) 4. Servlet根据请求对象(HttpServletRequest)来决定做什么样的处理,然后通过响应对象 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    servlet模拟器

    解析web.xml文件,通过请求uri匹配配置文件中servlet,并通过类反射机制执行对应servlet

    AjaxWithServlet解析xm字符串及xml文件

    AjaxWithServlet解析xm字符串及xml文件,这个小例子使用的java Servlet,然后对ajax的处理原理,回调函数的使用以及如何解析xml字符串和xml文件进行了注释,简单易懂。

    深入Java Servlet网络编程

    2. 3 处理表单和返回数据的实例 2. 4 错误处理和日志记录 2. 4. 1 Java中的异常处理机制 2. 4. 2 在Java Servlet中处理异常 2. 4. 3 向浏览器发送标准的HTTP错误 2. 4. 4 服务器端日志记录 2. 5 Servlet在n-...

    servlet模拟struts1工作原理

    使用servlet模拟struts1的工作原理,解析xml,处理请求,自动封装数据

    JSP和Servlet面试题

    Servlet的执行流程也就是servlet的生命周期,当服务器启动的时候生命周期开始,然后通过init()《启动顺序根据web.xml里的startup-on-load来确定加载顺序》 方法初始化servlet,再根据不同请求调用doGet或doPost...

    基于jsp+servlet+bean实现的mvc源码

     Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此...

    12-Servlet执行原理.pdf

    1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径。在上图 的URL中,获取的资源路径就是/demo01 2. 查找web.xml文件,是否有对应的标签体内容。 3. 如果有,则在找到对应的...

    Servlet简单模拟Struts2

    用sevrlet模拟Struts2的简单功能。从拦截请求、解析自定义xml数据文件以及动态生成action的代理去执行目标方法,并实现了简单的日志拦截【interceptor】

    servlet 原理

    本文将带你认识 Java Web 技术是如何基于 Servlet 工作,你将知道:... Servlet 容器如何解析你在 web.xml 中定义的 Servlet ?用户的请求是如何被分配给指定的 Servlet 的? Servlet 容器如何管理 Servlet 生命周期?

    SSM+MAVEN+MYSQL框架整合原理+源码

    3.在控制层调用业务逻辑层(service),数据持久层(DAO)返回控制层,请求完成获取一个结果,设置一个要跳转的视图,(ModelAndView装载并传输数据,设置视图) 4.核心控制器调用 视图解析器:ViewResolver解析...

    Android通过http连接mysql

    一:登陆页面:客户端通过httpGet方法进行传值,发送...三:查询页面:客户端通过url方法进行传值,发送请求,服务器端通过jsp进行交互,输出响应的值给客户端,客户端通过SAX解析xml中的数据,然后分页显示到listview中

    DWR.xml配置文件说明书(含源码)

    DWR.xml配置文件说明书 1、 建立dwr.xml 配置文件 任何一个dwr.xml的文件都需要包含DWR DOCTYPE的声明行,格式如下: &lt;!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" ...

    Spring MVC 3.0实战指南.ppt

    3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及解析器 7、其它 目录: Spring MVC 3.0新特性 Spring MVC框架结构 Spring MVC框架结构 框架的实现者 目录 HTTP请求映射原理 Spring MVC...

Global site tag (gtag.js) - Google Analytics