通过 JDBC 使用 MySQL 登录表单:模型在 Struts 2 中驱动

Login form with MySQL via JDBC: Model driven in Struts 2

我是 struts2 的新手。我正在使用 NetBeans8、Glassfish4 和 MySql6.

我正在制作一个登录表单。我遇到的问题是我没有收到错误或任何输出。

我可以 运行 我的应用程序和我的登录页面点击提交后没有任何反应,但我的 url 更改为 http://localhost:8080/Pharma/loginAction.action

请有人帮忙,你的建议将不胜感激

LoginAction.java

package package_login;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.lang3.StringUtils;


public class LoginAction extends ActionSupport implements ModelDriven<User>{
    User user=new User();

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public User getModel() {   
       return user;
    }
     public void validate(){
     if(StringUtils.isEmpty(user.getEmail())){
         addFieldError("email","Please entered your email");
     }

      if(StringUtils.isEmpty(user.getPassword())){
         addFieldError("password","Please entered your password");
     }

     }


    public String execute() throws ClassNotFoundException, SQLException {
        LoginService loginService= new LoginService();
        if(loginService.verifyLogin(user)){
      return "logged";
}
return "login";
}
}

LoginService.java

package package_login;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


    class LoginService {
        public boolean verifyLogin(User user) throws ClassNotFoundException, SQLException{
            Class.forName("com.mysql.jdbc.Driver");
            Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/erp","root","ali$");
            Statement st= con.createStatement();
            ResultSet rs= st.executeQuery("select password,email from login where email='"+user.getEmail()+"'" );
            while(rs.next()){
           //   if(user.getEmail().equals(rs.getString("email"))&& user.getPassword().equals("password")){
            //    return true;
               }
           // }
            return false;
        }

    }

User.java

package package_login;


class User {
    private String email;
    private String password;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

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

}

login.xml

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

<struts>

    <!-- Configuration for the default package. -->
    <package name="package_login" extends="struts-default">
        <action name="loginAction" class="package_login.LoginAction">
            <result name="logged">/welcome.jsp</result>
            <result name="login">/login.jsp</result>
            <result name="input">/login.jsp</result>
        </action>
    </package>
</struts>

login.jsp

<%@taglib uri="/struts-tags" prefix="s"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <s:form action="loginAction">
            <s:textfield key="email" label="Email"/>
            <s:password key="password" label="Password"/>
            <s:submit value="login"/>
        </s:form>
    </body>
</html>
ResultSet rs= st.executeQuery("select email from login where email='"+user.getEmail()+"' and password='"+user.getPassword()+"'" );
if(rs.next())
 {
      return true;//if valid user, return true
 }
 else 
 return false;

和 您正在使用 struts 配置文件名 login.xml.

配置文件名struts代替login.xml应使用struts.xml

而不是 Statement,使用 PrepareStatementcallablestatement 来避免 sql 注入。

Link