欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Struts2初步入门

程序员文章站 2022-06-02 15:07:27
...

如何搭建Struts2项目

导入相关架包

编写web.xml,配置strus2过滤器
<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>

Hello

package com.lanou3g.hello;

/*
 * struts2 初体验
 * 执行流程
 * 1.通过网址请求中的hello
 * /hello/HelloAction
 * 2.找对应 命名空间(网址)
 * 3.找到后 再通过网址中HelloAction去匹配
 *  Action标签中的 name
 * 4.匹配上 用class 标签 创建其类的对象
 * 5.调用该类中的方法
 * 6.拿到类中的方法的返回值 去匹配 result标签
 * 7.返回值 匹配上 调用标签中的页面
 * 
 * 
 */
public class HelloAction {
    public String hello() {
        System.out.println("hello struts");
        return "success";
    }
}

编写Struts2配置文件struts.xml

<!-- struts根标签 -->
<!-- package name 标签 随便写 只要不重复就行 可以进行模块化区分
     namespace 命名空间 (访问Action网址前的一个网址部分)
     extends 继承一个包 "struts-default"  默认配置 默认提供的功能
      -->
<!-- Action
       name 访问的路径
       class 类的全限定类名
       method 类方法被访问的方法 
       result
       name 方法的返回值(匹配) 
       type 请求跳转的方式 默认是 请求转发dispatcher
       值部分: 跳转网站资源 -->
<struts>
    <package name="hello" namespace="/hello" extends="struts-default">
        <action name="HelloAction" class="com.lanou3g.hello.HelloAction" method="hello">
            <result name="success" type="dispatcher">/hello.jsp</result>
        </action>
    </package>
    <!-- 引入其他的struts配置文件 -->
    <include file="com/lanou3g/def/struts.xml"></include>
    <include file="com/lanou3g/dynamic/struts.xml"></include>
    <include file="com/lanou3g/test/struts.xml"></include>
</struts>

默认Action 和 Action的默认处理类

1) 默认Action , 解决客户端访问Action不存在的问题 ,客户端访问Action, Action找不到,默认Action 就会执行
2) 默认处理类 ,客户端访问Action,已经找到匹配元素,但是元素没有class属性,执行默认处理类

  • 在struts-default.xml 配置默认处理类 ActionSupport

Struts2的常量配置

1) struts2 默认常量 在 default.properties 中配置
2) 开发者自定义常量

struts.xml
    格式 : <constant name="struts.devMode" value="true" />
struts.properties
    格式 : struts.devMode = true
web.xml 
    格式 : 
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        <init-param>
            <param-name>struts.devMode</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

3) 常用常量

<!-- 常量配置修改 -->
<!-- 去 defalut.properties文件中  找到要修改的配置  struts.action.extension=action,,     name:键值    value:值 -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.action.extension" value="action,,"></constant>
<!-- struts.devMode = false -->
<!-- 可以给配置文件提供热加载(更改完了不用重启服务器) -->
<constant name="struts.devMode" value="true"></constant>
<!-- 访问action访问路径 扩展名 struts.action.extension=action, 默认以.action结尾扩展名 和不写扩展名都会分发给 action -->
<constant name="struts.action.extension" value="action"/>
<!-- false不缓存,true浏览器会缓存静态内容  -->  
<constant name="struts.serve.static.browserCache" value="false"/> 

Action

第一种方式:

package com.lanou3g.test;
/*
 * Action类 创建方式1
 * 随便一个普通类都可以作为一个Action
 * 只需要你去配置struts.xml文件
 * 相比于Servlet 减少代码的侵入性
 */
public class Demo03Action {

}

第二种方式:

package com.lanou3g.test;

import com.opensymphony.xwork2.Action;
/*
 * 实现Action方式二
 * 实现 Action 接口
 * 意义在于  可以提醒你 action类中的方式 该怎么写
 * 
 */
public class Demo04Action implements Action{

    @Override
    public String execute() throws Exception {  
        return null;
    }
}

第三种方式:

package com.lanou3g.test;

import com.opensymphony.xwork2.ActionSupport;

/*
 * 常用创建 Action类 方式
 * public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable 
 * 因为 该类实现类 很多接口  一个接口就有一个功能
 */
public class Demo05Action extends ActionSupport{

}

struts.xml

<!-- 使用 通配符 配置访问路径 星号 * 是方法名   method 标签中填 {1} 代表取到前面星 获取的方法名 -->
<action name="Demo02Action_*" class="com.lanou3g.dynamic.Demo02Action" method="{1}">

动态方法调用

<!-- 常量配置  动态方法(不常用  搜索引擎抓取不好 网址过于复杂) -->
<!-- struts.enable.DynamicMethodInvocation = false -->
<!-- 默认 动态方法是关闭的 -->
<!-- 使用 /dynamic/Demo02Action ! 方法名 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>

页面

http://localhost:8080/sh-struts/CustomerAction_findByName
http://localhost:8080/sh-struts/CustomerAction_findByName.action

Struts2拦截器

struts2中在struts-default.xml文件中声明了所有的拦截器。
而struts2框架默认使用的是defaultStack这个拦截器栈。
在这个拦截器栈中使用了18个拦截器。简单说,struts2框架
在默认情况下,加载了18个拦截器。
注意:只要显示声明使用了一个拦截器。那么默认的拦截器就不在加载。

Struts2初步入门

相关标签: JDBC