Struts 2入门

1.为什么要使用Struts2?
1.市场的普及范围广。
2.可以很好的实现将控制与业务逻辑分离开。
2.如何获取Struts2?
可以访问Struts2的官方网址:http://struts.apache.org.我们选择下载完全资源包struts-2.3.xx.x-all.zip(http://struts.apache.org/download.cgi).
下载压缩包,解压后如下图所示:

在这里插入图片描述
lib目录是Struts2的发行包以及依赖包。
Struts2所需的jar包有
struts2-core-xxx.jar; --Struts2框架的核心类库
xwork-core-xxx.jar;–XWork类库,Struts2的构建基础
ognl-xxx.jar,–Struts2使用的一种表达式语言
freemarker-xxx.jar;–Struts2的标签模板使用类库
javassist-xxx.GA.jar;–对字节码进行处理
commons-fileupload-xxx.jar;–文件上传时需要使用
commons-io-xxx.jar;–Java IO扩展
commons-lang-xxx.jar;–包含了一些数据类型的工具类。
以上是搭建Struts2框架所需的jar包。
1.Struts 2
是一个MVC框架,以WebWork框架的设计思想为核心,吸收了Struts 1的部分优点,
拥有更加广阔的前景,自身功能强大
1.1地址:http://struts.apache.org取Struts 2.3.16.3进行讲解

2.使用Struts 2 开发程序的基本步骤
2.1加载Struts 2 类库
struts2-core-xxx.jar Struts 2框架的核心类库
xwork-core-xxx.jar XWork类库,Struts 2的构建基础
ognl-xxx.jar Struts 2 使用的一种表达式语言类库
freemarker-xxx.jar Struts 2的标签模板使用类库
javassist-xxx.GA.jar 对字节码进行处理
commons-fileupload-xxx.jar 文件上传时需要使用
commons-io-xxx.jar Java IO扩展
commons-lang-xxx.jar 包含了一些数据类型的工具类
2.2配置web.xml文件

struts2

org.apache.struts2.dispatcher.ng.filter. StrutsPrepareAndExecuteFilter



struts2
/*

2.3开发视图层页面

或者${message}

请输入您的姓名:
2.4开发控制层Action public class HelloWorldAction implements Action { // 用户输入的姓名 对应页面中input的name属性,需提供get和set方法 private String name = ""; // 向用户显示的信息 需要在页面中显示的内容,提供set和get private String message = ""; public String execute() { // 根据用户输入的姓名,进行"Hello,XXXX!"的封装 this.setMessage("Hello,"+this.getName()+"!"); // 处理完毕,返回导航结果的逻辑名 return "success"; } … //省略setter、getter方法 } 默认5个视图名称:success,error,none,input,login 5个常量字符串

2.5配置struts.xml文件

<!—注意struts2默认后缀为action,可修改–>


success.jsp

fail.jsp

<!—修改访问后缀—>


2.6部署、运行项目
3.Struts 2访问Servlet API的方式
在通常的web开发中Request和Response对象比较常见,但在Struts2框架中由于Action能与JSP页面进行数据交互,所以通常都不会用到这两个对象。如果想在Struts2程序中用到这两个对象,也有解决方法
Struts2的Action并未直接与任何Servlet API耦合,这是Struts2的一个改良之处 
Web应用中通常需要访问的Servlet API就是HttpServletRequest、HttpSession、ServletContext这3个类,分别代表JSP内置对象中的request、session、application。
 
3.1方法一:(推荐使用,IOC方式,能获得request,而response则得不到)
Struts2提供了ActionContext类,通过ActionContext类访问Servlet API。
  下面是ActionContext类中包含的几个常用方法。
 
1、public Object get(Object key): 取得HttpServletRequest中key的值;
2、void put(String key,Object value): 设置HttpServletRequest中key的值为value;
3、public Map getApplication(): 获取封装了ServletContext的Map对象;
4、void setApplication(Map application):设置ServletContext实例;
5、static ActionContext getContext(): 静态方法,获取系统的ActionContext实例;
6、Map getParameters(): 类似于HttpServletRequest中的getParametersMap方法;
7、public Map getSession(): 获取封装了HttpSession的Map对象;
8、void setSession(Map session):传入Map实例,将Map的key-value转换session属性名和属性值;
 
3.2方法二:(不推荐,麻烦,非IOC方式,与Servlet API耦合大)
虽然Struts2提供了ActionContext来访问Servlet API,但这种访问不能直接获得Servlet API,为了在Action中直接访问Servlet API,Struts2还提供了以下接口。
 
1、ServletContextAware:实现该接口的Action可以直接访问Web应用的ServletContext实例;
2、ServletRequestAware:实现该接口的Action可以直接访问用户请求对象的HttpServletRequest的实例;
3、ServletResponseAware:实现该接口的Action可以直接访问服务器响应的HttpServletResponse的实例;
 
3.3方法三:(非IOC方式,推荐使用)
Struts2还提供了一个ServletActionContext,是ActionContext的子类, 其静态方法有:getPageContext()、getRequest() 、getResponse()、getServletContext()。
 
1、HttpServletRequest request=ServletActionContext.getRequest();
request.getSession().setAttribute(“username”,“admin”);

2、HttpServletResponse response=ServletActionContext.getResponse();
request.setAttribute(“password”,“123456”);
3.4示例:
public class LoginAction implements Action {
private static final String CURRENT_USER = “CURRENT_USER”;
public String execute() {
if(“jason”.equals(username) && “2010”.equals(password)) {
Map<String,Object> session = ActionContext.getContext().getSession();
if(session.containsKey(CURRENT_USER)) {
session.remove(CURRENT_USER);
}
session.put(CURRENT_USER, username);
return “success”;
} else {
return “error”;
}
}
}
public class LoginAction implements Action {
private static final String CURRENT_USER = “CURRENT_USER”;
… //省略username、password属性及其setter和getter方法
public String execute() {
if(“jason”.equals(username) && “2010”.equals(password)) {
HttpSession session= ServletActionContext.getRequest().getSession(); if(session.getAttribute(CURRENT_USER) != null) {
session.removeAttribute(CURRENT_USER);
}
session.setAttribute(CURRENT_USER, username);
return “success”;
} else {
return “error”;
}
}
}

4.Struts 2提供了数据验证机制
继承ActionSupport类来完成Action开发
ActionSupport对Action接口进行简单实现,同时增加验证、本地化等支持
public class LoginAction extends ActionSupport{
public void validate() {
if(this.getUsername().length()==0){
addFieldError(“name”,“用户名不能为空”);
}
if (this.getPassword().length()==0){
addFieldError(“pwd”, “用户密码不能为空”);
}
}
}
对应页面显示:
使用<s:fielderror/>在页面显示所有错误或<s:fielderror fieldName=”name”/>指定错误
5.Struts 2标签
5.1常用UI标签
<s:form>…</s:form> 表单标签
<s:textfield>…</s: textfield> 文本输入框
<s:password>…</s: password> 密码输入框
<s:textarea>…</s: textarea> 文本域输入框
<s:radio>…</s: radio> 单选按钮
<s:checkbox>…</s: checkbox> 多选框
<s:submit/> 提交标签
<s:reset/> 重置标签
<s:hidden/> 隐藏域标签
<s:actionerror/> 显示Action错误
<s:actionmessage/> 显示Action消息
<s:fielderror/> 显示字段错误

注意:默认查看源码,会发现标签会生成tr,
可设置局部<s:form theme=”simple”>
可设置全局配置

5.2常用通用标签
注意:使用rquest和session中的值要添加#
条件标签 <s:if>……</s:if> 根据表达式的值,判断将要执行的内容
<s:elseif>……</s:elseif>
<s:else>……</s:else>
示例: age是Action中存在的get方法
<s:if test=“age>18”>成年</s:if>
<s:else>未成年</s:else>

取request的值判断
<s:if test=’#requestMsg!=""’>requestMsg是存在的</s:if>

迭代 <s:iterator value=“集合对象” status=“status” id=“name”>
读取集合对象并输出显示
</s:iterator>
示例:在Action中定义一个list属性,然后存值,在页面显示
list:<s:iterator value=“list” status=“str” id=“he”>
<s:if test="#str.Even"><s:property value=“he”/></s:if>
<s:else><s:property value=“he”/></s:else>
</s:iterator>
s:iterator 标签有3个属性:
    value:被迭代的集合
    id   :指定集合里面的元素的id
    status 迭代元素的索引
如果指定了status,每次的迭代数据都有IteratorStatus的实例,它有以下几个方法
int getCount()返回当前迭代了几个元素
int getIndex()返回当前元素索引
boolean isEven()当然的索引是否偶数
boolean isFirst()当前是否第一个元素
boolean isLast()
boolean isOdd()当前元素索引是否奇数
<!—注意单双原则–>
<s:iterator value=’{“a”,”b”,”c”}’ id=‘char’ status=‘st’> 
<s:if test="#st.Even"> 
        现在的索引是奇数为:<s:property value=’#st.index’/> 
    </s:if> 
    当前元素值:<s:property value=‘char’/> 
</s:iterator>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值