Struts2入门详解
如何搭建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> 编写Struts2配置文件struts.xml <?xml version="1.0" encoding="UTF⑻" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts⑵.3.dtd">
<struts>
<package name="default" namespace="/user" extends="struts-default">
<action name="regist" class="cn.itcast.action.RegistAction">
<result name="input">/success.jsp</result>
</action>
</package>
</struts> 访问路径 /user/regist.action 默许Action 和 Action的默许处理类1) 默许Action , 解决客户端访问Action不存在的问题 ,客户端访问Action, Action找不到,默许Action 就会履行 2) 默许处理类 ,客户端访问Action,已找到匹配元素,但是元素没有class属性,履行默许处理类 Struts2的常量配置1) struts2 默许常量 在 default.properties 中配置 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) 经常使用常量
ActionAction书写的的3种格式第1种Action可以是 POJO ((PlainOldJavaObjects)简单的Java对象) —- 不需要继承任何父类,实现任何接口 第2种编写Action 实现Action接口 第3种编写Action 继承ActionSupport (推荐) Action的配置method(通配符)1) 在配置 元素时,没有指定method属性, 默许履行 Action类中 execute方法
动态方法调用访问Action中指定方法,不进行配置
Action访问Servlet API1、 在Action 中解耦合方式 间接访问 Servlet API ——— 使用 ActionContext 对象在struts2 中 Action API 已与 Servlet API 解耦合 (没有依赖关系 ) actionContext = ActionContext.getContext(); 2、 使用接口注入的方式,操作Servlet API (耦合)1.要求action类必须实现提定接口。 2.重定接口中的方法。
3、 在Action中直接通过 ServletActionContext 取得Servlet APIServletActionContext.getRequest() : 取得request对象 (session) Action处理要求参数第1种 :Action 本身作为model对象,通过成员setter封装 (属性驱动 ) 页面:
用户名 <input type="text" name="username" />
Action :
public class RegistAction1 extends ActionSupport {
private String username;
public void setUsername(String username) {
this.username = username;
}
} 第2种 :创建独立model对象,页面通过ognl表达式封装 (属性驱动) 页面:
用户名 <input type="text" name="user.username" />----- 基于OGNL表达式的写法
Action:
public class RegistAction2 extends ActionSupport {
private User user;
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
} 使用ModelDriven接口,对要求数据进行封装 (模型驱动 ) —– 主流 页面:
用户名 <input type="text" name="username" /> <br/>
Action :
public class RegistAction3 extends ActionSupport implements ModelDriven<User> {
private User user = new User(); // 必须手动实例化
public User getModel() {
return user;
}
} 封装数据到Collection和Map1) 封装数据到Collection 对象 产品名称 <input type="text" name="products[0].name" /><br/>
Action :
public class ProductAction extends ActionSupport {
private List<Product> products;
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
} 2) 封装数据到Map 对象 产品名称 <input type="text" name="map['one'].name" /><br/> ======= one是map的键值
Action :
public class ProductAction2 extends ActionSupport {
private Map<String,Product> map;
public Map<String,Product> getMap() {
return map;
}
public void setMap(Map<String,Product> map) {
this.map = map;
}
} 要求参数校验手工代码校验要求参数步骤1: 封装数据 Xml配置方式数据校验位置:xml文件要与action类在同1个包下 <?xml version="1.0" encoding="UTF⑻"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator⑴.0.3.dtd">
<validators>
<!-- 对username属性进行校验 -->
<field name="username">
<!-- 指定username不能为空 -->
<field-validator type="requiredstring">
<!-- 毛病信息 -->
<message>用户名不能为空--------</message>
</field-validator>
<!-- 长度校验,规定用户名必须在6⑴0位之间 -->
<field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">6</param>
<message>用户名必须在${minLength}-${maxLength}位之间</message>
</field-validator>
</field>
<!-- 对age进行校验,规定年龄必须在10⑷0之间 -->
<field name="age">
<field-validator type="int">
<param name="min">10</param>
<param name="max">40</param>
<message>年龄必须在${min}--${max}之间</message>
</field-validator>
</field>
<!-- 对birthday进行校验 -->
<field name="birthday">
<field-validator type="date">
<param name="min">1974-01-01</param>
<param name="max">2004⑴2⑶1</param>
<message>生日必须在${min}年到${max}年之间</message>
</field-validator>
</field>
<!-- 校验邮箱 -->
<field name="email">
<field-validator type="email">
<message>邮箱格式不正确</message>
</field-validator>
</field>
<!-- url校验 -->
<field name="url">
<field-validator type="url">
<message>url不能这空,类似于http://www.baidu.com</message>
</field-validator>
</field>
<!-- 使用正则 -->
<field name="telphone">
<field-validator type="regex">
<param name="regexExpression"><![CDATA[^135[0⑼]{8}$]]></param>
<message>电话号码必须是135xxxxxxxx</message>
</field-validator>
</field>
<field name="repassword">
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[(password==repassword)]]></param>
<message>两次密码输入不1致</message>
</field-validator>
</field>
</validators> 内建校验器 Result结果类型;Action处理要求后, 返回字符串(逻辑视图名),需要在struts.xml 提供 元素定义结果页面 <action name="result" class="cn.itcast.struts2.demo6.ResultAction">
<!-- 局部结果 当前Action使用 -->
<result name="success">/demo6/result.jsp</result>
</action>
<global-results>
<!-- 全局结果 当前包中 所有Action都可以用-->
<result name="success">/demo6/result.jsp</result>
</global-results> 2、 结果页面跳转类型 dispatcher:它代表的是要求转发,也是默许值。它1般用于从action跳转到页面。
redirect:它代表的是重定向 它1般用于从action跳转到页面
stream:代表的是服务器端返回的是1个流,1般用于下载。 在jsp中显示毛病信息 <s:fieldError/>
<s:fielderror fieldName="">展现特定名称的毛病信息. Struts2国际化资源文件编写properties文件命名 : 基本名称语言(小写)国家(大写).properties message.properties
messages_zh_CN.properties //中国中文
messages_en_US.properties //美国英文
资源文件作用域1.针对action类 2.针对package下所有action 怎样使用1.在action类中使用 2.在validation.xml文件中使用
3.在jsp页面上使用 s:text name=”名称” 如果没有使用s:i18n name=”“来指定,会从全局配置文件中获得。 <s:i18n name="cn.itcast.action.package">
<s:text name="nameerror"/>
</s:i18n> 在struts2中国际化配置文件中使用动态文本1.action中怎样使用 xxxx.property
action
结果就是 hello world tom 2.jsp页面上怎样使用 xxxx.property
结果就是 hello world 张3 Struts2拦截器struts2中在struts-default.xml文件中声明了所有的拦截器。 经常使用struts2 拦截器
自定义拦截器struts.xml <interceptors>
<interceptor name="my" class="cn.itcast.intercept.MyInterceptor">
</interceptor>
<interceptor name="bookInterceptor" class="cn.itcast.intercept.BookInterceptor">
<param name="includeMethods">add,update,delete</param>
</interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="bookInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<action name="demo1" class="cn.itcast.action.Demo1Action">
<result name="login">/login.jsp</result>
<!-- <interceptor-ref name="my" /> <interceptor-ref name="defaultStack"/> -->
<interceptor-ref name="myStack" />
</action> action public class BookInterceptor extends MethodFilterInterceptor {
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
// 1.得到session中的user
User user = (User) ServletActionContext.getRequest().getSession().getAttribute("user");
if (user == null) {
BookAction action = (BookAction) invocation.getAction(); // 得到当前拦截的action对象。
action.addActionError("权限不足,请先登录");// 存储毛病信息
return Action.LOGIN;
}
return invocation.invoke();
}
} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |