login.jsp:
<form name="formName" method="post" action="servlet/AdminVerify">
<tr>
<td width="18%" height="30">
<div align="center">用户</div>
</td>
<td width="50%" height="30"><input name="name" type="text"></td>
<!-- 宽度规定,然后rowspan,则该列都合并,其他的行少出现一个td的使用 -->
<td width="32%" rowspan="4">
<!-- input里面可以有斜杠,也可无 --> <!-- 注意"image"类型的用法,必须有图片src参数。它相当于一个按钮,
所以可以有onClick,且注意return及分号不能少,实际上传递的false值无意义--> <input
type="image" name="imageField" src="images/dl.gif"
onClick="return check();">
</td>
</tr>
<tr>
<td height="30">
<div align="center">密码</div>
</td>
<td height="30"><input name="password" type="password"></td>
</tr>
<tr>
<td height="30">
<div align="center">权限</div>
</td>
<td height="30">
<!-- 下拉列表,文本内容会显示 --> <select name="st">
<option value="管理员">管理员</option>
<option value="客户">客户</option>
</select>
</td>
</tr>
<!-- table中的空白行和列可以有center,left,right属性的作用 -->
<tr>
<!-- 虽未空白行,但是td不能省略 -->
<td height="30"></td>
<td height="30"></td>
</tr>
</form>
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>hotel2</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>AdminVerify</servlet-name>
<servlet-class>servlet.AdminVerify</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AdminVerify</servlet-name>
<url-pattern>/servlet/AdminVerify</url-pattern>
</servlet-mapping>
</web-app>
AdminVerify.java:
package servlet;
import java.io.*;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.Service;
public class AdminVerify extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
String name = request.getParameter("name");
String password = request.getParameter("password");
String st = request.getParameter("st");
Service service=new Service();
ResultSet rs=service.getResult(name,password,st);
try {//rs出现的地方都需要try-catch
if (!rs.next()) {
out.print("<script>alert('你输入的用户不存在或密码错误,请重新登录!');window.history.go(-1);</script>");
} else {
//
//
request.getSession().setAttribute("name", request.getParameter("name"));
if (request.getParameter("st").equals("客户")) {
//st一样赋值给session
request.getSession().setAttribute("st", "客户");
} else {
//password这里不必要放入session
request.getSession().setAttribute("st", rs.getString("user_type"));
}
response.sendRedirect(request.getContextPath()+"/main.jsp");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Service.java:
package service;
import java.sql.*;
import java.util.*;
import db.DBUtil;
public class Service {
private Connection conn;
private Statement stmt;
private ResultSet rs;
private String sql;
public ResultSet getResult(String name, String password, String st) {
//这一句放到方法外面出现错误
conn=DBUtil.getConnection();
if (st.equals("客户")) {
sql = "select * from customr where customer_name=name and customer_password=password";
} else {
sql = "select * from users where user_name=name and user_password=password";
}
try {
// jsp没try不会报错,容易错误
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
} catch (Exception e) {
e.printStackTrace();
}
//
return rs;
}
}
java.lang.NullPointerException
at servlet.AdminVerify.doPost(AdminVerify.java:30)
在if(!rs,next())处
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column 'name' in 'where clause'
最好使用占位符,按照我的猜测,你这个sql语法也许有错误。
比如select * from customr where customer_name=name and customer_password=password;
也许sql会在你的表里寻找 customer_name、name、customer_password、password这四个字段。
说到这里可能你就明白了。先说我的解决方法吧。
1.sql = "select * from customr where customer_name="+name+" and customer_password="+password;
方法1比较简单,直接拼接就好了。
2.sql = "select * from customr where customer_name=? and customer_password=?";
方法2是占位符,需要设置。
// 这里获取链接
Connection con = JdbcUtil3.getConnection();
// 然后编译
PreparedStatement ps = con.prepareStatement(sql);
// 填充占位符
ps.setString(1, name);
ps.setString(2, password);
.....
然后执行方法。
授人以鱼不如授人以渔,
at servlet.AdminVerify.doPost(AdminVerify.java:30)
一般来说,这样报的异常不一定是在这里,但是绝对和他有关系,你就顺着这里捋...
Unknown column 'name' in 'where clause'
name这个列民有问题
这个摆明就是你自己的sql语句的错误。rs,next() 是空指针,那么说明rs对象是空指针,那么说明你没有获取的结果集。
再加上报了Unknown column 'name' in 'where clause'的错误。。那就是你的sql语句构造有问题。
1,可能你没有传进去,
2,你的列名有误。这个你要自己仔细看写你的表中的列名。。
解决方案就是:你直接把你构造出来的sql语句放到数据库中去运行(记得加好你的参数值)。看看能不能运行。
如果能运行。那你就要看看你的java程序是不是正确赋值了。。
授人以鱼不如授人以渔:以后遇到问题。要一步步的顺藤摸瓜的下去看。一步步的调试下去。看看程序每一步的具体情况是如何。这样你就可以解决问题了。。
sql语句错了,变量要加""拼进去。同意楼上,养成好习惯。用占位符,避免sql注入,select * from customr where customer_name="+name+" and customer_password="+password;