我正在学习将servlet连接到数据库。我的数据库中有两列(用户名,密码)。我想创建一个访问数据库的程序,将User / Pass(通过用户表单html发送)与db列中的值进行比较。当我尝试登录时,屏幕上没有任何内容。
文件:
LoginServlet.java
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.sql.*;
public class LoginServlet extends HttpServlet{
public void init(){}
Connection con;
Statement st;
ResultSet rs;
public void service(HttpServletRequest req, HttpServletResponse res){
try{
res.setContentType("text/html");
PrintWriter out=res.getWriter();
out.println("<html><body>");
out.println("<p>Servlet is loading</p>");
String TheUser=req.getParameter("username");
String ThePass=req.getParameter("password");
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","pass");
st=con.createStatement();
rs=st.executeQuery("select Username,Password from AllUsers");
String compareUser=rs.getString(1);
String comparePass=rs.getString(2);
if(TheUser.equals(compareUser)||ThePass.equals(comparePass)){
out.println("<p>You are logged in as " + compareUser+" </p>");
}
else
out.println("Wrong Combination");
}
}catch(Exception e){}
}catch(ClassNotFoundException|IOException|ServletException f){
f.printStackTrace();
}
out.println("</html></body>");
out.close();
}
public void destroy(){}
}
此文件编译并部署。
的web.xml:
<web-app>
<servlet>
<servlet-name>SignUpServlet</servlet-name>
<servlet-class>SignUpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SignUpServlet</servlet-name>
<url-pattern>/SignUp</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>
log.html:
<html>
<body>
<form name='loginForm' method='post' action='login'>
Enter Username:
<input type='text' name='username'>
</br>
Enter Password:
<input type='password' name='password'>
</br>
<input type="submit" value="Submit">
</form>
</body>
</html>
P.S:正在加载Servlet。 <p>Servlet is loading </p>
标记显示在浏览器上。
答案 0 :(得分:0)
好的,所以我做到了。经过几个小时的努力尝试。我发现db游标永远不会出现在表的第一个记录上,这就是为什么它没有显示出来的原因。 我把代码包装在while语句中:
rs=st.executeQuery("select Username,Password from AllUsers");
while(rs.next()){
String compareUser=rs.getString(1);
String comparePass=rs.getString(2);
if(TheUser.equals(compareUser)||ThePass.equals(comparePass)){
out.println("<p>You are logged in as " +compareUser+"</p>");
rs.close();
st.close();
con.close();
}
else{
out.println("<p>Wrong Combination</p>");
out.println("</br><a href='log.html'>Login</a></p>");
rs.close();
st.close();
con.close();
}
}
}catch(Exception e){
e.printStackTrace();
}
我希望如果有其他人遇到这个问题,这可能有所帮助。