写这个小东西出现很多错误,像 spring的listener error struts2 的Error filterStart 还有找不到jar包的null pointer等问题,我用了一个比较省事的办法解决的了这些问题,把有用的jar包直接放到tomcat/common/lib目录下面,应该不用全部放进去,后面可以稍微研究一下
。我用的包主要有下面这些:
先建几个包,对应的类和配置文件分别是:
vo:User.java,Person.hbm.xml
action:LoginAction.java
dao:IBaseDAO.java,IUserDAO.java
dao.impl:BaseDAO.java,UserDAOImpl.java
dao:IUserService.java
dao.impl:UserServiceImpl.java
数据库我用mysql5
CREATE TABLE `user` ( `id` int(11) NOT NULL, `name` varchar(40) default NULL, `password` varchar(40) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
准备就绪了,开写代码,User.java
- package vo;
- public class User {
- private Integer id;
- private String name;
- private String password;
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
Person.hbm.xml
- <?xml version="1.0" encoding="utf-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <!--
- Mapping file autogenerated by MyEclipse - Hibernate Tools
- -->
- <hibernate-mapping>
- <class name="vo.User" table="user" catalog="ker">
- <id name="id" type="java.lang.Integer">
- <column name="id" />
- <generator class="native" />
- </id>
- <property name="name" type="java.lang.String">
- <column name="name" length="20" />
- </property>
- <property name="password" type="java.lang.String">
- <column name="password" length="20" />
- </property>
- </class>
- </hibernate-mapping>
LoginAction.java
- package action;
- import java.util.Collection;
- import java.util.List;
- import service.IUserService;
- import vo.User;
- import com.opensymphony.xwork2.Action;
- public class LoginAction implements Action {
- private User user;
- private IUserService userService;
- protected Collection availableItems;
- public void setUserService(IUserService userService) {
- this.userService = userService;
- }
- public String execute() throws Exception {
- String retVal = ERROR;
- boolean isLogin = userService.isLogin(user);
- if (isLogin)
- retVal = SUCCESS;
- return retVal;
- }
- public String findAll() throws Exception {
- List<User> list = userService.findAll();
- if (list.size() > 0) {
- availableItems = list;
- System.out.println("list "+list.size());
- return SUCCESS;
- }
- return ERROR;
- }
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
- public Collection getAvailableItems() {
- return availableItems;
- }
- public void setAvailableItems(Collection availableItems) {
- this.availableItems = availableItems;
- }
- }
IBaseDAO.java
- package dao;
- import org.hibernate.Session;
- public interface IBaseDAO {
- public Session getSession();
- }
UserDAO.java
- package dao;
- import java.util.List;
- import vo.User;
- public interface UserDAO {
- public User find(String name, String password);
- public List<User> findAll();
- public boolean save();
- public boolean delete();
- }
BaseDAO.java
- package dao.impl;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import dao.IBaseDAO;
- public class BaseDAO implements IBaseDAO {
- private SessionFactory sessionFactory;
- public SessionFactory getSessionFactory() {
- return sessionFactory;
- }
- public void setSessionFactory(SessionFactory sessionFactory) {
- this.sessionFactory = sessionFactory;
- }
- public Session getSession() {
- return sessionFactory.openSession();
- }
- }
UserDAOImpl.java
- package dao.impl;
- import java.util.List;
- import org.hibernate.Query;
- import org.hibernate.Session;
- import org.hibernate.Transaction;
- import vo.User;
- import dao.UserDAO;
- public class UserDAOImpl extends BaseDAO implements UserDAO {
- public User find(String name, String password) {
- Session session = getSession();
- //Transaction tran = session.beginTransaction();
- String sql = "FROM User AS u WHERE u.name = ? AND u.password = ?";
- Query q = session.createQuery(sql);
- q.setString(0, name);
- q.setString(1, password);
- List<User> list = q.list();
- //tran.commit();
- session.close();
- if (list.size() == 0)
- return null;
- else
- return list.get(0);
- }
- public List<User> findAll(){
- Session session = getSession();
- Query q = session.createQuery(" from User");
- List<User> list = q.list();
- return list;
- }
- public boolean save(){
- return true;
- }
- public boolean delete(){
- return true;
- }
- }
IUserService.java
- package service;
- import java.util.List;
- import vo.User;
- public interface IUserService {
- public boolean isLogin(User user);
- public boolean isLogin(String name, String password);
- public List<User> findAll();
- public boolean save();
- public boolean delete();
- }
UserServiceImpl.java
- package service.impl;
- import java.util.List;
- import dao.UserDAO;
- import service.IUserService;
- import vo.User;
- public class UserServiceImpl implements IUserService {
- private UserDAO userDAO;
- public void setuserDAO(UserDAO userDAO) {
- this.userDAO = userDAO;
- }
- public boolean isLogin(User user) {
- boolean isLogin = false;
- try {
- User u = userDAO.find(user.getName(), user.getPassword());
- if (u != null) {
- isLogin = true;
- }
- } catch (Exception e) {
- System.out.println("isLogin error " + e.getMessage());
- }
- return isLogin;
- }
- public boolean isLogin(String name, String password) {
- boolean isLogin = false;
- try {
- User u = userDAO.find(name, password);
- if (u != null) {
- isLogin = true;
- }
- } catch (Exception e) {
- System.out.println("isLogin error " + e.getMessage());
- }
- return isLogin;
- }
- public List<User> findAll() {
- return userDAO.findAll();
- }
- public boolean save(){
- return true;
- }
- public boolean delete(){
- return true;
- }
- }
WEB-INF/web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.4"
- xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
- </filter>
- <!-- FilterDispatcher 用来初始化 strtus2 并且处理所有的 web 请求 -->
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- </web-app>
ApplicationContext.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:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
- <import resource="classes/ApplicationBeans.xml" />
- <bean id="loginAction" class="action.LoginAction" scope="prototype">
- <property name="userService" ref="userService" />
- </bean>
- </beans>
classes/struts.xml
- <?xml version="1.0" encoding="GBK"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <package name="login" extends="struts-default">
- <action name="Login" class="loginAction">
- <result name="success" type="redirect">/Show.action</result>
- <result name="error">/login/error.jsp</result>
- </action>
- <action name="Show" class="loginAction" method="findAll">
- <result name="success">/login/success.jsp</result>
- <result name="error">/login/error.jsp</result>
- </action>
- </package>
- </struts>
classes/ApplicationBeans.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:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
- <!-- dataSource config -->
- <bean id="configBean"
- class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="location"
- value="/WEB-INF/classes/dataSource.properties" />
- </bean>
- <bean id="dataSource"
- class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <!--
- <property name="driverClassName" value="com.mysql.jdbc.Driver" />
- <property name="url" value="jdbc:mysql://localhost:3306/yufei" />
- <property name="username" value="root" />
- <property name="password" value="yufei101" />
- -->
- <property name="driverClassName"
- value="${dataSource.driverClassName}" />
- <property name="url" value="${dataSource.url}" />
- <property name="username" value="${dataSource.username}" />
- <property name="password" value="${dataSource.password}" />
- </bean>
- <!-- SessionFactory -->
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource" ref="dataSource" />
- <property name="mappingResources">
- <list>
- <value>vo/Person.hbm.xml</value>
- </list>
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- org.hibernate.dialect.MySQLDialect
- </prop>
- <prop key="show_sql">true</prop>
- </props>
- </property>
- </bean>
- <!-- dao -->
- <bean id="baseDAO" class="dao.impl.BaseDAO">
- <property name="sessionFactory">
- <ref bean="sessionFactory" />
- </property>
- </bean>
- <bean id="userDAO" class="dao.impl.UserDAOImpl"
- parent="baseDAO">
- </bean>
- <!-- service -->
- <bean id="userService" class="service.impl.UserServiceImpl">
- <property name="userDAO" ref="userDAO" />
- </bean>
- <!-- view -->
- <bean id="loginAction" class="action.loginAction" >
- <property name="userService">
- <ref bean="userService"/>
- </property>
- </bean>
- </beans>
struts.properties
- struts.objectFactory = spring
- logj.properties
- ### direct log messages to stdout ###
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.Target=System.out
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
- ### direct messages to file hibernate.log ###
- #log4j.appender.file=org.apache.log4j.FileAppender
- #log4j.appender.file.File=hibernate.log
- #log4j.appender.file.layout=org.apache.log4j.PatternLayout
- #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
- ### set log levels - for more verbose logging change ''info'' to ''debug'' ###
- log4j.rootLogger=warn, stdout
- log4j.logger.org.hibernate=info
- #log4j.logger.org.hibernate=debug
- ### log HQL query parser activity
- #log4j.logger.org.hibernate.hql.ast.AST=debug
- ### log just the SQL
- #log4j.logger.org.hibernate.SQL=debug
- ### log JDBC bind parameters ###
- log4j.logger.org.hibernate.type=info
- #log4j.logger.org.hibernate.type=debug
- ### log schema export/update ###
- log4j.logger.org.hibernate.tool.hbm2ddl=debug
- ### log HQL parse trees
- #log4j.logger.org.hibernate.hql=debug
- ### log cache activity ###
- #log4j.logger.org.hibernate.cache=debug
- ### log transaction activity
- #log4j.logger.org.hibernate.transaction=debug
- ### log JDBC resource acquisition
- #log4j.logger.org.hibernate.jdbc=debug
- ### enable the following line if you want to track down connection ###
- ### leakages when using DriverManagerConnectionProvider ###
- #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
dataSource.properties
插入代码的插件忽然不好用了,好在剩下不多了,直接贴上了
- dataSource.driverClassName=org.gjt.mm.mysql.Driver
- dataSource.url=jdbc:mysql://localhost:3306/ker
- dataSource.username=root
- dataSource.password=root
页面:erro.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>登录失败</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- 登录失败
- </body>
- </html>
login.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
- <%@taglib prefix="s" uri="/struts-tags"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>用户登录</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <s:form action="Login.action" name="login">
- <s:textfield name="user.name" label="用户名" value="wf"></s:textfield>
- <s:textfield name="user.password" label="密 码" value="wife"></s:textfield>
- <s:submit value="登录"></s:submit>
- </s:form>
- </body>
- </html>
success.jsp ,对此页面,如果是前面的步骤操作的话,一步不改动的话,删除下面代码中的这两行记录
- 34.行 <td align="center"><a href="update.action?user.id=<s:property value='id' />&action=loading" >update</a></td>
- 35.行 <td align="center"><a href="delete.action?user.id=<s:property value='id' />" >delete</a></td>
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <%@ taglib uri="/struts-tags" prefix="s" %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>登录成功</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <p></p>
- <table border="1" width="50%" align="center">
- <tr bgcolor="#cccc00">
- <td align="center">UserId</td>
- <td align="center">UserName</td>
- <td align="center">Password</td>
- <td colspan="2" align="center">Options</td>
- </tr>
- <s:iterator value="availableItems">
- <tr>
- <td align="center"><s:property value="id" /></td>
- <td align="center"><s:property value="name" /></td>
- <td align="center"><s:property value="password" /></td>
- <td align="center"><a href="update.action?user.id=<s:property value='id' />&action=loading" >update</a></td>
- <td align="center"><a href="delete.action?user.id=<s:property value='id' />" >delete</a></td>
- </tr>
- </s:iterator>
- </table>
- </body>
- </html>