目录结构:
一、新建web project
二、在src目录下新建struts.xml ,使用include是为了方便分开各个action
<?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>
<!-- 指定web应用的默认编码集,相当于调用httpservletrequest的setcharacterencoding方法 -->
<constant name="struts.i18n.encoding" value="utf-8" />
<!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
<constant name="struts.serve.static.browsercache" value="false" />
<!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
<constant name="struts.devmode" value="true" />
<include file="admin.xml" />
</struts>
还有admin.xml
<package name="admin" extends="struts-default">
<action name="admin_*" class="adminaction" method="{1}">
<result name="login">
/backend/main.jsp <!-- 页面跳转 -->
</result>
<result name="delsuc" type="redirectaction">
<param name="actionname">admin_login</param> <!-- action跳转 -->
</action>
</package>
三、在src目录增加hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!doctype hibernate-configuration public
"-//hibernate/hibernate configuration dtd 3.0//en"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- generated by myeclipse hibernate tools. -->
<hibernate-configuration>
<session-factory>
<mapping resource="com/d3/d3studio/model/admin.hbm.xml" />
</session-factory>
</hibernate-configuration>
四、在web-inf增加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:context="http://www.springframework.org/schema/context"
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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
">
<bean id="datasource" class="com.mchange.v2.c3p0.combopooleddatasource">
<!-- 指定连接数据库的jdbc驱动 -->
<property name="driverclass">
<value>com.mysql.jdbc.driver</value>
</property>
<!-- 连接数据库所用的url -->
<property name="jdbcurl">
<value>jdbc:mysql://localhost:3306/pacs</value>
</property>
<!-- 连接数据库的用户名 -->
<property name="user">
<value>root</value>
<!-- 连接数据库的密码 -->
<property name="password">
<!-- 设置数据库连接池的最大连接数 -->
<property name="maxpoolsize">
<value>20</value>
<!-- 设置数据库连接池的最小连接数 -->
<property name="minpoolsize">
<value>2</value>
<!-- 设置数据库连接池的初始化连接数 -->
<property name="initialpoolsize">
<!-- 设置数据库连接池的连接的最大空闲时间,单位为秒 -->
<property name="maxidletime">
</bean>
<bean id="sessionfactory"
class="org.springframework.orm.hibernate3.localsessionfactorybean">
<property name="datasource">
<ref bean="datasource" />
<property name="hibernateproperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.mysqldialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.fromat_sql">true</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.autoreconnect">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.ehcacheprovider</prop>
</props>
</property>
<property name="mappingresources">
<list>
<value>com/d3/pacs/model/admin.hbm.xml</value> <-- 对应model包里的映射 -->
</list>
<bean id="txmanager"
class="org.springframework.jdbc.datasource.datasourcetransactionmanager">
<property name="datasource" ref="datasource" />
<tx:annotation-driven transaction-manager="txmanager" />
<-- 使用spring的注入 -->
<bean id="admindao" class="com.d3.pacs.dao.admindao">
<property name="sessionfactory" ref="sessionfactory" />
<bean id="adminservice" class="com.d3.pacs.service.adminservice">
<property name="admindao" ref="admindao" />
<bean id="adminaction" class="com.d3.pacs.action.adminaction" scope="prototype">
<property name="adminservice" ref="adminservice" />
</beans>
五、web.xml需要修改
<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>
<!-- 配置struct2-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter</filter-class>
</filter>
<filter-mapping>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 启动spring容器 -->
<listener>
<listener-class>org.springframework.web.context.contextloaderlistener</listener-class>
</listener>
<!-- 默认启动项 -->
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
六、编写action
public class adminaction extends actionsupport {
private static logger logger = logger.getlogger(adminaction.class);
private adminservice adminservice;
private admin admin;
public adminservice getadminservice() {
return adminservice;
}
public void setadminservice(adminservice adminservice) {
this.adminservice = adminservice;
public admin getadmin() {
return admin;
public void setadmin(admin admin) {
this.admin = admin;
// 管理员登陆
public string login() {
if(adminservice.login(admin) !=null){
httpservletrequest request = servletactioncontext.getrequest();
httpsession session = request.getsession(true);
session.setattribute("admin1", admin);
return "login";
}
else
return "loginfail";
// 管理员注册
public string regist() {
return "regist";
// 退出管理员
public string exit() {
httpservletrequest request = servletactioncontext.getrequest();
request.getsession().removeattribute("admin1");
return "exit";
}
七、 访问流程: 在jsp中提交action 提交表单<form id="login" action="/my/admin_login" method="post">
/my是我的tomcat自己定义的虚拟目录, admin_* 对应的是admin.xml中 <action name="admin_*" class="adminaction" method="{1}">
访问admin_login 对应的就是action类中的public string login()的方法 ,根据此方法返回的string
对应的也是admin.xml 中 ,返回login则会跳刀main.jsp
<result name="login">
/backend/main.jsp <!-- 页面跳转 -->
</result>
<result name="regist">
<result name="delsuc" type="redirectaction">
<param name="actionname">admin_login</param> <!-- action跳转 -->
另外,struts会自动匹配类属性和jsp中name
比如:
jsp里面有 : <input class=txtusernamecssclass maxlength=20 name="name">
对应在action里面,如果有name的属性,只要提供get,set方法,那么jsp中的name就会传到action
另外还可以: <input class=txtusernamecssclass maxlength=20 name="admin.name">
对应action里面有个admin的类属性且 admin有name属性, 则会赋值