我有一个 struts Web 应用程序,它从数据库实现登录页面。我似乎无法让它从登录表单的数据库中正确提取用户名和密码。我正在尝试使用注释代替 struts xml 来重定向我的页面。我确实得到了错误结果,但无法得到成功结果。只需要一些关于我做错了什么的指示即可使其正常工作。
登录.jsp
<jsp:include page="/template/header.jsp" />
<%@ taglib uri="/struts-tags" prefix="s" %>
<title>Login</title>
<div id="loginsection">
<h2>Login in your account <img src="images/padlock.png"
alt="padlocklogo" height="40" width="50"></h2>
<div id="loginform">
<s:actionerror />
<s:form action="loginaction" method="post" >
<s:textfield label="Username" name="username" class="username"/><p></p>
<s:password label="Password" name="password" cssClass="passwordfield"/>
<s:submit value="Login" class="submitbutton"/>
</s:form>
</div><br><br><br>
<div id="loginbuttons">
<p>Forgot Password</p><a href="help.jsp" class="helpbutton">Help</a>
<br><br>
<p>Need to Register?</p><a href="register.jsp"
class="registerbutton">Register</a>
<br><br>
</div>
</div>
<jsp:include page="/template/footer.jsp" />
登录操作:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import oracle.jdbc.OracleDriver;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private String username;
private String password;
private String userid;
private String userpwd;
Connection conn = null;
public void setUsername(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
@Action(value="loginaction", results={
@Result(name="success", location="/welcome.jsp"),
@Result(name="error", location="/login.jsp")})
public String execute() {
String usr = "admin";
String pwd = "pwd123";
String ret = ERROR;
try {
String url = "jdbc:oracle:thin:@localhost:1521:xe";
OracleDriver driver = new OracleDriver();
DriverManager.registerDriver(driver);
Connection conn = DriverManager.getConnection(url,usr,pwd);
String sql = "SELECT username,password FROM usermanagement WHERE";
sql+=" username = ? AND password = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
pstmt.setString(2, password);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
userid = rs.getString(1);
userpwd = rs.getString(2);
if (username.equals(userid) && password.equals(userpwd))
ret = SUCCESS;
}
} catch (Exception e) {
addActionError("Invalid Username/Password");
ret = ERROR;
} finally {
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
}
}
}
return ret;
}
}
最佳答案
更改您的代码。
.............
if(rs.next())
{
return SUCCESS; //the return atatement should be here. otherwise other statements should be evaluated.
}
else
{
addActionError("Invalid Username/Password");
return ERROR;//here also
}
} catch (Exception e) {
e.printStackTrace();
return ERROR;
}
因为您的查询中有 where
子句。因此需要 while
和再次 if
。
如果您遇到任何错误,请发布堆栈跟踪。
关于java - Struts 数据库登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32683471/