8.Struts 2入门

官方地址:http://struts.apache.org

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使用
语法:

扫描二维码关注公众号,回复: 4311956 查看本文章
<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可以访问当前的迭代元素

猜你喜欢

转载自blog.csdn.net/qq_43051879/article/details/84659634