zoukankan      html  css  js  c++  java
  • 【Struts2】result类型

    Struts2 result类型

    1.dispatcher:服务器跳转到页面,通常来处理JSP,默认类型。

    2.redirect:重定向到页面。

    Action:

    1 public String redirect() {  
    2         message = "message中有值";  
    3         return "redirect";  
    4 }  

    struts.xml

    1 <package name="chapter3" namespace="/chapter3" extends="struts-default">  
    2         <action name="redirectAction" class="chapter3.action.Chapter3Action" method="redirect">  
    3             <result name="redirect" type="redirect">/redirect.jsp</result>  
    4         </action>  
    5 </package>  

    注意的地方:外部中转不能带值过去,并且页面不能受保护

    传参数:

    1 <action name="redirectAction" class="chapter3.action.Chapter3Action" method="redirect">  
    2     <result name="redirect" type="redirect">/redirect.jsp?message=${message}</result>  
    3 </action>  

     页面:

    ${param.message}<br>

    3.chain:服务端跳转到Action;

    action:

    1 public String action2() {  
    2     message = "我是action2中设置的值";  
    3     return "action2";  
    4 }  

    struts.xml

    复制代码
    1 <package name="chapter32" namespace="/chapter32" extends="struts-default">  
    2     <action name="action2" class="chapter3.action.Chapter3Action" method="action2">  
    3         <result name="action2" type="chain">  
    4             <param name="actionName">redirectAction</param>  
    5             <param name="namespace">/chapter3</param>  
    6         </result>  
    7     </action>  
    8 </package>  
    复制代码

    4.redirectAction:外部跳转到Action;

    action:

    1 public String action3() {  
    2     message = "我是action3中设置的值";  
    3     return "action3";  
    4 }  

    struts.xml

    1 <action name="action3" class="chapter3.action.Chapter3Action" method="action3">  
    2     <result name="action3" type="redirectAction">redirectAction</result>  
    3 </action>  

     跨命名空间的外部跳转:

    1 public String action4() {  
    2     message = "我是action4中设置的值";  
    3     return "action4";  
    4 }  

    struts.xml

    复制代码
    1 <action name="action4" class="chapter3.action.Chapter3Action" method="action4">  
    2     <result name="action4" type="redirectAction">  
    3         <param name="actionName">redirectAction</param>  
    4         <param name="namespace">/chapter3</param>  
    5     </result>  
    6 </action>  
    复制代码
    5,json
    Struts2中返回JSON的格式有两种,一种是使用Servelt输出流,另一种就是使用struts2对JSON的扩展。这里笔者介绍第一种,
    编写Action代码:
    public void write() throws IOException{ 
     HttpServletResponse response=ServletActionContext.getResponse(); 
     /* 
     * 在调用getWriter之前未设置编码(既调用setContentType或者setCharacterEncoding方法设置编码), 
     * HttpServletResponse则会返回一个用默认的编码(既ISO-8859-1)编码的PrintWriter实例。这样就会 
     * 造成中文乱码。而且设置编码时必须在调用getWriter之前设置,不然是无效的。 
     * */
     response.setContentType("text/html;charset=utf-8"); 
     //response.setCharacterEncoding("UTF-8"); 
     PrintWriter out = response.getWriter(); 
     //JSON在传递过程中是普通字符串形式传递的,这里简单拼接一个做测试 
     String jsonString="{"user":{"id":"123","name":"张三","say":"Hello , i am a action to print a json!","password":"JSON"},"success":true}"; 
     out.println(jsonString); 
     out.flush(); 
     out.close(); 
    }

    配置Action:

    从以下的配置中可以明显的看到配置与普通的action配置没有任何区别,只是没有返回的视图而已。

    <action name="write" class="json.JsonAction" method="write" />

    返回值:

    {"user":{"id":"123","name":"张三","say":"Hello , i am a action to print a json!","password":"JSON"},"success":true}
    6,stream
    就是把数据以字节流的方式输出,

    1:图片验证码:

    Action类,action主要要提供一个获取InputStrem的方法:

    public class CheckCodeAction extends ActionSupport implements SessionAware {
    private Logger log = LoggerFactory.getLogger(this.getClass());
    private InputStream imageStream;
    private Map session;

    public String getCheckCodeImage(String str, int show, ByteArrayOutputStream output) {
    Random random = new Random();
    BufferedImage image = new BufferedImage(80, 30, BufferedImage.TYPE_3BYTE_BGR);
    Font font = new Font("Arial", Font.PLAIN, 24);
    int distance = 18;
    Graphics d = image.getGraphics();
    d.setColor(Color.WHITE);
    d.fillRect(0, 0, image.getWidth(), image.getHeight());
    d.setColor(new Color(random.nextInt(100) + 100, random.nextInt(100) + 100, random.nextInt(100) + 100));
    for (int i = 0; i < 10; i++) {
    d.drawLine(random.nextInt(image.getWidth()), random.nextInt(image.getHeight()), random.nextInt(image.getWidth()),
    random.nextInt(image.getHeight()));
    }
    d.setColor(Color.BLACK);
    d.setFont(font);
    String checkCode = "";
    char tmp;
    int x = -distance;
    for (int i = 0; i < show; i++) {
    tmp = str.charAt(random.nextInt(str.length() - 1));
    checkCode = checkCode + tmp;
    x = x + distance;
    d.setColor(new Color(random.nextInt(100) + 50, random.nextInt(100) + 50, random.nextInt(100) + 50));
    d.drawString(tmp + "", x, random.nextInt(image.getHeight() - (font.getSize())) + (font.getSize()));
    }
    d.dispose();
    try {
    ImageIO.write(image, "jpg", output);
    } catch (IOException e) {
    log.warn("生成验证码错误.", e);
    }
    return checkCode;
    }

    public String execute() throws Exception {
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    String checkCode = getCheckCodeImage("ABCDEFGHJKLMNPQRSTUVWXYZ123456789", 4, output);
    this.session.put(Constants.CHECK_CODE_KEY, checkCode);
    //这里将output stream转化为 inputstream
    this.imageStream = new ByteArrayInputStream(output.toByteArray());
    output.close();
    return SUCCESS;
    }

    public InputStream getImageStream() {
    return imageStream;
    }

    public void setSession(Map session) {
    this.session = session;
    }

    struts配置文件:

    <action name="checkCode" class="CheckCodeAction">
    <result name="success" type="stream">
    <param name="contentType">image/jpeg</param>
    <!-- 指定提供InputStream的filed name -->
    <param name="inputName">imageStream</param>
    <param name="bufferSize">1024</param>
    </result>
    <interceptor-ref name="defaultStack"/>
    </action>

    原文链接:http://www.cnblogs.com/elleniou/archive/2012/10/17/2728237.html

  • 相关阅读:
    深入剖析.NET运行机制
    在浏览器地址中加参数
    mysql 中文乱码
    今天在看一些面试题的时候遇到的一个关于strcmp()返回值的细节问题
    如何在学习过程中统一IDE的编码!
    通过文件方式,在文件内容开头写入字符串!
    Java编写圆的相关计算
    leetcode 上的Counting Bits 总结
    cocos2dx打包apk
    CEGUI0.8.4例子
  • 原文地址:https://www.cnblogs.com/HDK2016/p/7342138.html
Copyright © 2011-2022 走看看