You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Struts应用登录表单提交后返回空白页问题求助

问题原因与修复方案

你的空白页问题由以下几个错误共同导致:

  • 1. LoginAction的execute方法签名错误,未正确重写Struts 1要求的父类方法
    Struts 1中Action的业务逻辑入口是固定签名的execute方法,你自定义的无参、返回String的execute方法不会被框架调用,框架无法获取跳转信息,因此返回空白页。
    正确签名需包含ActionMapping、ActionForm、HttpServletRequest、HttpServletResponse四个参数,返回值为ActionForward类型,最终通过mapping.findForward(返回标识)获取跳转对象。

  • 2. 所有setter方法赋值逻辑写反
    当前setter是把类属性值赋给传入参数,完全颠倒了赋值方向,导致页面提交的邮箱、密码根本没有写入类属性,查询时email和pass永远为null,匹配不到任何数据。

  • 3. 表单属性与form-bean配置不匹配
    你在struts-config.xml中配置了LoginActionForm作为表单封装类,但把email、pass等表单属性写在了LoginAction类中,Struts 1默认会把表单参数注入到配置的form-bean实例中,不会注入Action的属性。你可以选择把属性移到LoginActionForm中,或者删除form-bean配置直接把参数注入Action属性。


修正后代码示例

修正后的LoginAction.java(选择删除form-bean配置的方案)

package com.myapp.struts;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm; 
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class LoginAction extends org.apache.struts.action.Action {

    private static final String SUCCESS = "success";
    private static final String FAILURE = "failure";

    private String email,pass,name;
 
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String ret = FAILURE;
        Connection conn = null;

        try {
            String URL = "jdbc:mysql://localhost:3306/studentdb";
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(URL, "root", "root");
            String sql = "select name from logincred where email = ? and pass = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, email);
            ps.setString(2, pass);
            ResultSet rs = ps.executeQuery();

            if (rs.next()) {
                name = rs.getString(1);
                ret = SUCCESS;
                // 可将用户名存入session供后续页面使用
                request.getSession().setAttribute("username", name);
            }
        } catch (Exception e) {
            e.printStackTrace(); // 开发阶段可打印异常方便排查
            ret = FAILURE;
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (Exception e) {
                }
            }
        }
        return mapping.findForward(ret);
    }

    public String getEmail() {
        return email;
    }

    public String getName() {
        return name;
    }


    public void setEmail(String login) {
        this.email = login;
    }
    public void setName(String user){
        this.name = user;
    }
    public String getPass() {
        return pass;
    }


    public void setPass(String password) {
        this.pass = password;
    }
}

修正后的struts-config.xml对应配置(删除无用的form-bean关联)

<form-beans>
    <!-- 如果不需要form-bean可删除下面这行 -->
    <!-- <form-bean name="LoginActionForm" type="com.myapp.struts.LoginActionForm"/> -->
</form-beans>
......
<action-mappings>
    <!-- 移除name属性,不需要关联form-bean -->
    <action input="/login.jsp" path="/login" scope="request" type="com.myapp.struts.LoginAction">
        <forward name="success" path="/success.jsp"/>
        <forward name="failure" path="/failure.jsp"/>
    </action>
    <action path="/Login" forward="/login.jsp"/>
</action-mappings>

内容的提问来源于stack exchange,提问作者Coffin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:15:03