[英]Struts2 login error with MySQL
我已经为Struts2创建了一个简单的登录应用程序,但是无法使用本地MySQL数据库登录。 我的代码如下:
login.jsp的
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login</title>
</head>
<body>
<s:form action="loginprocess">
<s:textfield name="username" label="Username"></s:textfield>
<s:password name="password" label="Password"></s:password>
<s:submit cssStyle="float:left;" value="Login"></s:submit>
</s:form>
</body>
</html>
loginerror.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login</title>
</head>
<body>
Sorry username or password error!
<jsp:include page="login.jsp"></jsp:include>
</body>
</html>
main.jsp中
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>My Page</title>
</head>
<body>
<h2>Welcome!</h2>
</body>
</html>
在struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD
Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="loginprocess" class="com.login.struts2.LoginTest">
<result name="success">main.jsp</result>
<result name="error">loginerror.jsp</result>
</action>
</package>
</struts>
LoginDao.java
package com.login.struts2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class LoginDao {
public static boolean validate(String username, String password){
boolean status=false;
Connection conn = null;
try
{
String URL = "jdbc:mysql://localhost:3306/struts_register2";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(URL, "root", "1235");
PreparedStatement ps=conn.prepareStatement("select * from test where username=? AND password=?");
ps.setString(1,username);
ps.setString(2,password);
ResultSet rs = ps.executeQuery();
status = rs.next();
}
catch(Exception e){e.printStackTrace();}
return status;
}
}
LoginTest.java
package com.login.struts2;
public class LoginTest {
private String username,password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpass() {
return password;
}
public void setUserpass(String password) {
this.password = password;
}
public String execute(){
if(LoginDao.validate(username, password)){
return "success";
}
else{
return "error";
}
}
}
web.xml中
<?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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
如果我尝试通过使用OR
而不是AND
来更改LoginDao.java
的查询,它会将我重定向到main.jsp
。 我找不到解决方案。我的数据库包含带有"test" (VARCHAR(10)
用户名和密码的"test" (VARCHAR(10)
的字段。
密码的输入字段具有名称password
。
<s:password name="password" label="Password"></s:password>
然后,setter的名称应相同。
public void setPassword(String password) {
this.password = password;
}
这样,将填充参数,并且您将没有null
值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.