Struts2入门问题
一 使用Struts 2 开发程序的基本步骤
加载Struts2 类库
配置web.xml文件
开发视图层页面
开发控制层Action
配置struts.xml文件
部署、运行项目
第一步先导架包:在web-inf/lib:
| 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 | 包含了一些数据类型的工具类java.lang | 
第二步配置web.xml文件:
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>
将将全部请求定位到指定的Struts 2过滤器中
第三步配置jsp页面:
<div>
		<h1>
			<!--显示Struts 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>第四步写Action:
public class HelloWorldAction implements Action {
	// 用户输入的姓名
	private String name = "";
	// 向用户显示的信息
	private String message = "";
	public String execute() {
		// 根据用户输入的姓名,进行"Hello,XXXX!"的封装
		this.setMessage("Hello,"+this.getName()+"!");
		// 处理完毕,返回导航结果的逻辑名
		return "success";
	}
	…	//省略setter、getter方法
}
第五步:关键一步:
配置Struts 2配置文件(struts.xml)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<package name="default" namespace="/" extends="struts-default">
		<action name="helloWorld"
					class="cn.jbit.strutsdemo.HelloWorldAction">
			<result name="success">helloWorld.jsp</result>
		</action>
	</package>
</struts>
可以启动服务器,发布项目。
思考?如何在登录成功页面保存用户信息?
Struts 2访问Servlet API的方式
与Servlet API解耦的访问方式(建议)
与Servlet API耦合的访问方式
1.解耦方式:
public class LoginAction implements Action {
	private static final String CURRENT_USER = "CURRENT_USER";
	… //省略username、password属性及其setter和getter方法
	public String execute() {
		if("jbit".equals(username) && "bdqn".equals(password)) {
			Map<String,Object> session = null;
			session = ActionContext.getContext().getSession();
			if(session.containsKey(CURRENT_USER)) {
				session.remove(CURRENT_USER);
			}
			session.put(CURRENT_USER, username);
			return "success";
		} else {
			return "error";
		}
	}
}
2.耦合方式:
public class LoginAction implements Action {
	private static final String CURRENT_USER = "CURRENT_USER";
	… //省略username、password属性及其setter和getter方法
	public String execute() {
		if("jbit".equals(username) && "bdqn".equals(password)) {
			HttpSession session = null;
			session = ServletActionContext.getRequest().getSession(); 			                       if(session.getAttribute(CURRENT_USER) != null) {
				session.removeAttribute(CURRENT_USER);
			}
			session.setAttribute(CURRENT_USER, username);
			return "success";
		} else {
			return “error";
		}
	}
}
页面取值可以用EL表达式
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", "密码不能为空");
}
}
//......省略代码
}
可使用Struts2标签将错误消息展示在页面:
<%@ taglib prefix="s" uri="/struts-tags"%>
| <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:fielderror/>可以将显示服务器返回的错误信息。
常用通用标签:
| 条件标签 | <s:if>……</s:if> | 根据表达式的值, 判断将要执行的内容 | 
| <s:elseif>……</s:elseif> | ||
| <s:else>……</s:else> | ||
| 迭代 | <s:iterator>……</s: iterator > | 用于遍历集合 | 
<s:if test="表达式">
    需要执行的代码
</s:if>
<s:elseif test="表达式">
  需要执行的代码
</s:elseif>
<s:else>
    需要执行的代码
</s:else>
2.迭代
<s:iterator value="集合对象" status="status" id="name">
    读取集合对象并输出显示
</s:iterator>
value属性:需要进行遍历的集合对象
status属性:表示当前迭代对象的一个实例
id属性:当前迭代元素的id,可直接访问元素,该参数可选
Action的实现方式
实现Action接口
继承Action接口实现类ActionSupport类
Struts 2中提供了解耦和耦合两种方式实现对Servlet API的访问
ActionSupport类提供了对数据验证的支持
validate()方法
Struts 2提供强大的标签支持
表单标签
通用标签
Struts2入门问题的更多相关文章
- Struts2 入门
		一.Struts2入门案例 ①引入jar包 ②在src下创建struts.xml配置文件 <?xml version="1.0" encoding="UTF-8&q ... 
- Struts2入门3 深入学习
		Struts2入门3 深入学习 处理结果和异常 前言: Struts学习的差不多了,还有最后的一点就收官了就是结果处理和异常处理.前面学习Struts主要围绕就是Action以及struts.xml配 ... 
- Struts2入门2 Struts2深入
		Struts2入门2 Struts2深入 链接: http://pan.baidu.com/s/1rdCDh 密码: sm5h 前言: 前面学习那一节,搞得我是在是太痛苦了.因为在Web项目中确实不知 ... 
- Struts2入门1 Struts2基础知识
		Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ... 
- struts2入门程序
		struts2入门程序 1.示例 搭建编程环境就先不说了,这里假设已经搭建好了编程环境,并且下好了strut2的jar包,接下来程序. 1.1 新建web项目 点击File->New->D ... 
- struts2框架(1)---struts2入门
		struts2框架 如果你之前在MVC模式的时候一直都是通过servlet,获取和返回数据,那么现在开始学习struts2框架, Struts是一个实现MVC设计模式的优秀的框架.它的许多优点我就不说 ... 
- [java]struts2入门
		摘要 本文是struts2入门,配置教程.如何在IntelJ Idea中进行手动配置.在使用idea新建struts2web项目的时候,在下载jar包的过程中,下载失败,没办法就直接手动进行下载jar ... 
- ---web模型 --mvc和模型--struts2 入门
		关于web模型: 早期的web 应用主要是静态页丽的浏览〈如新闻的制监),随着Internet的发展,web应用也变得越来越复杂,不仅要 和数据库进行交互 ,还要和用户进行交互,由此衍生了各种服务器端 ... 
- Struts2入门示例(Myeclipse)
		1.新建Web项目在lib导入struts-2.3.37核心基础jar包 2.在WebRoot新建2个JSP demo1.jsp <%@ page language="java&quo ... 
- Struts2入门(六)——国际化
		一.前言 1.1.国际化简介 国际化是指应用程序在运行的时候,根据客户端请求来自的国家地区.语言的不同而显示不同的界面(简单说就是根据你的地区显示相关地区的语言,如果你现在在英国,那么显示的语言就是英 ... 
随机推荐
- C++列表初始化是初始化本类自身含有的成员变量,不能直接初始化继承过来的成员变量
			在构造函数体内赋值就是对的了 
- 《人件》读后感 PB16110698 第十周(~5.15)
			在同组马同学的推荐下,我阅读了<人件>一书.在我看来,本书与之前读过的几本软工书籍相比,最大的特色就是地地道道的“以人为本”:不同于<人月神话><构建之法>等结合软 ... 
- JS事件 鼠标移开事件(onmouseout)鼠标移开事件,当鼠标移开当前对象时,执行onmouseout调用的程序。
			鼠标移开事件(onmouseout) 鼠标移开事件,当鼠标移开当前对象时,执行onmouseout调用的程序. 当把鼠标移动到"登录"按钮上,然后再移开时,触发onmouseout ... 
- python中的 += 语法的使用
			python中有个缩略的写法,如下 a = a +1 等同于 a +=1 发现了一个有趣之处,+=的写法中间不能有空格,否则报错,测试如下 Python 3.7.1 (v3.7.1:260ec2c36 ... 
- Java 虚拟机 - 2.3 HotSpot虚拟机对象
			对象的创建 Step1 类加载检查 当发现一条new指令时,检查: 该指令的参数是否能在常量池中定位到一个类的符号引用: 并且检查这个符号引用代表的类是否已经被加载.解析和初始化过.如果没有,那必须先 ... 
- java实现单链表增删改查
			package 数据结构算法.链表; /* *定义节点 * 链表由节点构成 */ public class Node<E> { private E e; //数据data private ... 
- springboot启动报 A child container failed during start 错误解决过程
			启动结果如下: "C:\Program Files\Java\jdk1.8.0_201\bin\java.exe" -agentlib:jdwp=transport=dt_sock ... 
- 基于V8引擎的C++和JS的相互交互
			基于什么原因略! 1. 脚本引擎的基本功能 V8只是一个JS引擎.去除它的特点功能出处,它必须要实现JS引擎的几个基础功能: 脚本执行:脚本可能是一个表达式:一段js代码:或者一个文件执行表达式返回j ... 
- springboot下自定义配置文件,并在项目里读取的方法
			首先 pom文件引入springboot文件处理器 <dependency> <groupId>org.springframework.boot</groupId> ... 
- 查看linux的登录日志
			查看linux的登录日志 1. lastlog 列出所有用户最近登录的信息 lastlog引用的是/var/log/lastlog文件中的信息,包括login-name.port.last logi ... 
