一、struts2是什么
1.概念
2.struts2使用优势以及历史
二、搭建struts2框架
1.导包
(解压缩)struts2-blank.war就会看到
2.书写Action类
public class HelloAction {public String hello(){
System.out.println("hello world!"); return "success";
}
}View Code
3.书写src/struts.xml (记得加上dtd约束)
<?xml version="1.0" encoding="UTF-8"?>/p>
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">/hello.jspView Code
4.将struts2核心过滤器配置到web.xml
filter-class记不住可以ctrl+shift+t 输入strutsPre来查找全类名
struts2org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2/*
View Code
5.测试
三、struts2访问流程&struts2架构
1.struts2架构
2.Aop编程(面向切面)
四、配置详解
1.struts.xml配置详解
<?xml version="1.0" encoding="UTF-8"?>/p>
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">/hello.jspView Code
2.struts2常量配置
2.1 struts2默认常量配置位置
2.2 修改struts2常量配置(方式先后也是加载顺序)
方式1:src/struts.xml(重要)
方式2:在src下创建struts.properties
struts.i18n.encoding=UTF8
方式3:在项目的web.xml中
struts.i18n.encoding
UTF-8
顺序:
2.3 常量配置
View Code
3.struts2配置的进阶
3.1动态方法调用(重要)
方式一
/hello.jsp方式二
3.2struts2中的默认配置(了解)
/hello.jspView Code
五、action类详解
Action类的书写方式
//方式1: 创建一个类.可以是POJO//POJO:不用继承任何父类.也不需要实现任何接口.//使struts2框架的代码侵入性更低.public class Demo3Action {
}方式一
//方式2: 实现一个接口Action// 里面有execute方法,提供action方法的规范.// Action接口预置了一些字符串.可以在返回结果时使用.为了方便public class Demo4Action implements Action {
@Overridepublic String execute() throws Exception {return null;
}
}方式二
//方式3: 继承一个类.ActionSupport// 帮我们实现了 Validateable, ValidationAware, TextProvider, LocaleProvider .//如果我们需要用到这些接口的实现时,不需要自己来实现了.public class Demo5Action extends ActionSupport{
}方式三
六、练习:客户列表
图解:
实现:
public class CustomerAction extends ActionSupport {private CustomerService cs = new CustomerServiceImpl(); public String list() throws Exception {//1 接受参数String cust_name = ServletActionContext.getRequest().getParameter("cust_name");//2 创建离线查询对象DetachedCriteria dc =DetachedCriteria.forClass(Customer.class);//3 判断参数拼装条件if(StringUtils.isNotBlank(cust_name)){
dc.add(Restrictions.like("cust_name", "%"+cust_name+"%"));
}//4 调用Service将离线对象传递List list = cs.getAll(dc);//5 将返回的list放入request域.转发到list.jsp显示ServletActionContext.getRequest().setAttribute("list", list);return "list";
}
}Web层代码
public List getAll(DetachedCriteria dc) {
Session session = HibernateUtils.getCurrentSession();//打开事务Transaction tx = session.beginTransaction();
List list = customerDao.getAll(dc); //关闭事务 tx.commit();return list;
}Service层代码
public List getAll(DetachedCriteria dc) {//1 获得sessionSession session = HibernateUtils.getCurrentSession();//2 将离线对象关联到sessionCriteria c = dc.getExecutableCriteria(session);//3 执行查询并返回return c.list();
}Dao层代码