访问页面返回XML格式的数据

实际应用中经常遇到访问某个页面,系统以XML格式返回"成功"或者"失败"信息,客户端根据XML格式判断显示相应的页面。

服务器端的处理完请求之后,以XML格式返回处理信息,可以在response中写回去,Action中就return null

示例如下:

import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

public class GetAllAction extends DispatchAction {	
	private HttpServletResponse response = null;
	
	public ActionForward queryAlluser(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response){
		this.response = response;
		// 接收查询结果
		List<UserIPInfo> userPOList =  null;
		// 拼装HQL语句
		String hql = "from UserIPInfo as po order by id asc";
		// 生成XML格式的root
		Element rootElt=new Element("userInformations");
		
		// 获得commonDao的实例
		CommonDaoIf<UserIPInfo> commonDao = new CommonDaoImpl<UserIPInfo>();
		// 调用CommonDaoImpl的query方法将所有符合条件的对象存入List中
		userPOList = commonDao.query(hql);
		
		for(Iterator<UserIPInfo> itor = userPOList.iterator();itor.hasNext();){
			UserIPInfo temp = itor.next();
			System.out.println(temp.getAddress());
			System.out.println(temp.getId());
			System.out.println(temp.getPort());
		}
		
		sendAccept(rootElt, userPOList);
		
		return null;
	}
	
	private void sendAccept(Element rootElt,List<UserIPInfo> list){
		// 遍历List中的元素,将数据加入XML中
		for(Iterator<UserIPInfo> itor = list.iterator();itor.hasNext();){
			// 获取符合条件的元素
			UserIPInfo temp = itor.next();
			
			// 生成元素<user></user>
			Element user = new Element("user");
			// 生成元素<userId></userId>
			Element userId = new Element("userId");
			// 生成元素<userAddress></userAddress>
			Element userAddress = new Element("userAddress");
			// 生成元素<userPort></userPort>
			Element userPort = new Element("userPort");
			
			// 设置各个标签<userId><userAddress><userPort>的值
			userId.setText(Integer.toString(temp.getId()));
			userAddress.setText(temp.getAddress());
			userPort.setText(temp.getPort());
			
			// 加入到上级标签<user>中去
			user.addContent(userId);
			user.addContent(userAddress);
			user.addContent(userPort);
			
			rootElt.addContent(user);
		}
		send(rootElt);
	}

	private void send(Element rootElt){
	    Document doc = new Document(rootElt);  
	    XMLOutputter out = new XMLOutputter();    
	    //设置文件的编码格式
	    out.setFormat(Format.getCompactFormat().setEncoding("UTF-8")); 
	    try {
			response.getOutputStream().write(out.outputString(doc).getBytes());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

比较讨巧的办法:就是直接转向某jsp页面

将数据设在request中,在jsp页面直接展示

在Action中就这样处理:

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

public class GetAllAction extends DispatchAction {
	private HttpServletResponse response = null;
	
	public ActionForward queryAlluser(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response){
		this.response = response;
		// 接收查询结果
		List<UserIPInfo> userPOList =  null;
		// 拼装HQL语句
		String hql = "from UserIPInfo as po order by id asc";
		
		// 获得commonDao的实例
		CommonDaoIf<UserIPInfo> commonDao = new CommonDaoImpl<UserIPInfo>();
		// 调用CommonDaoImpl的query方法将所有符合条件的对象存入List中
		userPOList = commonDao.query(hql);
		
		request.setAttribute("userList", userPOList);
		
		return mapping.findForward("success");
	}
}


在jsp页面中以XML形式处理

<?xml version="1.0" encoding="UTF-8"?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Iterator"%>
<%@ page import="java.util.List"%>
<%@ page import="com.xxx.xxx.xxx.po.UserInfoPO"%>
<user>
	<userName><%=request.getAttribute("pgmName")%></userName>
	<cycleListCount><%=request.getAttribute("count")%></cycleListCount>
	<cycleList>
		<%
			List<UserInfoPO> userList = (List<UserInfoPO>)request.getAttribute("userList");
			for(UserInfoPO po : userList){
				%>
				<cycle>
					<cycleId ><%=po.getId()%></cycleId>
					<pix><%=request.getAttribute("pix")%></pix>
				</cycle>
				<%
			}
		%>
	</cycleList>
</user>


试了一下,效果和response中写回去是一样的,客户端可以解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值