Struts2 笔记第一天
- 创建工程引入Struts2支持
- Struts2配置文件
- 请求分发处理
- 使用Struts2自带标签库
创建工程引入Struts2支持
- 加入Struts2的jar包到
WEB-INF
的lib目录下 -
WEB-INF
目录下的web.xml
配置Struts2的信息 -
src
目录下配置struts.xml
或者利用myeclipse自动创建Struts2支持
web.xml配置文件
基本模版:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" 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">
<display-name>Struts Blank</display-name>
<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>
</web-app>`
Struts2配置文件
- 基本模版:
<?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="default" namespace="/" extends="struts-default">
<action name="index">
<result type="redirectAction">
<param name="actionName">HelloWorld</param>
<param name="namespace">/example</param>
</result>
</action>
</package>
</struts>
-
namespace
: 命名空间,与请求路径和分发请求路径有关 -
action
: 请求的映射 -
result
: 请求的结果
请求分发处理
Struts2 是以拦截器来拦截请求的,通过拦截的url路径的后缀名来映射到指定的处理逻辑类去。常用的有:xxx.do
, xxx.action
, /*
Struts2 映射 处理逻辑类的配置方式:(注意相对路径与绝对路径对其影响,路径前加/
为绝对路径,否则为相对路径)
- 传统形式 : 对应的url
www.skycoop.com/sub.do
<action name="sub" class="FirstAction" method="sub">
<result name="back">index.jsp</result>
</action>
- 动态方法,使用占位符 : 对应的url
www.skycoop.com/cal_demo.do
<action name="cal_*" class="FirstAction" method="{1}">
<result>index.jsp</result>
</action>
- 使用!分割符,struts2配置文件对应第一种方式,请求会分发到指定的方法去
<a href="vote!listVote.do">参加投票</a><hr>
- 使用元数据,可与xml配置共存
struts2配置文件启动元数据
<!-- 启用元数据配置action -->
<constant name="struts.convention.action.package" value="com.j1063.action"/>
<!-- Convention插件定位视图资源的根路径。默认值为/WEB-INF/content -->
<constant name="struts.convention.result.path" value="/"/>
在逻辑处理类中,配置元数据
@ParentPackage("struts-default")
public class VoteAction extends ActionSupport {
@Action(value="loadV",results={@Result(location="/vote/listVote.jsp")})
public String loadVote(){
//逻辑处理
}
}
逻辑处理类:类似Servlet的功能类
3种形式: 1. 以pojo的形式来写 2.继承ActionSupport类 3.继承Action接口(推荐使用第二种方式来写)
模版:
public class FirstAction extends ActionSupport{
//表单
private int num1;
//默认处理请求的方法
public String execute(){
return "success"; //默认返回值success
}
//自定义的处理请求的方法
public String sub(){
//处理请求的逻辑
return "back";
}
//get/set方法
public int getNum1() {
return num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
}
模块化开发
在src
目录下可随意新建xxx.xml
的文件来配置属于某个模块的Strust2配置。原始的Strust2配置只要引用包含这个文件,就可以将其配置引入。
源配置:
<!-- 导入配置,模块化协作开发 -->
<include file="cfg/struts2/*" ></include>
使用Struts2自带标签库
- 引入标签库
<%@taglib uri="/struts-tags" prefix="s" %>
- 不能使用EL表达式,使用值栈来获得所需的值,用#来引用在值栈外的值
- <s:debug/> 可以查看值栈
- struts2集合标签:
<s:radio list={"1","2",""3}></s:radio>
键值对:<s:radio list="#{0:'熟练',1:'了解',2:'初学',4:'不知所云'}" name="uprcc" label="您掌握的程度"></s:radio>
值栈中可迭代的:<s:radio list="voteslkts" value="wendActDefauklt" name="wendAct" listKey="sid" listValue="votedest" label="周末活动"></s:radio>
- 解决中文乱码:post:
<constant name="struts.i18n.encoding " value="UTF-8"/>
get:在server.xml容器中设置 - Tomcat运行时struts2标签必须能被Struts2框架拦截,否则无法生效