我在写用户登录注册时报了500错误,并说找不到工厂值
package com.work.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
//调用SqlSessionFactory工厂方法
public class SqlSessionFactoryUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
//静态代码块会随着类的加载而自动执行,且只执行一次
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory(){
return sqlSessionFactory;
}
}
package com.work.web;
import com.work.mapper.UserMapper;
import com.work.prjo.User;
import com.work.servlet.userServlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
private userServlet servlet=new userServlet();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.接收
String username = request.getParameter("username");
String password = request.getParameter("password");
//调用sevlet查询
User user=servlet.login(username,password);
//获取字符输出流
response.setContentType("text/html;charset=utf-8");
PrintWriter writer=response.getWriter();
//3.判断user是否为null
if(user != null){
//登录成功
writer.write("登陆成功");
HttpSession session = request.getSession();
session.setAttribute("username",username);
session.setAttribute("password",password);
}else {
//登录失败
request.setAttribute("long_msg","用户名或密码错误");
request.getRequestDispatcher("/login.jsp").forward(request,response);
} //2.1获取sqlsessionFactory
//跳转
// request.getRequestDispatcher("/index.html").forward(request,response);
// response.sendRedirect("/index.html");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
}
常报告
消息 Cannot invoke "org.apache.ibatis.session.SqlSessionFactory.openSession()" because "this.factory" is null
描述 服务器遇到一个意外的情况,阻止它完成请求。
例外情况
java.lang.NullPointerException: Cannot invoke "org.apache.ibatis.session.SqlSessionFactory.openSession()" because "this.factory" is null
com.work.servlet.userServlet.login(userServlet.java:22)
com.work.web.loginServlet.doGet(loginServlet.java:30)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:668)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:777)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
//Servlet
package com.work.servlet;
import com.work.mapper.UserMapper;
import com.work.prjo.User;
import com.work.util.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
public class userServlet{
//SqlSessionFactory factory= SqlSessionFactoryUtils.getSqlSessionFactory();
/**
* 登录方法
* @return
*/
public User login(String username,String password){
//获取sqlsession
SqlSession sqlSession=factory.openSession();
//获取usermapper
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用方法
User user = mapper.select(username, password);
//释放资源
sqlSession.close();
return user;
}
}
参考下这个 http://t.csdn.cn/pALxL
我也遇到这个问题了,插个眼