项目结构
数据库使用的是sql server2008
创建表
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[sys_czy](
[czyID_i] [int] IDENTITY(1,1) NOT NULL,
[Czyxm_c] [varchar](32) NOT NULL,
[dlID_c] [varchar](16) NOT NULL,
[Dlmm_c] [varchar](32) NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'操作员标识' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'sys_czy', @level2type=N'COLUMN',@level2name=N'czyID_i'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'操作员姓名' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'sys_czy', @level2type=N'COLUMN',@level2name=N'Czyxm_c'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'登陆标识' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'sys_czy', @level2type=N'COLUMN',@level2name=N'dlID_c'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'登陆密码' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'sys_czy', @level2type=N'COLUMN',@level2name=N'Dlmm_c'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'操作员' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'sys_czy'
GO
配置文件说明
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" 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_3_0.xsd"> <display-name></display-name> <!-- 添加对spring的支持 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 添加对struts2支持 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <!-- 当hibernate+spring配合使用的时候,如果设置了lazy=true,那么在读取数据的时候,当读取了父数据后, hibernate会自动关闭session,这样,当要使用子数据的时候,系统会抛出lazyinit的错误, 这时就需要使用spring提供的 OpenSessionInViewFilter,OpenSessionInViewFilter主要是保持Session状态 知道request将全部页面发送到客户端,这样就可以解决延迟加载带来的问题 --> <filter> <filter-name>openSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>singleSession</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>openSessionInViewFilter</filter-name> <url-pattern>*.do,*.action</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <include file="struts-default.xml"/> <constant name="struts.i18n.encoding" value="UTF-8"/> <constant name="struts.action.extension" value="action"/> <constant name="struts.serve.static.browserCache" value="false"/> <package name="s2sh" namespace="/user" extends="struts-default"> <action name="login" method="login" class="loginAction"> <!--name 对应的是from表单action对应的值 method对应的是action类中的login方法也可以这样 <span style="color: rgb(94, 94, 94); font-family: Verdana, Helvetica, Arial; font-size: 13px; line-height: 18px; text-align: justify; ">method属性值为一个表达式{1},表示它的值是name属性值中第一个*的值。例如:用户请求URL为user_login.action时,将调用到UserAction类的login方法;用户请求URL为user_regist.action时,将调用到UserAction类的regist方法。class对应spring的配置文件applicationContext.xml用户注册的ACTION的id--></span> <result name="success">/success.jsp</result> <result name="error">/login.jsp</result> </action> </package> <package name="s2s4h4" namespace="/user" extends="struts-default"> <action name="register" method="register" class="registerAction"> <result name="success">/login.jsp</result> <result name="error">/register.jsp</result> </action> </package> </struts>
db.properties
db.driverClassName=com.microsoft.sqljdbc.jdbc.SQLServerDriver db.url=jdbc:sqlserver://127.0.0.1:1433;databaseName=KJDZSW db.username=sa db.password=sqlserver
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="dialect">org.hibernate.dialect.SQLServerDialect</property> <property name="jdbc.batch_size">20</property> <property name="connection.autocommit"></property> <!-- 显示sql语句 --> <property name="show_sql">true</property> <property name="connection.useUnicode">true</property> <property name="connection.characterEncoding">UTF-8</property> <!-- 缓存设置 --> <property name="cache.provider_configuration_file_resource_path">/ehcache.xml</property> <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property> <property name="cache.use_query_cache">true</property>
<span style="white-space:pre"> </span><!-- 指定hibernate映射文件路径--> <mapping resource="com/bsd/s2s4h4/entity/Sys_czy.hbm.xml"/> </session-factory> </hibernate-configuration>
类代码
loginAction类package com.bsd.s2s4h4.action; import javax.servlet.http.HttpServletRequest; import org.apache.catalina.User; import org.apache.struts2.ServletActionContext; import com.bsd.s2s4h4.entity.Sys_czy; import com.bsd.s2s4h4.service.UserService; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { /** * */ private static final long serialVersionUID = -64678345374645373L; private UserService userService; public Sys_czy user1; public String login(){ HttpServletRequest request=ServletActionContext.getRequest(); Sys_czy user=userService.findUserByUsernameAndPassword(user1.getUsername(), user1.getPassword()); if(user!=null){ request.setAttribute("username", user.getUsername()); return SUCCESS; }else{ return ERROR; } } public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } public Sys_czy getUser1() { return user1; } public void setUser1(Sys_czy user1) { this.user1 = user1; } }
package com.bsd.s2s4h4.action; import com.bsd.s2s4h4.entity.Sys_czy; import com.bsd.s2s4h4.service.UserService; import com.opensymphony.xwork2.ActionSupport; public class RegisterAction extends ActionSupport { private Sys_czy user; private UserService userService; public String register(){ try { userService.add(user); return SUCCESS; } catch (Exception e) { // TODO: handle exception e.printStackTrace(); return ERROR; } } public Sys_czy getUser() { return user; } public void setUser(Sys_czy user) { this.user = user; } public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } }
registerAction-validation.xml注册时的验证
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <validators> <!-- 添加对注册账号的验证 --> <field name="user.czyxm_c"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>姓名不能为空</message> </field-validator> <field-validator type="regex"> <param name="expression"><![CDATA[([\s]{0,})]]></param> <message>姓名输入不合法,不能字符串为空或者都是空白字符</message> </field-validator> </field> <field name="user.dlID_c"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>用户名不能为空</message> </field-validator> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{6,16})]]></param> <message>用户名输入不合法,必须为长度在6~16之间的字符</message> </field-validator> </field> <field name="user.dlmm_c"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>密码不能为空</message> </field-validator> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{6,16})]]></param> <message>密码输入不合法,必须在6到16直接长度的字符</message> </field-validator> </field> </validators>
BaseDAO类
package com.bsd.s2s4h4.dao; import java.io.Serializable; import java.util.List; /** * 通用Dao父类实现的接?口,只提供常见的一些功能,其它特殊的功能,可以在子接口中定义。 * 事务也在需要的时候加到实现类中 * * @param <T> 实体类型 */ public interface BaseDAO<T> { public T get(String hql,Object[] param); public List<T> find(String hql,Object[] param); public Serializable add(Object suser); }
BaseDaoImpl类
package com.bsd.s2s4h4.daoImpl; import java.io.Serializable; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import com.bsd.s2s4h4.dao.BaseDAO; public class BaseDAOImol<T> implements BaseDAO<T> { public SessionFactory sessionFactory; public SessionFactory getSessionFactory() { return sessionFactory; } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override public T get(String hql, Object[] param) { // TODO Auto-generated method stub List<T> list=this.find(hql,param); if(list!=null && list.size()>0){ return list.get(0); }else return null; } private Session getCurrentSession(){ return sessionFactory.getCurrentSession(); } @Override public List<T> find(String hql, Object[] param) { // TODO Auto-generated method stub Query q=this.getCurrentSession().createQuery(hql); if(param!=null && param.length>0){ for (int i = 0; i < param.length; i++) { q.setParameter(i, param[i]); } } return q.list(); } @Override public Serializable add(Object suser) { // TODO Auto-generated method stub return this.getCurrentSession().save(suser); } }
Sys_czy类
package com.bsd.s2s4h4.entity; public class Sys_czy { private Integer id; private String name; private String username; 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 getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
Sys_czy.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" > <hibernate-mapping package="com.bsd.s2s4h4.entity"> <class name="Sys_czy" table="Sys_czy" >
</pre><pre name="code" class="html"><!--name对应Sys_czy实体类定义的属性 column对应表的字段名--> <id name="id" column="czyID_i" type="java.lang.Integer"> <generator class="native"/> </id> <property name="name" column="czyxm_c" type="java.lang.String" not-null="true" length="32"/> <property name="username" column="dlID_c" type="java.lang.String" not-null="true" length="32"/> <property name="password" column="dlmm_c" type="java.lang.String" not-null="true" length="124"/> </class> </hibernate-mapping>
UserService 类
package com.bsd.s2s4h4.service; import com.bsd.s2s4h4.entity.Sys_czy; public interface UserService { public Sys_czy findUserByUsernameAndPassword(String username,String password); public void add(Object user); }
UserServiceImpl类
package com.bsd.s2s4h4.serviceImpl; import org.springframework.beans.BeanUtils; import com.bsd.s2s4h4.dao.BaseDAO; import com.bsd.s2s4h4.entity.Sys_czy; import com.bsd.s2s4h4.service.UserService; public class UserServiceImpl implements UserService { private BaseDAO<Sys_czy> baseDao; @Override public Sys_czy findUserByUsernameAndPassword(String username, String password) { // TODO Auto-generated method stub return baseDao.get(" from Sys_czy where dlID_c=? and Dlmm_c=?", new Object[] { username, password }); } public BaseDAO<Sys_czy> getBaseDao() { return baseDao; } public void setBaseDao(BaseDAO<Sys_czy> baseDao) { this.baseDao = baseDao; } @Override public void add(Object obj) { // TODO Auto-generated method stub baseDao.add(obj); } }
JSP页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; System.out.print(basePath); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <form action="${pageContext.request.contextPath}/user/login.action" method="get"><!--action使用绝对路径--> username:<input type="text" name="user1.username"><!--user1.username 封装对象loginAction可直接使用public Sys_czy user1;user1就可获得username值--> password:<input type="password" name="user1.password"> <input type="submit" value="提交"> </form> </html>
register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String path=request.getContextPath(); String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <form action="user/register.action"><!--action使用相对路径--> <table align="center"> <tr> <td>姓名:</td> <td><input type="text" name="user.name"></td> </tr> <tr> <td>用户名:</td> <td><input type="text" name="user.username"></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="user.password"></td> </tr> <tr > <td colspan="2" align="center"><input type="submit" value="提交"></td> </tr> </table> </form> </body> </html>
success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <% Object obj=request.getAttribute("username"); System.out.print(obj.toString()); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> 欢迎<%=obj.toString() %> </body> </html>
下载地址http://download.csdn.net/detail/strutce/7677641