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

  • 相关阅读:
    thinkphp5 tp5 命名空间 报错 Namespace declaration statement has to be the very first statement in the script
    开启 php 错误 提示 php-fpm 重启 nginx 500错误 解决办法 wdlinux lnmp 一键包 php脚本无法解析执行
    js 设置 cookie 定时 弹出层 提示层 下次访问 不再显示 弹窗 getCookie setCookie setTimeout
    php 二维数组 转字符串 implode 方便 mysql in 查询
    nginx 重启 ps -ef|grep nginx kill -HUP 主进程号
    jquery bootstrap help-block input 表单 提示 帮助 信息
    jquery 倒计时 60秒 短信 验证码 js ajax 获取
    jQuery如何获取同一个类标签的所有的值 遍历
    linux下C语言文件操作相关函数
    gcc,gdb用法
  • 原文地址:https://www.cnblogs.com/HDK2016/p/7342138.html
Copyright © 2011-2022 走看看