struts2自定义结果类型

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<!--
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="struts-default">

        <default-action-ref name="index" />

        <global-results>
            <result name="error">/error.jsp</result>
        </global-results>

        <global-exception-mappings>
            <exception-mapping exception="java.lang.Exception" result="error"/>
        </global-exception-mappings>

        <action name="index">
            <result type="redirectAction">
                <param name="actionName">HelloWorld</param>
                <param name="namespace">/example</param>
            </result>
        </action>
    </package>

    <include file="example.xml"/>
	 -->
    <!-- Add packages here -->
	<package name="default" namespace="/hello/xxx" extends="struts-default">
		<result-types>
			 <result-type name="captcha" class="com.itheima.results.CaptchaResult"/>
		</result-types>
		 <!--<action name="sayHello" class="com.itheima.actions.HelloAction" method="sayHello">
			<result name="success" type="dispatcher">/1.jsp</result>
		</action> -->
		<action name="captcha">
			<result name="success" type="captcha"></result>
		</action>
	</package>
</struts>

type="captcha" 对应的是上面声明过的 result-type name="captcha"

CaptchaResult:

package com.itheima.results;

import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.Result;
//自定义结果类型
public class CaptchaResult implements Result {
	//输出captcha图像
	public void execute(ActionInvocation invocation) throws Exception {

		HttpServletResponse response = ServletActionContext.getResponse();
		//图片不要缓存
		response.setHeader("Expires", "-1");
		response.setHeader("Cache-Control", "no-cache");
		response.setHeader("Pragma", "no-cache");

		BufferedImage image = CaptchaUtil.genImage();//得到图片

		ImageIO.write(image, "jpeg", response.getOutputStream());

		//让程序继续往下走
		invocation.invoke();

	}

}

Login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <title>用户登陆</title>

	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    

  </head>

  <body>
    	<form action="">
    		用户名:<input type="text" name="username"/><br/>
    		验证码:<img src="${pageContext.request.contextPath}/hello/xxx/captcha.action"/><br/>
    		<input type="submit" value="登陆"/>
    	</form>
  </body>
</html>

  

时间: 2024-08-24 13:54:57

struts2自定义结果类型的相关文章

struts2自定义类型转换器

首先,何为struts2的类型转换器? 类型转换器的作用是将请求中的字符串或字符串数组参数与action中的对象进行相互转换. 一.大部分时候,使用struts2提供的类型转换器以及OGNL类型转换机制即可满足大部分类型转换需求.如: 类User.java package models; public class User { private String username; private String password; public String getUsername() { retur

Struts2 自定义类型转换器

Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性 用date类型是可以接收到的,但是如果传的是20101112这样类型的字符串,用date类型是获取不到,并且会出现错误的,struts2提供了一 种类型转换器供我们使用. 以下为局部类型转换器的开发步骤a.首先要写一个类来继承DefaultTypeConverterb.然后覆盖convertValue

Struts2自定义返回Json类型result

本来Struts2有自己的json类型的返回结果,并提供了插件,但是它有一个问题,那就是它会将所有序列化的字段都返回,如果想要制定返回Action的某一个属性,则需要在配置result时,配置参数(这里只是举个例子): <param name="root">responseMap</param> 配置了这个参数,返回结果就会从Action中的responseMap为根进行返回. 但是如果自定义结果类型,就可以自己控制了,而且不需要struts2-json-res

struts2逻辑视图类型汇总与解释(转)

在struts2框架中,当action处理完之后,就应该向用户返回结果信息,该任务被分为两部分:结果类型和结果本身. 结果类型提供了返回给用户信息类型的实现细节.结果类型通常在Struts2中就已预定义好了(见下表),或者是由插件提供,开发人员也可以自定义结果类型.默认配置的结果类型是dispatcher,该结果类型使用JSP来向用户显示结果.当定义了结果类型之后,该结果类型可以在不同的action中重复使用. ? Struts2框架提供的结果类型 已配置结果类型名 类 名 描 述 dispat

Struts2自定义类型转换,和处理类型转换错误

Struts2自定义类型转换: 从前台接受到的类型全部是字符串,Struts2自带的一些基本类型转换有时不能满足我们的特别需要,如:日期字符串输入格式,还有一些自定义的类,直接传到后台,我们需要一些自己的转换器: 例: 我有一个Point类型: package cn.jnit.bean; public class Point { private Integer x; private Integer y; public Point() { } public Point(Integer x, Int

Struts2实现集合类型转换器

Struts2只提供了一些int,double等基本类型的数据转换,但对于一些非基本类型的数据,Struts2则提供了很 好的扩展,即让需要转换的对象集成DefaultTypeConverter类或者StrutsTypeConverter类,获得一个类型转换器的入口,从而实现开发者自己的类型转换器,完成字符串和自定义符合类型之间的转换. Struts2中有内建的类型转换器和自定义类型转换器以及集合类型转换器,这里我主要介绍集合类型转换器, 有些时候我们需要再页面上批量输入一些数据时,这是就需要使

struts2自定义转换器

Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用date类型是可以接收到的,但是如果传的是20101112这样类型的字符串,用date类型是获取不到,并且会出现错误的,struts2提供了一种类型转换器供我们使用. 以下为局部类型转换器的开发步骤 a.首先要写一个类来继承StrutsTypeConverter b.然后覆盖convertFromSt

关于自定义表类型遇到的问题~

有时候存储过程使用自定义表类型,就一个字~方便,类似于整个table直接传入到存储过程里面去玩,比起"万能"的xml~ 还不用解析,直接能用~多方便. 但是!!! 使用自定义表变量,并不一定是一帆风顺的~比如说和如果调用的参数不是有数据库这边来组装,由程序去控制传入的时候,我目前发现的就有以下2个地方十分的需要注意 1.字段顺序! 在我们看来,自定义表变量,就当时一个普通的表进行使用,赋值,写插入,直接insert select 就完事了~但是,如果写在存储过程的传入参数里面,确不一定

struts2 自定义表单

自定义表单一定会涉及<s:iterator/>迭代,一个复杂的自定义表单可能会嵌套n多层迭代. 比如一个自定义一个问卷调查页面涉及3个模型:一个Survey代表一个调查,一个Page代表一个页面,一个Question代表一个问题.每个问题中会包含不同的表单元素,就会涉及迭代. 3个模型类如下: Survey package com.atguigu.surveypark.model; import java.util.Date; import java.util.HashSet; import