struts2 验证码 收集

WEB-INF/applicationContext.xml
Java代码
<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
 
<bean id="dataSource" name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
    <property name="driverClass" value="com.mysql.jdbc.Driver" />  
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/db?useUnicode=true&amp;characterEncoding=UTF-8"/>  
    <property name="user" value="root" />  
    <property name="password" value="root" />  
    <property name="maxPoolSize" value="50" />  
    <property name="minPoolSize" value="1" />  
    <property name="initialPoolSize" value="1" />  
    <property name="maxStatements" value="0"/>    
    <property name="maxIdleTime" value="20" />  
</bean>  
 
<bean id="sessionFactory" name="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
    <property name="dataSource" ref="dataSource" />  
    <property name="mappingResources">  
        <list>  
            <value>model/User.hbm.xml</value>  
        </list>  
    </property>  
    <property name="hibernateProperties">  
        <props>  
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  
            <prop key="hibernate.show_sql">true</prop>  
            <prop key="hibernate.use_sql_comments">false</prop>  
            <prop key="hibernate.hbm2ddl.auto">update</prop>  
            <prop key="hibernate.jdbc.batch_size">20</prop>  
        </props>  
    </property>  
</bean>  
 
<bean id="transactionManager" name="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
    <property name="sessionFactory" ref="sessionFactory" />  
</bean>  
 
<bean id="transactionInterceptor" name="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">  
    <property name="transactionManager" ref="transactionManager" />  
    <property name="transactionAttributes">  
        <props>  
            <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>  
            <prop key="*">PROPAGATION_REQUIRED</prop>  
        </props>  
    </property>  
</bean>  
 
<bean id="BeanNameAutoProxyCreator" name="BeanNameAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
    <property name="beanNames">  
        <list>  
            <value>mgr</value>  
        </list>  
    </property>  
      
    <property name="interceptorNames">  
        <list>  
            <value>transactionInterceptor</value>  
        </list>  
    </property>  
</bean>  
 
<bean id="mgr" name="mgr" class="service.UserManagerImpl">  
    <property name="userDAO" ref="userDAO" />  
</bean>  
 
<bean id="userDAO" name="userDAO" class="dao.user.UserDAOHibernate">  
    <property name="sessionFactory" ref="sessionFactory" />  
</bean>  
 
</beans> 


WEB-INF/web.xml
Java代码
<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
      
    <context-param>    
     <param-name>contextConfigLocation</param-name>    
     <param-value>/WEB-INF/applicationContext.xml</param-value>    
    </context-param>    
    <!-- 用于初始化Spring容器的Listener -->  
    <listener>  
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>  
      
    <filter>  
        <filter-name>encodingFilter</filter-name>  
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
        <init-param>  
            <param-name>encoding</param-name>  
            <param-value>UTF-8</param-value>  
        </init-param>  
        <init-param>  
            <param-name>forceEncoding</param-name>  
            <param-value>true </param-value>  
        </init-param>  
    </filter>  
    <filter-mapping>  
        <filter-name>encodingFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
      
    <filter>  
        <filter-name>openSessionInViewFilter</filter-name>  
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>openSessionInViewFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
 
    <filter>  
        <filter-name>struts-cleanup</filter-name>  
        <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>struts-cleanup</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
      
    <filter>  
        <filter-name>struts2</filter-name>  
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>struts2</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
</web-app>  


model.User.java
Java代码
package model;  
 
public class User  
{  
    private int Id;  
    private String username;  
    private String password;  
      
    public int getId()  
    {  
        return Id;  
    }  
    public void setId(int id)  
    {  
        Id = id;  
    }  
    public String getUsername()  
    {  
        return username;  
    }  
    public void setUsername(String username)  
    {  
        this.username = username;  
    }  
    public String getPassword()  
    {  
        return password;  
    }  
    public void setPassword(String password)  
    {  
        this.password = password;  
    }  



model/User.hdm.xml
Java代码
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<hibernate-mapping default-access="field" package="model">  
    <class name="User" table="admin">  
        <id name="Id" column="Id">  
            <generator class="identity" />  
        </id>  
        <property name="username" column="username" not-null="true" generated="never" lazy="false" unique="true"/>  
        <property name="password" column="password" not-null="true" generated="never" lazy="false" />  
    </class>  
</hibernate-mapping>  


login.jsp
Java代码
<%@ page language="java" import="java.util.*"  
    contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  
<%@taglib prefix="s" uri="/struts-tags"%>  
<%@taglib prefix="sx" uri="/struts-dojo-tags"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<script type="text/javascript">  
    function refresh()  
    {  
        document.getElementById("authImg").src = "authImg?d=" + new Date().getTime();  
    }  
</script>   
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <sx:head/>   
        <title><s:text name="%{getText('loginPage')}" /></title>  
    </head>  
    <body>  
        <div style="color: red">  
            <s:actionerror/>  
        </div>  
        <s:form action="Login" method="post" name="form" οnsubmit="return validate(document.form)">  
            <s:textfield label="%{getText('username')}" name="username" value="" cssStyle="width:150px;" />  
            <s:password label="%{getText('password')}" name="password" value="" cssStyle="width:150px;" />  
            <s:textfield label="%{getText('vercode')}" name="vercode" value="" cssStyle="width:150px;" />  
            <s:submit value="%{getText('login')}"/>  
        </s:form>  
        验证码如图:<img src="authImg" id="authImg"/>看不清?<a href="#" onClick="refresh()">单击此处刷新</a>  
    </body>  
</html> 


action.LoginAction.java
Java代码
package action;  
 
import java.util.Map;  
import javax.servlet.http.HttpServletResponse;  
import org.apache.struts2.ServletActionContext;  
import com.opensymphony.xwork2.ActionContext;  
 
public class LoginAction extends BaseAction  
{  
    private static final long serialVersionUID = 1L;  
      
    public String getUsername()  
    {  
        return username;  
    }  
    public void setUsername(String username)  
    {  
        this.username = username;  
    }  
    public String getPassword()  
    {  
        return password;  
    }  
    public void setPassword(String password)  
    {  
        this.password = password;  
    }  
    public String getVercode()  
    {  
        return vercode;  
    }  
    public void setVercode(String vercode)  
    {  
        this.vercode = vercode;  
    }  
      
    @SuppressWarnings("unchecked")  
    public String execute() throws Exception  
    {  
        Map session = ActionContext.getContext().getSession();  
        String ver = (String)session.get("authImg");  
 
        if (ver.equals(vercode))  
        {  
            int userId = mgr.loginValid(username,password);  
    
            if (userId > 0)  
            {  
                return SUCCESS;  
            }  
            else  
            {  
                addActionError(getText("noMatch"));  
            }  
        }  
        else  
        {  
            System.out.println("0k3");  
            addActionError(getText("vercodeErr"));  
        }  
        return "failure";  
    }  
 
    private String username;  
    private String password;  
    private String vercode;  
}  


UserDAOHibernate.java
Java代码
package dao.user;  
 
import java.util.List;  
import org.springframework.dao.DataAccessException;  
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
import model.User;  
 
public class UserDAOHibernate extends HibernateDaoSupport implements UserDAO  
{  
    @SuppressWarnings("unchecked")  
    public User findUserByNameAndPass(String username , String password)  
    {  
        List ul = null;  
        try  
        {  
             [color=red]ul = getHibernateTemplate().find("from User au where au.username = ? and au.password = ?" ,new String[]{username,password});[/color]  
        } catch(DataAccessException e)  
        {  
            System.out.println("数据访问异常");  
            e.printStackTrace();  
        }  
         
        System.out.println(ul.size());  
        if (ul != null && ul.size() >= 1)  
        {  
            return (User)ul.get(0);  
        }  
        return null;  
    }  
 
    @SuppressWarnings("unchecked")  
    public User findUserByName(String username)  
    {  
      [color=red]  List ul = getHibernateTemplate().find("from User au where au.username = ?" ,username);[/color]  
        if (ul != null && ul.size() >= 1)  
        {  
            return (User)ul.get(0);  
        }  
        return null;  
    }  
 
    @Override  
    public User get(int id)  
    {  
        return (User)getHibernateTemplate().get(User.class, id);  
    }  
}  



问题描述,1.验证码不显示,2.但是后台能发现6位验证码,当正确的用户名,密码,和后台的验证码后,jsp页面出现:
description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.reflect.InvocationTargetException
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

控制台出现:
12:16:11,779 DEBUG SessionImpl:248 - opened session at timestamp: 12527289717
12:16:12,193 DEBUG JDBCTransaction:82 - begin
12:16:12,194 DEBUG ConnectionManager:444 - opening JDBC connection
12:16:12,197 DEBUG JDBCTransaction:87 - current autocommit status: true
12:16:12,200 DEBUG JDBCTransaction:90 - disabling autocommit
12:16:12,469 DEBUG JDBCTransaction:186 - rollback
12:16:12,471 DEBUG JDBCTransaction:227 - re-enabling autocommit
12:16:12,475 DEBUG JDBCTransaction:197 - rolled back JDBC Connection
12:16:12,476 DEBUG ConnectionManager:325 - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
12:16:12,480 DEBUG ConnectionManager:464 - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
12:16:12,480 DEBUG ConnectionManager:325 - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!

非常感谢大家。。。。。

问题补充:
liyaxi

现在异常没了,但是还是无法显示验证码图片

我的所有action都是默认命名空间,并且没有重命名的action

另外我生成图片的类是:
Java代码
package authImg;  
 
import java.io.*;  
import java.awt.*;  
import java.awt.image.*;  
import java.util.*;  
import javax.imageio.*;  
import javax.imageio.stream.ImageOutputStream;  
 
public class AuthImg   
{  
    private static final long serialVersionUID = 1L;  
    //设置图形验证码中字符串的字体和大小  
      
    private ByteArrayInputStream image;//图像     
    private String str;//验证码     
         
    public AuthImg()  
    {     
        init();  
    }     
    /*   
     * 取得AuthImg实例   
     */    
    public static AuthImg Instance(){     
        return new AuthImg();     
    }     
    /*   
     * 取得验证码图片   
     */    
    public ByteArrayInputStream getImage()  
    {     
        return this.image;     
    }     
    /*   
     * 取得图片的验证码   
     */    
    public String getString()  
    {     
        return this.str;     
    }     
          
    /* 
     * 生成随机颜色 
     */  
    private Color getRandColor(int fc, int bc)  
    {  
        Random random = new Random();  
        if (fc > 255)  
            fc = 255;  
        if (bc > 255)  
            bc = 255;  
        int r = fc + random.nextInt(bc - fc);  
        int g = fc + random.nextInt(bc - fc);  
        int b = fc + random.nextInt(bc - fc);  
        return new Color(r, g, b);  
    }  
    /* 
     * 生成服务器响应的服务方法 
     */  
    public void init()  
    {  
        int width = 100, height = 18;  
        //生成一张新图片  
        BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);  
        //在图片中绘制内容  
        Graphics g = image.getGraphics();  
        Random random = new Random();  
        g.setColor(getRandColor(200, 250));  
        g.fillRect(1, 1, width - 1, height - 1);  
        //设定背景色     
        g.setColor(new Color(102, 102, 102));  
        g.drawRect(0, 0, width - 1, height - 1);  
        g.setFont(new Font("Arial Black", Font.PLAIN, 16));  
        //随机生成线条,让图片看起来更加杂乱  
        g.setColor(getRandColor(160, 200));  
        for (int i = 0; i < 155; i++)  
        {  
            int x = random.nextInt(width - 1);  
            int y = random.nextInt(height - 1);  
            int xl = random.nextInt(6) + 1;  
            int yl = random.nextInt(12) + 1;  
            g.drawLine(x, y, x + xl, y + yl);  
        }  
        for (int i = 0; i < 70; i++)  
        {  
            int x = random.nextInt(width - 1);  
            int y = random.nextInt(height - 1);  
            int xl = random.nextInt(12) + 1;  
            int yl = random.nextInt(6) + 1;  
            g.drawLine(x, y, x - xl, y - yl);  
        }  
        //用于保存系统生成的随机字符串  
        StringBuffer sRand = new StringBuffer(6);  
        for (int i = 0; i < 6; i++)  
        {  
            String tmp = getRandomChar();  
            sRand = sRand.append(tmp);  
            //将系统生成的随机字符添加到图形验证码图片上  
            g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));  
            g.drawString(tmp, 15 * i + 10, 15);  
        }  
        //赋值验证码  
        this.str = sRand.toString();   
 
        g.dispose();     
        ByteArrayInputStream input = null;     
        ByteArrayOutputStream output = new ByteArrayOutputStream();     
        //输出图形验证码图片  
        try  
        {     
            ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);     
            ImageIO.write(image, "bmp", imageOut);     
            imageOut.close();     
            input = new ByteArrayInputStream(output.toByteArray());     
        }catch(Exception e){     
            System.out.println("验证码图片产生出现错误:" + e.toString());     
        }    
        //赋值图像    
        this.image = input;     
    }  
    /* 
     * 生成随机字符 
     */  
    private String getRandomChar()  
    {  
        int rand = (int) Math.round(Math.random() * 2);  
        long itmp = 0;  
        char ctmp = '\u0000';  
        switch(rand)  
        {  
        //生成大写字母的情形  
        case 1:  
            itmp = Math.round(Math.random() * 25 + 65);  
            ctmp = (char) itmp;  
            return String.valueOf(ctmp);  
        //生成小写字母的情形  
        case 2:  
            itmp = Math.round(Math.random() * 25 + 97);  
            ctmp = (char) itmp;  
            return String.valueOf(ctmp);  
        //生成数字的情形  
        default:  
            itmp = Math.round(Math.random() * 9);  
            return String.valueOf(itmp);  
        }  
    }  
}  


产生图片的action是
Java代码
package action;  
 
import java.io.ByteArrayInputStream;  
import javax.servlet.http.HttpServletResponse;  
import org.apache.struts2.ServletActionContext;  
import authImg.AuthImg;  
import com.opensymphony.xwork2.ActionContext;  
import com.opensymphony.xwork2.ActionSupport;  
 
public class CreateCodeImgAction extends ActionSupport  
{  
    private static final long serialVersionUID = 1L;  
      
    public void setInputStream(ByteArrayInputStream inputStream)  
    {  
        this.inputStream = inputStream;  
    }  
 
    public ByteArrayInputStream getInputStream()  
    {  
        return inputStream;  
    }  
 
    public String execute() throws Exception  
    {  
        HttpServletResponse response = ServletActionContext.getResponse();  
        //阻止生成页面被缓存,保证每次重新生成随机验证码  
        response.setHeader("Pragma", "No-cache");  
        response.setHeader("Cache-Control", "no-cache");  
        response.setHeader("Cache-Control", "no-store");  
        response.setDateHeader("Expires", 0);  
        response.setContentType("image/jpeg");  
          
        AuthImg authImg = AuthImg.Instance();  
        // 取得带有随机字符串的图片  
        setInputStream(authImg.getImage());  
        // 取得随机字符串放入HttpSession  
 
        System.out.println(authImg.getString());  
          
        ActionContext.getContext().getSession().put("authImg", authImg.getString());  
          
        return SUCCESS;  
    }  
 
    private ByteArrayInputStream inputStream;  



struts.xml片段
Java代码
<package name="non-authority" extends="struts-default">     
        <action name="Login" class="action.LoginAction">  
            <result name="success">/spread/spread1.jsp</result>  
            <result name="failure">/login.jsp</result>    
        </action>  
          
        <action name="authImg" class="action.CreateCodeImgAction">       
            <result type="stream">       
                <param name="contentType">image/bmp</param>       
                <param name="inputName">inputStream</param>  
            </result>    
            <result name="success">login.jsp</result>  
        </action>    
    </package> 

 

 

-------

2009-09-14 liyaxi (中级程序员)
<action name="authImg" class="action.CreateCodeImgAction">      
           <result type="stream">      
                <param name="contentType">image/bmp</param>      
                <param name="inputName">inputStream</param> 
            </result>   
          <result name="success">login.jsp</result>
       </action> 
把这个<result name="success">login.jsp</result> 删除掉就可以了,
最好把, image/bmp 改为  image/jpeg
把这个也改了 ImageIO.write(image, "bmp", imageOut);  ---   ImageIO.write(image, "jpeg", imageOut);
其实 是人最难发现自己的代码错误的。   你的思路很好, 我已经在我的机子上测试了,
没问题。 我以前只用下边的。
Xml代码
<result type="stream">         
                <param name="contentType">image/peg</param>         
                <param name="inputName">inputStream</param>    
            </result>    
   做下载用。 楼住举一反三 ,触类旁通。 在咱们论坛里有这篇文章 , 题目:struts2下实现了图片验证码,[url]   http://tmq.iteye.com/blog/286022 [/url] , 希望对你有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值