思考这么一个问题:
Logger log = Logger.getLogger(UserDaoImpl1.class);
InputStream is = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
每次前端每次发送查询请求的时候,都需要执行上面的代码,但是该代码段,并没有重复执行的必要(session对象不变)
在开发OppenSessionInView中出现了一个错误:
web.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>OpenSessionInView</filter-name>
<filter-class>com.liubo.web.filter.OpenSessionInView</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInView</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>TestAction</servlet-name>
<servlet-class>com.liubo.web.action.TestAction</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestAction</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
过滤器:
package com.liubo.web.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import com.liubo.web.utils.SessionManager;
public class OpenSessionInView implements Filter {
@Override
public void init(FilterConfig filterconfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException {
System.out.println("你进入了过滤器");
String message = SessionManager.createSession();// 确保ThreadLocal中一定存在着对象
System.out.println(message);
filterchain.doFilter(servletrequest, servletresponse);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
Servlet:
package com.liubo.web.action;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.liubo.domain.User;
import com.liubo.service.UserService;
import com.liubo.service.impl.UserServiceImpl;
import com.liubo.web.utils.SessionManager;
public class TestAction extends HttpServlet {
private static final long serialVersionUID = 1L;
private UserService userService = new UserServiceImpl();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String name = req.getParameter("name");
String password = req.getParameter("password");
User user = new User(0,name,password);
User selUser = userService.selByNamePwd(user);
req.setAttribute("user", selUser);
req.getRequestDispatcher("result.jsp").forward(req, resp);
}
}
UserServiceImpl:
package com.liubo.service.impl;
import org.apache.ibatis.session.SqlSession;
import com.liubo.domain.User;
import com.liubo.mapper.UserMapper;
import com.liubo.service.UserService;
import com.liubo.web.utils.SessionManager;
public class UserServiceImpl implements UserService {
private SqlSession session = SessionManager.getSession();
private UserMapper um = session.getMapper(UserMapper.class);// 这里在疯狂的报空指针异常
@Override
public User selByNamePwd(User user) {
return um.selUser(user);
}
}
最后发现,我配了Filter和Servlet要么这个不进去,要么那个不进去,烦的一比。