项目结构:
导包:
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_2_5.xsd" version="2.5">
<display-name>ssh</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 编码过滤器 解决中文编码问题 -->
<filter>
<display-name>CharacterEncodingFilter</display-name>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<description></description>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- struts配置 -->
<filter>
<display-name>StrutsPrepareAndExecuteFilter</display-name>
<filter-name>StrutsPrepareAndExecuteFilter</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>StrutsPrepareAndExecuteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/spring-*.xml</param-value>
</context-param>
</web-app>
以上配置与SSH案例(一)配置相同
实体类User:
public class User implements Serializable{
private static final long serialVersionUID = -8421782808743390486L;
private String id;
private String name;
private String password;
private String nick;
private String token;
public User() {}
User.hbm.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 将类映射到表: User类的对象存储到cn_user表中 -->
<class name="cn.tedu.note.entity.User" table="cn_user">
<!-- id用于映射主键的对应关系 类中的id属性映射到表的cn_user_id列 -->
<id name="id" column="cn_user_id"></id>
<!-- property 用于映射普通属性 -->
<property name="name" column="cn_user_name"></property>
<property name="password" column="cn_user_password"></property>
<property name="token" column="cn_user_token"></property>
<property name="nick" column="cn_user_nick"></property>
</class>
</hibernate-mapping>
Dao接口UserDao:
package cn.tedu.note.dao;
import cn.tedu.note.entity.User;
public interface UserDao {
public void addUser(User user);
public void deleteUser(User user);
public void updateUser(User user);
public User findUserById(String id);
public User findUserByName(String name);
}
Dao实现类UserDaoImpl:
package cn.tedu.note.dao;
import java.util.List;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.stereotype.Repository;
import cn.tedu.note.entity.User;
@Repository("userDao")
@Transactional
public class UserDaoImpl implements UserDao{
@Resource(name="hibernateTemplate")
private HibernateTemplate hibernateTemplate;
@Override
public void addUser(User user) {
hibernateTemplate.save(user);
}
@Override
public void deleteUser(User user) {
hibernateTemplate.delete(user);
}
@Override
public void updateUser(User user) {
hibernateTemplate.update(user);
}
@Override
public User findUserById(String id) {
return hibernateTemplate.get(User.class, id);
}
@Override
public User findUserByName(String name) {
//select * from cn_user where cn_user_name = ?
//HQL
// from User where name = ?
String hql = "from User where name = ?";
List<User> list = (List<User>) hibernateTemplate.find(hql, name);
if(list.isEmpty()){
return null;
}
return list.get(0);
}
}
Service接口UserService:
package cn.tedu.note.service;
import cn.tedu.note.entity.User;
public interface UserService {
public User login(String username, String password);
}
Service实现类UserServiceImpl:
package cn.tedu.note.service;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import org.springframework.stereotype.Service;
import cn.tedu.note.dao.UserDao;
import cn.tedu.note.entity.User;
@Service("userService")
public class UserServiceImpl implements UserService {
@Resource(name="userDao")
private UserDao userDao;
@Override
@Transactional
public User login(String username, String password) {
User user = userDao.findUserByName(username);
if(user == null){
//没有找到该用户
throw new RuntimeException("用户名错误");
}
if(user.getPassword().equals(password)){
return user;
}
throw new RuntimeException("密码错误");
}
}
控制器Action:
package cn.tedu.note.web;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import cn.tedu.note.entity.User;
import cn.tedu.note.service.UserService;
@Controller
@Scope("prototype")
public class UserAction extends JsonAction{
@Resource(name="userService")
private UserService userService;
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String login(){
try{
User user = userService.login(username, password);
System.out.println(user);
//登陆成功
setResult(user);
}catch(Exception e){
e.printStackTrace();
//登陆失败
setResult(e);
}
return SUCCESS;
}
}
公共的父类(供其他控制器调用):
package cn.tedu.note.web;
import java.util.HashMap;
import java.util.Map;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
public abstract class JsonAction extends ActionSupport implements SessionAware,RequestAware,ApplicationAware{
protected Map<String, Object> request;
protected Map<String, Object> session;
protected Map<String, Object> application;
public Map<String, Object> getRequest() {
return request;
}
public void setRequest(Map<String, Object> request) {
this.request = request;
}
public Map<String, Object> getSession() {
return session;
}
public void setSession(Map<String, Object> session) {
this.session = session;
}
public Map<String, Object> getApplication() {
return application;
}
public void setApplication(Map<String, Object> application) {
this.application = application;
}
/**
* 发送到客户端的Json结果
*/
public Map<String, Object> result = new HashMap<String, Object>();
public Map<String, Object> getResult() {
return result;
}
public void setResult(Map<String, Object> result) {
this.result = result;
}
/**
* 设置正确返回值
* @param value
*/
protected void setResult(Object value){
result.put("state", 0);
result.put("message", "");
result.put("data", value);
}
/**
* 设置错误返回值
* @param error
*/
protected void setResult(String error){
result.put("state", 1);
result.put("message", error);
result.put("data", null);
}
/**
* 设置错误返回值
* @param e
*/
protected void setResult(Throwable e){
this.setResult(e.getMessage());
}
}
conf里面的配置文件基本与SSH案例(一)相同,其中spring-service.xml里面和spring-web.xml里面主要是开始组件扫描
<context:component-scan base-package="cn.tedu.note.service"/>
<context:component-scan base-package="cn.tedu.note.web"/>
struts.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="user" namespace="/user" extends="json-default">
<action name="login" class="userAction" method="login">
<result type="json" name="success">
<param name="root">result</param>
</result>
</action>
</package>
</struts>
1.浏览器中输入:http://localhost:8000/ssh/user/login?username=Robin&password=123
(登录成功)页面显示返回的JSON字符串:
{"data":{"id":"200","name":"Robin","nick":"","password":"123","token":""},"state":0,"message":""}
2.浏览器中输入:http://localhost:8000/ssh/user/login?username=Robinww&password=123
(登录失败 用户名错误)页面显示返回的JSON字符串:
{"data":null,"state":1,"message":"用户名错误"}
3.浏览器中输入:http://localhost:8000/ssh/user/login?username=Robin&password=12355
(登录失败 密码错误)页面显示返回的JSON字符串:
{"data":null,"state":1,"message":"密码错误"}
以上是利用SSH简单的一个登录