根據(jù)之前學(xué)的MVC,寫(xiě)的servlet登陸老是報(bào)空指針
錯(cuò)誤信息:
四月 26, 2016 2:15:22 下午 org.apache.catalina.core.StandardWrapperValve invoke
嚴(yán)重: Servlet.service() for servlet [LoginServlet] in context with path [/MessageBoard] threw exception
java.lang.NullPointerException
at servlet.LoginServlet.doPost(LoginServlet.java:61)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2500)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2489)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
username = lisi ?password= 123 ?params長(zhǎng)度:2
代碼如下:
1. servlet包下的
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
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.LoginService;
/**
?* Servlet implementation class LoginServlet
?*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private LoginService service;
? ? ? ?
? ? /**
? ? ?* @see HttpServlet#HttpServlet()
? ? ?*/
? ? public LoginServlet() {
? ? ? ? super();
? ? ? ? // TODO Auto-generated constructor stub
? ? }
? ??
? ? public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub?
String path = request.getContextPath(); ?
? ? ? ? request.setCharacterEncoding("UTF-8"); ?
? ? ? ? response.setContentType("text/html; charset=utf-8"); ?
? ? ? ? PrintWriter out = response.getWriter(); ??
?
String username = request.getParameter("username");
String password = request.getParameter("password");
? ? ? ?
List<String> params = new ArrayList<String>(); ?
? ? ? ? params.add(username); ?
? ? ? ? params.add(password);
? ? ? ? System.out.println("username = " +username+ " ?password= " + password +" ?params長(zhǎng)度:"+params.size());
boolean flag=service.loginUser(params);
if(flag)
{
response.sendRedirect(path+"/login_success.jsp");
out.println("成功");
}
else
{
response.sendRedirect(path+"/login_failure.jsp");
out.println("失敗");
}
}
public void init() throws ServletException {
// Put your code here
}
}
2.接口
package service;
import java.util.List;
public interface LoginService {
? ?public boolean loginUser(List<String> params);
}
3.實(shí)現(xiàn)接口
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import service.LoginService;
import util.JdbcUtils;
public class UsersDao implements LoginService{
public boolean loginUser(List<String> params){
PreparedStatement stmt = null;
ResultSet rs = null;
boolean flag = false;
? ? ? ??
//Connection conn;
try {
Connection conn = JdbcUtils.getConnection();
String sql = "select * from zoey_oper where usrname=? and password=?"; // SQL語(yǔ)句
stmt = conn.prepareStatement(sql);
int index=1;
if(params != null && !params.isEmpty())
{
for(int i=0; i<params.size(); i++){ ?
? ? ? ? ? ? ? ?stmt.setString(index++, params.get(i));?
? ? ? ? ? ? ? ?System.out.println(params.get(i));
? ? ? ? ? ?}
rs = (ResultSet) stmt.executeQuery();
if (rs.next())
? {
? ?flag = true;
? ?rs.close();
? ?stmt.close();
? }
? else?
? {
? ?flag = false ;
? ?rs.close();
? ?stmt.close();
? }
? conn.close();
? return flag;
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return flag;
}
}