上篇主要说的是在springMVC构建WEB工程时的一些配置,现在来说说其他部分。
controller
以登录为例如下:
@Controller
public class LoginController {
private LoginService loginService;
@Resource
public void setLoginService(LoginService loginService) {
this.loginService = loginService;
}
@RequestMapping("login.do")
public ModelAndView login(String username, String password,
HttpSession session, HttpServletResponse response) {
HashMap resultMap = new HashMap();
HashMap result = loginService.checkLogin(username, password);
if ("true".equals(result.get("code"))) {
session.setAttribute("user", result.get("user"));
resultMap.put("code", "true");
resultMap.put("username", username);
resultMap.put("password", password);
return new ModelAndView("admin-index", resultMap);
} else {
resultMap.put("code", "false");
return new ModelAndView("index", resultMap);
}
}
}
@Controller: 表示该类是一个controller,也就是action组件, spring不要求我们继承任何controller相关的基类或者引用相关的servlet API。为了使这些声明生效,我们需要在配置文件中添加下面的一行:
<context:component-scan base-package="com.my.xx"/>
@Resource: 用于注入,默认按名称装配,表示将loginService注入到该类中
@RequestMapping:请求映射,表示将login.do为结尾的请求映射到该方法处理
这里面还有一个很常见的@ResponseBody注解,它表示将内容或者对象作为HTTP响应正文返回,并调用适合的HttpMessageConverter的Adapter转换对象,写入输出流。按照上节的配置,会将内容或者对象转换成JSON返回
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
Service
在上面,我们注入了loginService,loginService是接口的一个实例
public interface LoginService {
public HashMap checkLogin(String username, String password);
}
@Service
public class LoginServiceImpl implements LoginService {
private LoginDao loginDao;
@Resource
public void setLoginDao(LoginDao loginDao){
this.loginDao = loginDao;
}
@Transactional
public HashMap checkLogin(String username, String password){
HashMap result = loginDao.checkLogin(username, password);
return result;
}
}
@Service: 表示service组件
@Transactional: 用于事务管理
Dao
在service中,我们注入了loginDao
public interface LoginDao {
public HashMap checkLogin(String username, String password);
}
@Repository
public class LoginDaoImpl implements LoginDao {
private SessionFactory sessionFactory;
@Resource
public void setSessionFactory(SessionFactory sessionFactory){
this.sessionFactory = sessionFactory;
}
public HashMap checkLogin(String username, String password){
HashMap resultMap = new HashMap();
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("from User where username = ? and password = ?");
query.setParameter(0, username);
query.setParameter(1, password);
List<User> users = query.list();
if(users.size() > 0){
resultMap.put("code", "true");
resultMap.put("user", users.get(0));
}else{
resultMap.put("code", "false");
}
return resultMap;
}
}
@Repository: 声明一个Dao组件