现在的位置: 首页 > 综合 > 正文

struts2的返回结果直接为字符串

2018年05月01日 ⁄ 综合 ⁄ 共 3160字 ⁄ 字号 评论关闭

struts2的action在处理完了业务后,会返回一个字符串,在xml文件面定义字符串与返回页面的关联,便可方便返回页面.但struts2缺少一个方便直接的返回字符串的方法.现在以微信为订阅号成为开发者为例,说明解决方法(集成一个类好可):


方法1:直接在action中书写:

	/**
	 * 处理微信服务器请求,get请求验证token,post请求是消息
	 */
	public String execute(){
		System.out.println("weixin----------OpenPlatformServiceAction execute-------");
		String method = ServletActionContext.getRequest().getMethod();
		logger.debug("method="+method);
		try {
			if(method.equals("POST")){
				jsonString = doRequest();
				logger.debug("post request complete");
			}else{
				if (validateToken()) {
					jsonString = echostr;
					System.out.println("echostr="+echostr);
					HttpServletResponse response = ServletActionContext.getResponse();
					HttpServletRequest request = ServletActionContext.getRequest();
					response.setContentType("text/plain; charset=UTF-8");  
			        response.setHeader("Content-Disposition", "inline");
			        PrintWriter writer = null;
			        try {  
			            writer = response.getWriter();  
			            writer.write(jsonString);  
			        }catch(Exception e){
			        	e.printStackTrace();
			        } finally {  
			            if (writer != null) {  
			                writer.flush();  
			                writer.close();  
			            }  
			        }
				}else {
					jsonString = "validate fail";
				}
				//logger.debug("get request complete");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
				
		return "openResult";
	}
	
	/**
	 * 验证token,只在微信验证平台调用接口时会验证一次
	 * @return
	 * @throws EntityException
	 */
	private boolean validateToken() throws EntityException{
		System.out.println("weixin----------OpenPlatformServiceAction validateToken-------");
		logger.debug("validate token...");
		String[] str = { getToken(), timestamp, nonce };
		System.out.println("Token="+ getToken()+",timestamp="+timestamp+",nonce="+nonce+",signature="+signature);
		Arrays.sort(str); // 字典序排序
		String connStr = str[0] + str[1] + str[2];
		System.out.println("connStr="+connStr);
        // SHA1加密
        String digest = encode("SHA1", connStr);
        System.out.println("digest="+digest);
        // 确认请求来至微信
        if (digest.equals(signature)) {
        	System.out.println("validate success");
        	//logger.debug("validate success,query string:"+ServletActionContext.getRequest().getQueryString());
            return true;
        }
        //logger.debug("validate fail,query string:"+ServletActionContext.getRequest().getQueryString());
        return false;
	}

2,第二种:添加一个工具类

/**

 * 扩展Struts2返回类型,直接返回String

 * 

 * @author Carmack Created on 2009-3-24 下午03:36:32

 */

public class StringResult extends ServletRedirectResult {

	/**

	 * @author Carmack Created on 2009-3-24 下午03:36:24

	 */

	private static final long serialVersionUID = -2800270132418148253L;

	

	private static final Logger LOG = LoggerFactory.getLogger(StringResult.class);

	

	public StringResult(){

		super();

	}

	

	public StringResult(String location){

		super(location);

	}

	

	

	public void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {

		HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(HTTP_RESPONSE);

		HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(HTTP_REQUEST);

		

        response.setContentType("text/plain; charset=UTF-8");

        response.setHeader("Content-Disposition", "inline");



        PrintWriter writer = null;

        try {

        	writer = response.getWriter();

			writer.write(request.getAttribute(finalLocation).toString());

		} catch(NullPointerException e) {

			if(finalLocation.equals("")){

				LOG.warn("未指定value",e);

			}else{

				LOG.error("空",e);

			}

		} finally {

            if (writer != null) {

                writer.flush();

                writer.close();

            }

        }

	}

}

在Action上使用:

@Results({ @Result(name = "strResult" , type=StringResult.class, value="testStr")})

在方法中先给testStr赋值,返回直接返回sttrResult就OK啦.

testStr = "测试返回字符串123abc";  
return "strResult";  



抱歉!评论已关闭.