【发布时间】:2015-07-08 18:42:56
【问题描述】:
我正在学习将我的 servlet 连接到数据库。我的数据库中有两列(用户名,密码)。我想创建一个访问数据库的程序,将用户/密码(通过用户表单 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> 标签显示在浏览器上。
【问题讨论】:
-
不要丢弃所有异常 (
}catch(ClassNotFoundException|IOException|ServletException f){}),而是确保它们出现在您的日志文件中,例如与f.printStackTrace()。然后看看你的服务器看看是否发生了异常。 -
与您的问题无关,请考虑1./确保所有打开的jdbc连接都已关闭(连接泄漏); 2./使用try-with-resources; 3./通过命名资源使用连接池(需要在您的服务器上进行一些设置); 4./局部变量的命名约定; 5./避免一概而论
-
@TimoSta 抓住了它。没有帮助,仍然没有任何显示。