一、建立数据库(数据库名:test)。
- -- ----------------------------
- -- Table structure for `person`
- -- ----------------------------
- DROP TABLE IF EXISTS `person`;
- CREATE TABLE `person` (
- `id` int(11) NOT NULL auto_increment,
- `name` varchar(30) NOT NULL,
- `age` int(11) NOT NULL,
- `money` int(11) NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- -- ----------------------------
- -- Records of person
- -- ----------------------------
- INSERT INTO `person` VALUES ('1', 'sun', '20', '10000');
- INSERT INTO `person` VALUES ('2', 'kiler', '15', '20000');
- INSERT INTO `person` VALUES ('4', 'qq', '23', '1122');
- INSERT INTO `person` VALUES ('5', 'dd', '34', '32544');
- INSERT INTO `person` VALUES ('6', 'hj', '14', '1250');
- INSERT INTO `person` VALUES ('7', 'wer', '21', '3213');
- -- ----------------------------
- -- Table structure for `user`
- -- ----------------------------
- DROP TABLE IF EXISTS `user`;
- CREATE TABLE `user` (
- `userID` int(11) NOT NULL auto_increment,
- `userName` varchar(20) NOT NULL,
- `password` varchar(30) NOT NULL,
- PRIMARY KEY (`userID`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- -- ----------------------------
- -- Records of user
- -- ----------------------------
- INSERT INTO `user` VALUES ('1', 'admin', 'admin');
二、项目结构如图:
三、DAO层
1.新建实体类,我这里涉及到两张表:user和person。
User.java
- package com.login.vo;
- public class User {
- private Integer id;
- private String userName;
- private String password;
- /**set,get方法略**/
- }
- package com.login.vo;
- public class Person {
- private Integer id;
- private String name;
- private Integer age;
- private Integer money;
- /**set,get方法略**/
- }
UserDao.java
- package com.login.dao;
- public interface UserDao {
- public String queryPassword(String userName) throws Exception;
- }
- package com.login.dao;
- import java.util.List;
- import com.login.vo.Person;
- public interface PersonDao {
- public void addPerson(Person person) throws Exception;
- public void deletePerson(Integer id) throws Exception;
- public void updatePerson(Person person) throws Exception;
- public Person queryPerson(Integer id) throws Exception;
- public List<Person> queryPersonList(Person condition) throws Exception;
- }
UserDaoImpl.java
- package com.login.dao.impl;
- import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
- import com.login.dao.UserDao;
- public class UserDaoImpl extends SqlMapClientDaoSupport implements UserDao {
- public String queryPassword(String userName) throws Exception {
- return (String) this.getSqlMapClientTemplate().queryForObject("queryPassword", userName);
- }
- }
- package com.login.dao.impl;
- import java.util.List;
- import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
- import com.login.dao.PersonDao;
- import com.login.vo.Person;
- public class PersonDaoImpl extends SqlMapClientDaoSupport implements
- PersonDao {
- public void addPerson(Person person) throws Exception {
- // TODO Auto-generated method stub
- this.getSqlMapClientTemplate().insert("addPerson", person);
- }
- public void deletePerson(Integer id) throws Exception {
- // TODO Auto-generated method stub
- this.getSqlMapClientTemplate().delete("deletePerson", id);
- }
- public Person queryPerson(Integer id) throws Exception {
- // TODO Auto-generated method stub
- return (Person) this.getSqlMapClientTemplate().queryForObject("queryPerson", id);
- }
- @SuppressWarnings("unchecked")
- public List<Person> queryPersonList(Person condition) throws Exception {
- // TODO Auto-generated method stub
- return this.getSqlMapClientTemplate().queryForList("queryPersonList", condition);
- }
- public void updatePerson(Person person) throws Exception {
- // TODO Auto-generated method stub
- this.getSqlMapClientTemplate().update("updatePerson", person);
- }
- }
sqlMapConfig.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sqlMapConfig
- PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
- "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
- <sqlMapConfig>
- <sqlMap resource="com/login/ibatis/User.xml"/>
- <sqlMap resource="com/login/ibatis/Person.xml"/>
- </sqlMapConfig>
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sqlMap
- PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
- "http://ibatis.apache.org/dtd/sql-map-2.dtd">
- <sqlMap>
- <typeAlias alias="user" type="com.login.vo.User"/>
- <select id="queryPassword" parameterClass="java.lang.String" resultClass="String">
- SELECT password FROM user WHERE userName = #userName#
- </select>
- </sqlMap>
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sqlMap
- PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
- "http://ibatis.apache.org/dtd/sql-map-2.dtd">
- <sqlMap>
- <typeAlias alias="person" type="com.login.vo.Person"/>
- <insert id="addPerson" parameterClass="person">
- INSERT INTO person(name, age, money)
- VALUES(#name#, #age#, #money#)
- </insert>
- <delete id="deletePerson" parameterClass="java.lang.Integer">
- DELETE FROM person
- WHERE id = #id#
- </delete>
- <update id="updatePerson" parameterClass="person">
- UPDATE person
- SET name = #name#, age = #age#, money = #money#
- WHERE id = #id#
- </update>
- <select id="queryPerson" parameterClass="java.lang.Integer" resultClass="person">
- SELECT * FROM person
- WHERE id = #id#
- </select>
- <select id="queryPersonList" parameterClass="person" resultClass="person">
- SELECT * FROM person
- <dynamic prepend=" WHERE ">
- <isNotEmpty prepend=" AND " property="name">name REGEXP #name#</isNotEmpty>
- <isNotEmpty prepend=" AND " property="age">age REGEXP #age#</isNotEmpty>
- <isNotEmpty prepend=" AND " property="money">money REGEXP #money#</isNotEmpty>
- </dynamic>
- ORDER BY money DESC
- </select>
- </sqlMap>
四、SERVICE层
1.新建service类
LoginService.java
- package com.login.service;
- import com.login.vo.User;
- public interface LoginService {
- public boolean login(User user) throws Exception;
- }
- package com.login.service;
- import java.util.List;
- import com.login.vo.Person;
- public interface PersonService {
- public void addPerson(Person person) throws Exception;
- public void deletePerson(Integer id) throws Exception;
- public void updatePerson(Person person) throws Exception;
- public Person queryPerson(Integer id) throws Exception;
- public List<Person> queryPersonList(Person condition) throws Exception;
- }
- package com.login.service.impl;
- import com.login.dao.UserDao;
- import com.login.service.LoginService;
- import com.login.vo.User;
- public class LoginServiceImpl implements LoginService {
- private UserDao userDao;
- public boolean login(User user) throws Exception {
- String password = userDao.queryPassword(user.getUserName());
- if(user.getPassword().equals(password)) {
- return true;
- }
- return false;
- }
- /**userDao set,get方法略**/
- }
- import java.util.List;
- import com.login.dao.PersonDao;
- import com.login.service.PersonService;
- import com.login.vo.Person;
- public class PersonServiceImpl implements PersonService {
- private PersonDao personDao;
- public void addPerson(Person person) throws Exception {
- // TODO Auto-generated method stub
- personDao.addPerson(person);
- }
- public void deletePerson(Integer id) throws Exception {
- // TODO Auto-generated method stub
- personDao.deletePerson(id);
- }
- public Person queryPerson(Integer id) throws Exception {
- // TODO Auto-generated method stub
- return personDao.queryPerson(id);
- }
- public List<Person> queryPersonList(Person condition) throws Exception {
- // TODO Auto-generated method stub
- return personDao.queryPersonList(condition);
- }
- public void updatePerson(Person person) throws Exception {
- // TODO Auto-generated method stub
- personDao.updatePerson(person);
- }
- /**personDao set,get方法略**/
- }
applicationContent-comm.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName">
- <value>com.mysql.jdbc.Driver</value>
- </property>
- <property name="url">
- <value>jdbc:mysql://127.0.0.1:3306/test</value>
- </property>
- <property name="username">
- <value>root</value>
- </property>
- <property name="password">
- <value>root</value>
- </property>
- </bean>
- <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
- <property name="dataSource">
- <ref bean="dataSource"/>
- </property>
- <property name="configLocations">
- <value>/WEB-INF/classes/sqlMapConfig.xml</value>
- </property>
- </bean>
- </beans>
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
- <bean id="userDao" class="com.login.dao.impl.UserDaoImpl">
- <property name="sqlMapClient">
- <ref bean="sqlMapClient"/>
- </property>
- </bean>
- <bean id="personDao" class="com.login.dao.impl.PersonDaoImpl">
- <property name="sqlMapClient">
- <ref bean="sqlMapClient"/>
- </property>
- </bean>
- </beans>
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
- <bean id="loginService" class="com.login.service.impl.LoginServiceImpl">
- <property name="userDao">
- <ref bean="userDao"/>
- </property>
- </bean>
- <bean id="personService" class="com.login.service.impl.PersonServiceImpl">
- <property name="personDao">
- <ref bean="personDao"/>
- </property>
- </bean>
- </beans>
1.新建action类
LoginAction.java,登录之后user里的值会一直保存下来,所以需要在退出的时候加上“user = null”。按书上说法action跳转后值应该会被清空了,可是它还保存着,我也不知道为什么,如果那么大哥知道可以告诉下我,谢谢。
- package com.login.action;
- import java.util.Map;
- import com.login.service.LoginService;
- import com.login.vo.User;
- import com.opensymphony.xwork2.ActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- public class LoginAction extends ActionSupport {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private LoginService loginService;
- private User user;
- @Override
- public String execute() {
- try {
- if(null == user) {
- return INPUT;
- }
- boolean isLogin = loginService.login(user);
- //登录成功,将状态记入session
- if(isLogin) {
- Map<String, Object> session = ActionContext.getContext().getSession();
- session.put("login_user", user.getUserName());
- return SUCCESS;
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return ERROR;
- }
- public String logOut() {
- Map<String, Object> session = ActionContext.getContext().getSession();
- session.remove("login_user");
- user = null;
- return SUCCESS;
- }
- /**loginService和user set,get方法略**/
- }
- package com.login.action;
- import java.util.List;
- import com.login.service.PersonService;
- import com.login.vo.Person;
- import com.opensymphony.xwork2.ActionSupport;
- public class PersonAction extends ActionSupport {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private PersonService personService;
- private Person person;
- //查询条件
- private Person condition;
- private List<Person> list;
- private Integer id;
- public String query() {
- // TODO Auto-generated method stub
- try {
- list = personService.queryPersonList(condition);
- return SUCCESS;
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- return ERROR;
- }
- public String toAdd() {
- return "toAdd";
- }
- public String add() {
- try {
- personService.addPerson(person);
- return "add";
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- return ERROR;
- }
- public String delete() {
- try {
- personService.deletePerson(id);
- return "delete";
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- return ERROR;
- }
- public String toUpdate() {
- try {
- person = personService.queryPerson(id);
- return "toUpdate";
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- return ERROR;
- }
- public String update() {
- try {
- personService.updatePerson(person);
- return "update";
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- return ERROR;
- }
- /**personService、person、condition、id和list set,get方法略**/
- }
- package com.login.intecept;
- import java.util.Map;
- import com.opensymphony.xwork2.Action;
- import com.opensymphony.xwork2.ActionContext;
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
- public class AuthrityInterceptor extends AbstractInterceptor {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- @Override
- public String intercept(ActionInvocation invocation) throws Exception {
- // TODO Auto-generated method stub
- Map<String, Object> session = ActionContext.getContext().getSession();
- String isLogin = (String) session.get("login_user");
- if(null != isLogin) {
- return invocation.invoke();
- }
- return Action.LOGIN;
- }
- }
- <?xml version="1.0" encoding="UTF-8"?>
- <beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
- <bean id="loginAction" class="com.login.action.LoginAction">
- <property name="loginService">
- <ref bean="loginService"/>
- </property>
- </bean>
- <bean id="personAction" class="com.login.action.PersonAction">
- <property name="personService">
- <ref bean="personService"/>
- </property>
- </bean>
- </beans>
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <include file="struts-default.xml"/>
- <constant name="struts.objectFactory" value="spring" />
- <package name="default" extends="struts-default">
- <!-- 配置拦截器 -->
- <interceptors>
- <interceptor name="authrity" class="com.login.intecept.AuthrityInterceptor" />
- <!-- 自定义拦截器 -->
- <interceptor-stack name="myInterceptor">
- <interceptor-ref name="defaultStack" />
- <interceptor-ref name="authrity" />
- </interceptor-stack>
- </interceptors>
- <!-- 设置默认拦截器 -->
- <default-interceptor-ref name="myInterceptor" />
- <!-- 设置全局的返回结果 -->
- <global-results>
- <result name="login" type="redirectAction">login</result>
- <result name="error">/error.jsp</result>
- </global-results>
- <action name="login" class="loginAction">
- <result name="success" type="redirectAction">queryPerson</result>
- <result name="input">/login.jsp</result>
- <interceptor-ref name="defaultStack" />
- </action>
- <action name="logOut" class="loginAction" method="logOut">
- <result name="success">/login.jsp</result>
- <interceptor-ref name="defaultStack" />
- </action>
- <action name="*Person" class="personAction" method="{1}">
- <result name="success">/person/personList.jsp</result>
- <result name="add" type="redirectAction">queryPerson</result>
- <result name="delete" type="redirectAction">queryPerson</result>
- <result name="update" type="redirectAction">queryPerson</result>
- <result name="toAdd">/person/personAdd.jsp</result>
- <result name="toUpdate">/person/personUpdate.jsp</result>
- </action>
- </package>
- </struts>
六、配置web.xml。里边引用到的类,必须和你所有到的jar包对应。
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <display-name>myweb</display-name>
- <!-- 设置spring 监听器及需加载的spring配置文件 -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- /WEB-INF/classes/applicationContent-*.xml, classpath:applicationContent-*.xml
- </param-value>
- </context-param>
- <!-- 设置struts拦截器 -->
- <filter>
- <filter-name>struts</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <!-- 欢迎页面 -->
- <welcome-file-list>
- <welcome-file>login.jsp</welcome-file>
- </welcome-file-list>
- </web-app>