Home  >  Article  >  Java  >  What is struts2? how to use?

What is struts2? how to use?

零下一度
零下一度Original
2017-06-25 10:54:112967browse

1. What is struts2

 1.Concept

 

 2.Struts2 usage advantages and history

 

2. Building struts2 Framework

## 

1. Guide package

 (Unzip) struts2-blank.war and you will see

 

 2. Write the Action class

public class HelloAction {public String hello(){
        
        System.out.println("hello world!");        return "success";
    }
}
View Code
 

3. Write src/struts.xml (remember to add dtd constraints)

<?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><package name="hello" namespace="/hello" extends="struts-default" ><action name="HelloAction" class="cn.itheima.a_hello.HelloAction" method="hello" ><result name="success" type="dispatcher" >/hello.jsp</result></action></package></struts>
View Code

 4. Configure the struts2 core filter to web.xml

Can’t remember filter-class You can enter strutsPre with ctrl+shift+t to find the full class name

  <!-- struts2核心过滤器 -->
  <filter>  <filter-name>struts2</filter-name>  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>  <filter-name>struts2</filter-name>  <url-pattern>/*</url-pattern>
  </filter-mapping>
View Code
 

5. Test

 

##3. Struts2 access process&struts2 architecture

 1.struts2 architecture 

 

2.Aop programming (aspect-oriented)

 

4. Detailed configuration explanation 

1.struts.xml configuration details

##
<?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><!-- i18n:国际化. 解决post提交乱码 --><constant name="struts.i18n.encoding" value="UTF-8"></constant><!-- 指定反问action时的后缀名 
        http://localhost:8080/struts2_day01/hello/HelloAction.do--><constant name="struts.action.extension" value="action"></constant><!-- 指定struts2是否以开发模式运行
            1.热加载主配置.(不需要重启即可生效)
            2.提供更多错误信息输出,方便开发时的调试     --><constant name="struts.devMode" value="true"></constant><!-- package:将Action配置封装.就是可以在Package中配置很多action.
            name属性: 给包起个名字,起到标识作用.随便起.不能其他包名重复.
            namespace属性:给action的访问路径中定义一个命名空间
            extends属性: 继承一个 指定包
            abstract属性:包是否为抽象的; 标识性属性.标识该包不能独立运行.专门被继承      --><package name="hello" namespace="/hello" extends="struts-default" ><!-- action元素:配置action类
                name属性: 决定了Action访问资源名.
                class属性: action的完整类名
                method属性: 指定调用Action中的哪个方法来处理请求         --><action name="HelloAction" class="cn.itheima.a_hello.HelloAction" method="hello" ><!-- result元素:结果配置 
                    name属性: 标识结果处理的名称.与action方法的返回值对应.
                    type属性: 指定调用哪一个result类来处理结果,默认使用转发.
                    标签体:填写页面的相对路径--><result name="success" type="dispatcher" >/hello.jsp</result></action></package><!-- 引入其他struts配置文件 --><include file="cn/itheima/b_dynamic/struts.xml"></include><include file="cn/itheima/c_default/struts.xml"></include></struts>
View Code
2.struts2 constant configuration

2.1 Struts2 default constant configuration location

2.2 Modify struts2 constant configuration (the order is also the loading order)

       

Method 1: src/struts.xml (important)

          <!-- i18n:国际化. 解决post提交乱码 -->
          <constant name="struts.i18n.encoding" value="UTF-8"></constant>

                                      garden/struts.xml(Important)

        struts.i18n.encoding=UTF8
##       Method 2: Create struts.properties under src
          <context-param>
              <param-name>struts.i18n.encoding</param-name>
              <param-value>UTF-8</param-value>
          </context-param>

Method 3: In the project’s web.xml
    <!-- i18n:国际化. 解决post提交乱码 --><constant name="struts.i18n.encoding" value="UTF-8"></constant><!-- 指定反问action时的后缀名 
        http://localhost:8080/struts2_day01/hello/HelloAction.do--><constant name="struts.action.extension" value="action"></constant><!-- 指定struts2是否以开发模式运行
            1.热加载主配置.(不需要重启即可生效)
            2.提供更多错误信息输出,方便开发时的调试     --><constant name="struts.devMode" value="true"></constant>
###

      顺序:

      

    2.3 常量配置

    <!-- i18n:国际化. 解决post提交乱码 --><constant name="struts.i18n.encoding" value="UTF-8"></constant><!-- 指定反问action时的后缀名 
        http://localhost:8080/struts2_day01/hello/HelloAction.do--><constant name="struts.action.extension" value="action"></constant><!-- 指定struts2是否以开发模式运行
            1.热加载主配置.(不需要重启即可生效)
            2.提供更多错误信息输出,方便开发时的调试     --><constant name="struts.devMode" value="true"></constant>
View Code

  3.struts2配置的进阶

   3.1动态方法调用(重要)

        <!-- 配置动态方法调用是否开启常量
                默认是关闭的,需要开启         --><constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
方式一
            <!-- 动态方法调用方式2:通配符方式
                 使用{1} 取出第一个星号通配的内容              --><action name="Demo1Action_*" class="cn.itheima.b_dynamic.Demo1Action" method="{1}" ><result name="success" >/hello.jsp</result></action>
方式二

    3.2struts2中的默认配置(了解)

        <package name="default" namespace="/default" extends="struts-default" ><!-- 找不到包下的action,会使用Demo2Action作为默认action处理请求 --><default-action-ref name="Demo2Action"></default-action-ref><!-- method属性:execute  --><!-- result的name属性:success  --><!-- result的type属性:dispatcher 转发  --><!-- class属性:com.opensymphony.xwork2.ActionSupport --><action name="Demo2Action"   ><result  >/hello.jsp</result></action></package>
View 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<Customer> list = cs.getAll(dc);//5 将返回的list放入request域.转发到list.jsp显示ServletActionContext.getRequest().setAttribute("list", list);return "list";
    }
}
Web层代码
    public List<Customer> getAll(DetachedCriteria dc) {
        Session session =  HibernateUtils.getCurrentSession();//打开事务Transaction tx = session.beginTransaction();
        
        List<Customer> list = customerDao.getAll(dc);        //关闭事务                tx.commit();return list;
    }
Service层代码
    public List<Customer> getAll(DetachedCriteria dc) {//1 获得sessionSession session = HibernateUtils.getCurrentSession();//2 将离线对象关联到sessionCriteria c = dc.getExecutableCriteria(session);//3 执行查询并返回return c.list();
    }
Dao层代码

 

The above is the detailed content of What is struts2? how to use?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn