Structs+Spring+Hibernate
,这是很经典的一个搭配,它的开发流程也比较程式化,下面以用户注册为例。
注册页面代码:
实体 Bean 类:
package com.myHibernate.domain;
import com.myHibernate.bean.User;
public interface Regedit {
//保存用户
publicabstractvoidsaveUser(Useruser);
//修改用户
publicabstractvoidupdateUser(Useruser);
//删除用户
publicabstractvoiddeleteUser(Useruser);
//获取是否保存成功的消息
publicabstractStringgetMsg();
}
注册的业务逻辑实现:
注册页面代码:
<%
@pagecontentType="text/html;charset=GBK"
%>
< html >
< head >< title > Spring、Struts和Hibernate整合之用户注册 </ title ></ head >
< body > ${msg}
< form name ="user" action ="/myHibernate/regedit.do" method ="post" >
用户名 < input type ="text" name ="username" value ="${user.username}" />< br >
密码 < input type ="password" name ="password" value ="${user.password}" />< br >
< input type ="submit" name ="method" value ="提交" />
</ form >
</ body >
</ html >
< html >
< head >< title > Spring、Struts和Hibernate整合之用户注册 </ title ></ head >
< body > ${msg}
< form name ="user" action ="/myHibernate/regedit.do" method ="post" >
用户名 < input type ="text" name ="username" value ="${user.username}" />< br >
密码 < input type ="password" name ="password" value ="${user.password}" />< br >
< input type ="submit" name ="method" value ="提交" />
</ form >
</ body >
</ html >
实体 Bean 类:
package
com.myHibernate.bean;
public class User1 {
//定义id
privateStringid=null;
//定义用户名
privateStringusername=null;
//定义密码
privateStringpassword=null;
//设定id
publicvoidsetId(Stringid){
this.id=id;
}
//获取id
publicStringgetId(){
returnthis.id;
}
//设定用户名
publicvoidsetUsername(Stringusername){
this.username=username;
}
//获取用户名
publicStringgetUsername(){
returnthis.username;
}
//设定密码
publicvoidsetPassword(Stringpassword){
this.password=password;
}
//获取密码
publicStringgetPassword(){
returnthis.password;
}
}
对应的映射文件
User.hbm.xml:public class User1 {
//定义id
privateStringid=null;
//定义用户名
privateStringusername=null;
//定义密码
privateStringpassword=null;
//设定id
publicvoidsetId(Stringid){
this.id=id;
}
//获取id
publicStringgetId(){
returnthis.id;
}
//设定用户名
publicvoidsetUsername(Stringusername){
this.username=username;
}
//获取用户名
publicStringgetUsername(){
returnthis.username;
}
//设定密码
publicvoidsetPassword(Stringpassword){
this.password=password;
}
//获取密码
publicStringgetPassword(){
returnthis.password;
}
}
<?
xmlversion="1.0"
?>
<! DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/HibernateMappingDTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
< hibernate-mapping package ="com.myHibernate.bean" >
< class name ="User" table ="user" >
<!-- 定义id -->
< id name ="id" column ="id" >
< generator class ="native" />
</ id >
<!-- 定义用户名 -->
< property name ="username" />
<!-- 定义密码 -->
< property name ="password" />
</ class >
</ hibernate-mapping >
用户
DAO
接口:<! DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/HibernateMappingDTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
< hibernate-mapping package ="com.myHibernate.bean" >
< class name ="User" table ="user" >
<!-- 定义id -->
< id name ="id" column ="id" >
< generator class ="native" />
</ id >
<!-- 定义用户名 -->
< property name ="username" />
<!-- 定义密码 -->
< property name ="password" />
</ class >
</ hibernate-mapping >
package
com.myHibernate.dao;
import com.myHibernate.bean.User;
public interface UserDAO {
//查询用户
publicabstractUserqueryUser(Stringname);
//新增用户
publicabstractvoidinsertUser(Useruser);
//修改用户
publicabstractvoidupdateUser(Useruser);
//删除用户
publicabstractvoiddeleteUser(Useruser);
}
用户
DAO
接口实现类:import com.myHibernate.bean.User;
public interface UserDAO {
//查询用户
publicabstractUserqueryUser(Stringname);
//新增用户
publicabstractvoidinsertUser(Useruser);
//修改用户
publicabstractvoidupdateUser(Useruser);
//删除用户
publicabstractvoiddeleteUser(Useruser);
}
package
com.myHibernate.dao.impl;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.myHibernate.bean.User;
import com.myHibernate.dao.UserDAO;
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
privateSessionFactorysessionFactory;
privateStringhql="fromUseruwhereu.username=?";
//查询用户
publicUserqueryUser(Stringname){
Useruser=null;
//如果查询结果为空
if(this.getHibernateTemplate().find(hql,name)==null){
user=null;
}else{
//不为空时,取第一笔
user=(User)this.getHibernateTemplate().find(hql,name).get(0);
}
returnuser;
}
//新增用户
publicvoidinsertUser(Useruser){
this.getHibernateTemplate().save(user);
}
//修改用户
publicvoidupdateUser(Useruser){
this.getHibernateTemplate().update(user);
}
//删除用户
publicvoiddeleteUser(Useruser){
this.getHibernateTemplate().delete(user);
}
}
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.myHibernate.bean.User;
import com.myHibernate.dao.UserDAO;
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
privateSessionFactorysessionFactory;
privateStringhql="fromUseruwhereu.username=?";
//查询用户
publicUserqueryUser(Stringname){
Useruser=null;
//如果查询结果为空
if(this.getHibernateTemplate().find(hql,name)==null){
user=null;
}else{
//不为空时,取第一笔
user=(User)this.getHibernateTemplate().find(hql,name).get(0);
}
returnuser;
}
//新增用户
publicvoidinsertUser(Useruser){
this.getHibernateTemplate().save(user);
}
//修改用户
publicvoidupdateUser(Useruser){
this.getHibernateTemplate().update(user);
}
//删除用户
publicvoiddeleteUser(Useruser){
this.getHibernateTemplate().delete(user);
}
}
注册的业务逻辑接口:
package com.myHibernate.domain;
import com.myHibernate.bean.User;
public interface Regedit {
//保存用户
publicabstractvoidsaveUser(Useruser);
//修改用户
publicabstractvoidupdateUser(Useruser);
//删除用户
publicabstractvoiddeleteUser(Useruser);
//获取是否保存成功的消息
publicabstractStringgetMsg();
}
package
com.myHibernate.domain.impl;
import com.myHibernate.bean.User;
import com.myHibernate.dao.UserDAO;
import com.myHibernate.domain.Regedit;
public class RegeditImpl implements Regedit {
privateStringmsg;
privateUserDAOuserDao;
//保存用户
publicvoidsaveUser(Useruser){
userDao.insertUser(user);
msg="保存成功";
}
//修改用户
publicvoidupdateUser(Useruser){
userDao.updateUser(user);
}
//删除用户
publicvoiddeleteUser(Useruser){
userDao.deleteUser(user);
}
//获取是否保存成功的消息
publicStringgetMsg(){
returnmsg;
}
/***//**
*@返回userDao
*/
publicUserDAOgetUserDao(){
returnuserDao;
}
/***//**
*@注入userDao
*/
publicvoidsetUserDao(UserDAOuserDao){
this.userDao=userDao;
}
}
用户注册控制器类:import com.myHibernate.bean.User;
import com.myHibernate.dao.UserDAO;
import com.myHibernate.domain.Regedit;
public class RegeditImpl implements Regedit {
privateStringmsg;
privateUserDAOuserDao;
//保存用户
publicvoidsaveUser(Useruser){
userDao.insertUser(user);
msg="保存成功";
}
//修改用户
publicvoidupdateUser(Useruser){
userDao.updateUser(user);
}
//删除用户
publicvoiddeleteUser(Useruser){
userDao.deleteUser(user);
}
//获取是否保存成功的消息
publicStringgetMsg(){
returnmsg;
}
/***//**
*@返回userDao
*/
publicUserDAOgetUserDao(){
returnuserDao;
}
/***//**
*@注入userDao
*/
publicvoidsetUserDao(UserDAOuserDao){
this.userDao=userDao;
}
}
package
com.myHibernate.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// 导入struts包
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.myHibernate.bean.User;
import com.myHibernate.domain.Regedit;
// 继承action
public class RegeditAction extends Action {
//定义接口Regedit
privateRegeditregedit;
//获取值
publicRegeditgetRegedit(){
returnregedit;
}
//依赖注入值
publicvoidsetRegedit(Regeditregedit){
this.regedit=regedit;
}
publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{
//获取用户提交的信息
Useruser=(User)form;
//保存用户提交的信息
getRegedit().saveUser(user);
//将用户提交的信息和是否保存成功的信息存放在request中
request.setAttribute("user",user);
request.setAttribute("msg",regedit.getMsg());
//返回页面
returnmapping.findForward("regedit");
}
}
下面是配置文件方面,首先是
Hibernate
的配置文件
hibernate.cfg.xml
,定义了访问数据库所需要的一些值:import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// 导入struts包
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.myHibernate.bean.User;
import com.myHibernate.domain.Regedit;
// 继承action
public class RegeditAction extends Action {
//定义接口Regedit
privateRegeditregedit;
//获取值
publicRegeditgetRegedit(){
returnregedit;
}
//依赖注入值
publicvoidsetRegedit(Regeditregedit){
this.regedit=regedit;
}
publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{
//获取用户提交的信息
Useruser=(User)form;
//保存用户提交的信息
getRegedit().saveUser(user);
//将用户提交的信息和是否保存成功的信息存放在request中
request.setAttribute("user",user);
request.setAttribute("msg",regedit.getMsg());
//返回页面
returnmapping.findForward("regedit");
}
}
<?
xmlversion="1.0"encoding="UTF-8"
?>
<! DOCTYPEhibernate-configurationPUBLIC
"-//Hibernate/HibernateConfigurationDTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
< hibernate-configuration >
< session-factory >
< property name ="hibernate.connection.driver_class" > com.mysql.jdbc.Driver </ property >
< property name ="hibernate.connection.url" > jdbc:mysql://localhost/myHibernate </ property >
< property name ="hibernate.connection.username" > root </ property >
< property name ="hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ property >
< property name ="show_sql" > true </ property >
< mapping resource ="com/myHibernate/bean/User.hbm.xml" />
</ session-factory >
</ hibernate-configuration >
<! DOCTYPEhibernate-configurationPUBLIC
"-//Hibernate/HibernateConfigurationDTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
< hibernate-configuration >
< session-factory >
< property name ="hibernate.connection.driver_class" > com.mysql.jdbc.Driver </ property >
< property name ="hibernate.connection.url" > jdbc:mysql://localhost/myHibernate </ property >
< property name ="hibernate.connection.username" > root </ property >
< property name ="hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ property >
< property name ="show_sql" > true </ property >
< mapping resource ="com/myHibernate/bean/User.hbm.xml" />
</ session-factory >
</ hibernate-configuration >
然后是Spring的配置文件spring-config.xml:
<?
xmlversion="1.0"encoding="UTF-8"
?>
<! DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd" >
< beans >
<!-- 定义数据源 -->
< bean id ="dataSource"
class ="org.apache.commons.dbcp.BasicDataSource"
destroy-method ="close" >
<!-- 设定驱动 -->
< property name ="driverClassName" >
< value > com.mysql.jdbc.Driver </ value >
</ property >
<!-- 设定url -->
< property name ="url" >
< value > jdbc:mysql://localhost/myHibernate </ value >
</ property >
<!-- 设定用户名 -->
< property name ="username" >
< value > root </ value >
</ property >
</ bean >
<!-- 通过org.springframework.orm.hibernate3.LocalSessionFactoryBean建立联系 -->
< bean id ="sessionFactory"
class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
< property name ="dataSource" >
< ref local ="dataSource" />
</ property >
<!-- 定义要使用的映射文件 -->
< property name ="mappingResources" >
< list >
< value > com/myHibernate/bean/User.hbm.xml </ value >
</ list >
</ property >
<!-- 定义要使用的方言和是否显示sql -->
< property name ="hibernateProperties" >
< props >
< prop key ="hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ prop >
< prop key ="hibernate.show_sql" > true </ prop >
</ props >
</ property >
</ bean >
<!-- 这里添加对事务处理的支持,当然也可以不用 -->
< bean id ="transactionManager"
class ="org.springframework.orm.hibernate3.HibernateTransactionManager" >
< property name ="sessionFactory" >
< ref local ="sessionFactory" />
</ property >
</ bean >
<!-- 表示要将下面定义的userDao置于事务处理之下 -->
< bean id ="userDaoProxy"
class ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
< property name ="transactionManager" >
< ref bean ="transactionManager" />
</ property >
<!-- 要代理userDao -->
< property name ="target" >
< ref local ="userDao" />
</ property >
<!-- 定义不同情况下,事务处理的方式 -->
< property name ="transactionAttributes" >
< props >
< prop key ="create*" > PROPAGATION_REQUIRED </ prop >
< prop key ="update*" > PROPAGATION_REQUIRED </ prop >
< prop key ="delete*" > PROPAGATION_REQUIRED </ prop >
< prop key ="query*" > PROPAGATION_REQUIRED,readOnly </ prop >
</ props >
</ property >
</ bean >
<!-- 定义userDao -->
< bean id ="userDao" class ="com.myHibernate.dao.impl.UserDAOImpl" >
< property name ="sessionFactory" >
< ref local ="sessionFactory" />
</ property >
</ bean >
<!-- 定义regedit,将UserDAO进行注入 -->
< bean id ="regedit" class ="com.myHibernate.domain.impl.RegeditImpl" >
< property name ="userDao" >
< ref local ="userDao" />
</ property >
</ bean >
<!-- 定义login,将UserDAO进行注入 -->
< bean id ="login" class ="com.myHibernate.domain.impl.LoginImpl" >
< property name ="userDao" >
< ref local ="userDao" />
</ property >
</ bean >
<!-- 定义和Struts相应的映射,将regedit进行注入 -->
< bean name ="/regedit" class ="com.myHibernate.action.RegeditAction" >
< property name ="regedit" >
< ref bean ="regedit" />
</ property >
</ bean >
<!-- 定义和Struts相应的映射,将login进行注入 -->
< bean name ="/login" class ="com.myHibernate.action.LoginAction" >
< property name ="login" >
< ref bean ="login" />
</ property >
</ bean >
</ beans >
然后是
Struts
的配置文件
struts-config.xml:<! DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd" >
< beans >
<!-- 定义数据源 -->
< bean id ="dataSource"
class ="org.apache.commons.dbcp.BasicDataSource"
destroy-method ="close" >
<!-- 设定驱动 -->
< property name ="driverClassName" >
< value > com.mysql.jdbc.Driver </ value >
</ property >
<!-- 设定url -->
< property name ="url" >
< value > jdbc:mysql://localhost/myHibernate </ value >
</ property >
<!-- 设定用户名 -->
< property name ="username" >
< value > root </ value >
</ property >
</ bean >
<!-- 通过org.springframework.orm.hibernate3.LocalSessionFactoryBean建立联系 -->
< bean id ="sessionFactory"
class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
< property name ="dataSource" >
< ref local ="dataSource" />
</ property >
<!-- 定义要使用的映射文件 -->
< property name ="mappingResources" >
< list >
< value > com/myHibernate/bean/User.hbm.xml </ value >
</ list >
</ property >
<!-- 定义要使用的方言和是否显示sql -->
< property name ="hibernateProperties" >
< props >
< prop key ="hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ prop >
< prop key ="hibernate.show_sql" > true </ prop >
</ props >
</ property >
</ bean >
<!-- 这里添加对事务处理的支持,当然也可以不用 -->
< bean id ="transactionManager"
class ="org.springframework.orm.hibernate3.HibernateTransactionManager" >
< property name ="sessionFactory" >
< ref local ="sessionFactory" />
</ property >
</ bean >
<!-- 表示要将下面定义的userDao置于事务处理之下 -->
< bean id ="userDaoProxy"
class ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
< property name ="transactionManager" >
< ref bean ="transactionManager" />
</ property >
<!-- 要代理userDao -->
< property name ="target" >
< ref local ="userDao" />
</ property >
<!-- 定义不同情况下,事务处理的方式 -->
< property name ="transactionAttributes" >
< props >
< prop key ="create*" > PROPAGATION_REQUIRED </ prop >
< prop key ="update*" > PROPAGATION_REQUIRED </ prop >
< prop key ="delete*" > PROPAGATION_REQUIRED </ prop >
< prop key ="query*" > PROPAGATION_REQUIRED,readOnly </ prop >
</ props >
</ property >
</ bean >
<!-- 定义userDao -->
< bean id ="userDao" class ="com.myHibernate.dao.impl.UserDAOImpl" >
< property name ="sessionFactory" >
< ref local ="sessionFactory" />
</ property >
</ bean >
<!-- 定义regedit,将UserDAO进行注入 -->
< bean id ="regedit" class ="com.myHibernate.domain.impl.RegeditImpl" >
< property name ="userDao" >
< ref local ="userDao" />
</ property >
</ bean >
<!-- 定义login,将UserDAO进行注入 -->
< bean id ="login" class ="com.myHibernate.domain.impl.LoginImpl" >
< property name ="userDao" >
< ref local ="userDao" />
</ property >
</ bean >
<!-- 定义和Struts相应的映射,将regedit进行注入 -->
< bean name ="/regedit" class ="com.myHibernate.action.RegeditAction" >
< property name ="regedit" >
< ref bean ="regedit" />
</ property >
</ bean >
<!-- 定义和Struts相应的映射,将login进行注入 -->
< bean name ="/login" class ="com.myHibernate.action.LoginAction" >
< property name ="login" >
< ref bean ="login" />
</ property >
</ bean >
</ beans >
<?
xmlversion="1.0"encoding="UTF-8"
?>
<! DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.2//EN""http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd" >
< struts-config > <!-- 定义formbean --> < form-beans >< form-bean name ="user" type ="com.myHibernate.bean.User" /></ form-beans >
< action-mappings >
<!-- 定义和SPring配置文件相同的路径 -->
< action path ="/regedit" type ="org.springframework.web.struts.DelegatingActionProxy" name ="user" >
< forward name ="regedit" path ="/jsp/regedit.jsp" />
</ action >
<!-- 定义初次访问时的路径 -->
< action path ="/input"
type ="org.apache.struts.actions.ForwardAction"
parameter ="/jsp/regedit.jsp" />
<!-- 定义和SPring配置文件相同的路径 -->
< action path ="/login"
type ="org.springframework.web.struts.DelegatingActionProxy" name ="user" >
< forward name ="login" path ="/jsp/login.jsp" />
</ action >
<!-- 定义初次访问时的路径 -->
< action path ="/loginTemp"
type ="org.apache.struts.actions.ForwardAction"
parameter ="/jsp/login.jsp" />
</ action-mappings >
<!-- 注册ContextLoaderPlugIn插件 -->
< plug-in className ="org.springframework.web.struts.ContextLoaderPlugIn" >
< set-property property ="contextConfigLocation" value ="/WEB-INF/spring-config.xml" />
</ plug-in >
</ struts-config >
最后是
Web
应用程序配置文件
web.xml:<! DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.2//EN""http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd" >
< struts-config > <!-- 定义formbean --> < form-beans >< form-bean name ="user" type ="com.myHibernate.bean.User" /></ form-beans >
< action-mappings >
<!-- 定义和SPring配置文件相同的路径 -->
< action path ="/regedit" type ="org.springframework.web.struts.DelegatingActionProxy" name ="user" >
< forward name ="regedit" path ="/jsp/regedit.jsp" />
</ action >
<!-- 定义初次访问时的路径 -->
< action path ="/input"
type ="org.apache.struts.actions.ForwardAction"
parameter ="/jsp/regedit.jsp" />
<!-- 定义和SPring配置文件相同的路径 -->
< action path ="/login"
type ="org.springframework.web.struts.DelegatingActionProxy" name ="user" >
< forward name ="login" path ="/jsp/login.jsp" />
</ action >
<!-- 定义初次访问时的路径 -->
< action path ="/loginTemp"
type ="org.apache.struts.actions.ForwardAction"
parameter ="/jsp/login.jsp" />
</ action-mappings >
<!-- 注册ContextLoaderPlugIn插件 -->
< plug-in className ="org.springframework.web.struts.ContextLoaderPlugIn" >
< set-property property ="contextConfigLocation" value ="/WEB-INF/spring-config.xml" />
</ plug-in >
</ struts-config >
<?
xmlversion="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" >
< servlet >
< servlet-name > actionServlet </ servlet-name >
< servlet-class > org.apache.struts.action.ActionServlet </ servlet-class >
<!-- 初始参数 -->
< init-param >
< param-name > config </ param-name >
< param-value > /WEB-INF/struts-config.xml </ param-value >
</ init-param >
< load-on-startup > 1 </ load-on-startup >
</ servlet >
<!-- 处理所有后缀为do的请求 -->
< servlet-mapping >
< servlet-name > actionServlet </ servlet-name >
< url-pattern > *.do </ url-pattern >
</ servlet-mapping >
</ web-app >
可以看到,
MVC
的三层架构思路很清晰,但缺点也很明显,配置文件太过于冗杂,
CRUD
代码随处冗余,不够简约,下一篇文章中我们将见识到一个解决这个问题的优秀框架
—SpringSide
。
< 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" >
< servlet >
< servlet-name > actionServlet </ servlet-name >
< servlet-class > org.apache.struts.action.ActionServlet </ servlet-class >
<!-- 初始参数 -->
< init-param >
< param-name > config </ param-name >
< param-value > /WEB-INF/struts-config.xml </ param-value >
</ init-param >
< load-on-startup > 1 </ load-on-startup >
</ servlet >
<!-- 处理所有后缀为do的请求 -->
< servlet-mapping >
< servlet-name > actionServlet </ servlet-name >
< url-pattern > *.do </ url-pattern >
</ servlet-mapping >
</ web-app >