2016-02-23 2 views
1

Я создал простое приложение для входа в Struts2, но я не могу войти в локальную базу данных 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> 

Если я пытаюсь изменить запрос на LoginDao.java, имея OR вместо AND, он перенаправляет меня main.jsp. Я не могу найти решение. Моя база данных имеет поля с "test" (VARCHAR(10) для имени пользователя и пароля. Есть идеи?

+0

Каков ваш ввод и что выбирает возврат? вы ввели имя пользователя и пароль, прежде чем вставлять их в stmt? – thst

+0

длина пароля должна быть достаточно большой, чтобы хранить надежные пароли. –

+0

@thst. Мой вход - это тест для полей имени пользователя и пароля в качестве единственной записи в базе данных на данный момент. http://s27.postimg.org/obgoxvd4j/testdb.png – user3590899

ответ

1

Поле ввода для пароля имеет имя password.

<s:password name="password" label="Password"></s:password> 

Тогда сеттер должен быть с тем же именем.

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

В этом случае параметр будет населен, и вы не будете иметь null значение.

+0

Работает сейчас! Благодарю. – user3590899

Смежные вопросы