Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
–百度百科
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title heretitle>
head>
<body>
<h1>Struts2的入门h1>
<h3><a href="${ pageContext.request.contextPath }/hello.action">Struts2的入门a>h3>
body>
html>
public class HelloAction {
/**
* 提供一个方法:
* *方法签名是固定的:公有的返回值是String类型、方法名是execute
* 在这个方法中不能传递参数
*/
public String execute() {
System.out.println("HelloAction执行了.....");
return null;
}
}
<struts>
<package name="demo1" extends="struts-default" namespace="/">
<action name="hello" class="cn.itcast.struts.demo1.HelloAction">action>
package>
struts>
<filter>
<filter-name>struts2filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterfilter-class>
filter>
<filter-mapping>
<filter-name>struts2filter-name>
<url-pattern>/*url-pattern>
filter-mapping>
/**
* 提供一个方法:
* *方法签名是固定的:公有的返回值是String类型、方法名是execute
* 在这个方法中不能传递参数
*/
public String execute() {
System.out.println("HelloAction执行了.....");
return "success";
}
<struts>
<package name="demo1" extends="struts-default" namespace="/">
<action name="hello" class="cn.itcast.struts.demo1.HelloAction">
<result name="success">/demo1/success.jspresult>
action>
package>
struts>
<body>
<h1>跳转成功页面!h1>
body>
当用户访问某一个Action的时候,先经过核心过滤器,在核心过滤器中执行一组拦截器(这组拦截器实现部分功能),执行目标Action,根据Action的返回值,进行页面跳转。
init_DefaultProperties(); // [1]
init_TraditionalXmlConfigurations(); // [2]
init_LegacyStrutsProperties(); // [3]
init_CustomConfigurationProviders(); // [5]
init_FilterInitParameters() ; // [6]
init_AliasStandardObjects() ; // [7]
注意:后配置的**常量**的值会覆盖先配置的常量的值
package标签称为包,这个包与Java中的包的概念不一致。包为了更好管理action的配置。
package标签的属性
在Struts2的框架中,提供了非常多的常量:(在default.properties)
在Struts2中修改一些常量的值:
<constant name="struts.action.extension" value="action"/>
<struts>
<constant name="struts.action.extension" value="action"/>
<include file="cn/itcast/struts/demo1/struts-demo1.xml"/>
struts>
配置struts-demo2.xml
<action name="actionDemo1" class="cn.itcast.struts.demo2.ActionDemo1">action>
方法:
public class ActionDemo1 {
public String execute() {
System.out.println("ActionDemo1执行了");
return null;
}
}
实现接口的这种方式提供了五个常量(五个逻辑视图的名称)
配置struts-demo2.xml
<action name="actionDemo2" class="cn.itcast.struts.demo2.ActionDemo2">action>
方法:
public class ActionDemo2 implements Action{
@Override
public String execute() throws Exception {
System.out.println("ActionDemo2执行了");
return null;
}
}
推荐使用ActionSupport方式,因为ActionSupport中提供了数据校验、国际化等一系列操作的方法
配置struts-demo2.xml
<action name="actionDemo3" class="cn.itcast.struts.demo2.ActionDemo3">action>
方法:
public class ActionDemo3 extends ActionSupport{
@Override
public String execute() throws Exception {
System.out.println("ActionDemo3执行了");
return null;
}
}
配置对应的struts-demo3.xml文件
<package name="demo3" extends="struts-default" namespace="/">
<action name="userFind" class="cn.itcast.struts.demo3.UserAction" method="find">action>
<action name="userUpdate" class="cn.itcast.struts.demo3.UserAction" method="update">action>
<action name="userDelete" class="cn.itcast.struts.demo3.UserAction" method="delete">action>
<action name="userSave" class="cn.itcast.struts.demo3.UserAction" method="save">action>
package>
对应的Action类方法:
public class UserAction extends ActionSupport{
public String find() {
System.out.println("查询用户。。。");
return NONE;
}
public String update() {
System.out.println("更新用户。。。");
return NONE;
}
public String delete() {
System.out.println("删除用户。。。");
return NONE;
}
public String save() {
System.out.println("保存用户。。。");
return NONE;
}
}
配置对应的struts-demo3.xml文件
<action name="product_*" class="cn.itcast.struts.demo3.ProductAction" method="{1}">action>
对应的jsp页面
<h3>通过通配符的方式h3>
<a href="${ pageContext.request.contextPath }/product_find.action">查询商品a><br/>
<a href="${ pageContext.request.contextPath }/product_update.action">修改商品a><br/>
<a href="${ pageContext.request.contextPath }/product_delete.action">删除商品a><br/>
<a href="${ pageContext.request.contextPath }/product_save.action">保存商品a><br/>
执行流程:
配置对应的struts-demo3.xml文件
<constant name="struts.enable.DynamicMethodInvocation" value="true">constant>
<action name="customer" class="cn.itcast.struts.demo3.CustomerAction">action>
编写访问路径(在jsp文件中编写)
<h3>通过动态方法访问的方式h3>
<a href="${ pageContext.request.contextPath }/customer!find.action">查询客户a><br/>
<a href="${ pageContext.request.contextPath }/customer!update.action">修改客户a><br/>
<a href="${ pageContext.request.contextPath }/customer!delete.action">删除客户a><br/>
<a href="${ pageContext.request.contextPath }/customer!save.action">保存客户a><br/>
创建表
CREATE TABLE `cst_customer` (
`cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
`cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
`cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',
`cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',
`cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',
`cust_phone` varchar(64) DEFAULT NULL COMMENT '固定电话',
`cust_mobile` varchar(16) DEFAULT NULL COMMENT '移动电话',
PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
<TR>
<TD class=menuSmall><A class=style2 href="/struts2_crm/customer_find.action"
target=main>- 客户列表A>TD>
TR>
public class CustomerAction extends ActionSupport{
public String find() {
//调用业务层
CustomerService customerService = new CustomerServiceImpl();
List<Customer> list = customerService.find();
// 页面条状
ServletActionContext.getRequest().setAttribute("list", list);
return "findSuccess";
}
}
public class CustomerServiceImpl implements CustomerService {
@Override
public List<Customer> find() {
// 调用DAO
CustomerDao customerDao = new CustomerDaoImpl();
return customerDao.find();
}
}
public class CustomerDaoImpl implements CustomerDao {
@Override
public List<Customer> find() {
Session session = HibernateUtils.getCurrentSession();
Transaction transaction = session.beginTransaction();
List<Customer> list = session.createQuery("from Customer").list();
transaction.commit();
return list;
}
}
<package name="crm" extends="struts-default" namespace="/">
<action name="customer_*" class="cn.itcast.web.action.CustomerAction" method="{1}">
<result name="findSuccess">/jsp/customer/list.jspresult>
action>
package>
此处略去。。。。。