最近用Spring+Hibernate+Struts2(SSH2)做项目
- Action:存在Struts2的Action处理类;
- Dao:一些与数据库打交道的接口;
- Dao.Impl:Dao的实现类;
- Service:Action依赖其调用Dao;
- Service.Impl:Service的实现类;
- Validation:用于验证。
现在弄用户注册:
Action.UserAction.java
package Action; import java.io.PrintWriter; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import Bean.UserBean; import Service.UserService; import Validation.Validator; import com.google.gson.Gson; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class UserAction extends ActionSupport implements ModelDriven<UserBean> { @Resource private UserService service; private UserBean user = new UserBean(); private String validateCode = "";//接收用户从浏览器传过来的验证码 @Override public UserBean getModel() { return user; } public String regUser() throws Exception { if(Validator.validateCode(validateCode)) {//验证码正确 if(!Validator.userIsExist(user.getUsername())) {//用户不存在 service.saveUser(user); return null; } message = "该用户已存在"; }else { message = "验证码错误"; } Gson gson = new Gson(); message = gson.toJson(message); HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("text/json; charset=utf-8"); response.setHeader("cache-control", "no-cache"); PrintWriter out = response.getWriter(); out.write(message); out.flush(); out.close(); return null; } }
Dao.Impl.UserDaoImpl.java
package Dao.Impl; import java.util.List; import javax.annotation.Resource; import org.hibernate.SessionFactory; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import Bean.UserBean; import Dao.UserDao; @Transactional @Repository("userDao") public class UserDaoImpl implements UserDao { @Resource private SessionFactory session; @Override public boolean userIsExist(String username) { UserBean user = (UserBean)session.getCurrentSession().createQuery("from UserBean where username=?").setParameter(0, username).uniqueResult(); if(null != user) {//用户存在 return true; } return false; } }
Service.Impl.UserServiceImpl.javapackage Service.Impl; import javax.annotation.Resource; import org.springframework.stereotype.Service; import Dao.UserDao; import Service.UserService; @Service("userService") public class UserServiceImpl implements UserService { @Resource private UserDao userDao; @Override public boolean userIsExist(String username) { return userDao.userIsExist(username); } }
Validation.Validator.javapackage Validation; import java.util.Map; import Service.UserService; import Service.Impl.UserServiceImpl; import com.opensymphony.xwork2.ActionContext; public class Validator { public static boolean validateCode(String validateCode) { Map<String, Object> session = ActionContext.getContext().getSession(); if(validateCode.toLowerCase().equals(session.get("randomImg"))) { return true; } return false; } //验证用户名是否存在 public static boolean userIsExist(String username) { UserService userService = new UserServiceImpl(); if(userService.userIsExist(username)) {//用户存在 return true; } return false; } }
1、我用浏览器测试了一下,发现在 Dao.Impl.UserDaoImpl.java中的 SessionFactory注入不进去,报空指针错误。
2、然后我测试了一下Dao.Impl.UserDaoImpl.java中的其他方法,发现SessionFactory没有问题;那么说通过Struts使用是没有问题的。
3、然后我又不试图直接通过service调用userIsExist(String username)验证,跳过Validator.java,发现SessionFactory竟然注入成功!
那么说明在Validation.Validator.java这里卡住了,那我只能通过第三步去实现了。
SSH2注入SessionFactory 空指针
最新推荐文章于 2018-10-08 09:36:18 发布