1.Strut2 应用
基础jar包
文件名 | 说明 |
---|---|
struts2-core-xxx.jar | Strut2框架的核心类库 |
xwork-core-xxx.jar | XWork类库,Struts2的构建基础 |
ognl.xxx.jar | Struts2使用的一种表达式语言类库 |
freemarker-xxx.jar | Struts 2标签模板是用来类库 |
javassist-xxx.GA.jar | 对字节码进行处理 |
commons-fileupload-xxx.jar | 文件上传需要使用 |
commons-io-xxx.jar | java IO 拓展 |
commons-lang.xxxx.jar | 包含了一些数据类型的工具类 |
第一个Struts 2程序
(1).创建helloworld.jsp页面
<%@ page language="java" import="java.util.*"
contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>helloWorld</title>
</head>
<body>
<div>
<h1>
<!-- 显示action中message的值-->
<s:property value="message" />
</h1>
</div>
<div>
<form action="helloWorld.action" method="post">
请输入姓名: <input name="name" type="text" />
<input type="submit" value="提交">
</form>
</div>
</body>
</html>)
(2).创建一个helloworldAction类
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
public class HelloWorldAction implements Action {
private String name = "";
private String message = "";
public String execute() throws Exception {
this.setMessage("hello,"+this.getName()+"!");
return "helloWorld";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
(3).修改项目的配置文件web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<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>
(4).创建Struts 2的配置文件.在src目录下创建struts.xml文件
<?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="helloWorld" class="action.HelloWorldAction">
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
</action>
</package>
</struts>
(5).编译部署启动服务器
对Struts2应用的执行流程简单总结:
1.浏览器发出helloWorld.action请求到服务器
2.服务器接收后,根据web.xml的配置,将请求发送到指定的Struts2过滤器
3.过滤器根据Struts.xml的配置内容,将请求发送到helloworldAction类的对象,并调用默认的execute方法
4.根据execute方法的返回结果,在struts.xml文件中匹配helloworld处理结果,完成helloworld.jsp页面的跳转
5.页面根据上下文中的内容,借助struts2的ognl表达式和struts2标签将内容显示到页面中,不过在使用struts2标签时,先导入标签库
2.Struts 2访问Servlet API 对象
1.解耦方式访问
1.1ActionContext 访问
Map<String,object> session=ActionContext.getContext.getSession
session.put("USER",user);
1.2实现SessionAware接口,重写setSession方法
public void setSession(Map<String,Object> arg0)
{
arg0.put("USER",user);
}
2.耦合方式访问
2.1 ServletActionContext 访问
ServletActionContext.getRequest().getSession().setAttribute("USER",user);
2.2 实现ServletRequestAware接口,重写 setServletRequest()方法
public void setServletRequest(HttpServlcetRequest arg0)
{
request =arg0;
}
3.Struts 2 的数据校验
继承ActionSupport 类,添加validate()方法跳转到input试图页面,<s:fielderror>返回校验
4.Struts 2标签
UI标签(UI Tag)和通用标签(Generic Tag)
使用时导入标签库(<%@taglib uri="/struts-tags" prefix=“s”%>)
UI标签
表单标签,非标单标签,Ajax标签
表单标签
标签 | 说明 |
---|---|
<s:form></s:form> | 获取相应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:if></s:if> <s:elseif></s:elseif> <s:else></s:else> |
迭代标签 | <s:iterator></s:iterator> |
1.if/elseif/else标签
注意:三个标签只有<s:if>可以单独使用
三个标签可以组合使用,但是<s:else if>标签与<s:else>标签不能单独使用,必须与if标签结合使用
if标签可以与多个elseif结合使用,但是只能与一个else使用
语法:
<s:if test="表达式">
需要执行的代码
</s:if>
<s:elseif test="表达式">
需要执行的代码
</s:elseif>
<s:else test="表达式">
需要执行的代码
</s:elseif>
2.iterator迭代
语法:
<s:iterator value=“集合对象” status=“status” id=“name”>
</s:iterator>
value :需要进行遍历的集合对象
status 当前迭代的一个对象
id 当前迭代的id,用id可以访问当前的迭代元素