一 使用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入门问题的更多相关文章

  1. Struts2 入门

    一.Struts2入门案例 ①引入jar包 ②在src下创建struts.xml配置文件 <?xml version="1.0" encoding="UTF-8&q ...

  2. Struts2入门3 深入学习

    Struts2入门3 深入学习 处理结果和异常 前言: Struts学习的差不多了,还有最后的一点就收官了就是结果处理和异常处理.前面学习Struts主要围绕就是Action以及struts.xml配 ...

  3. Struts2入门2 Struts2深入

    Struts2入门2 Struts2深入 链接: http://pan.baidu.com/s/1rdCDh 密码: sm5h 前言: 前面学习那一节,搞得我是在是太痛苦了.因为在Web项目中确实不知 ...

  4. Struts2入门1 Struts2基础知识

    Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...

  5. struts2入门程序

    struts2入门程序 1.示例 搭建编程环境就先不说了,这里假设已经搭建好了编程环境,并且下好了strut2的jar包,接下来程序. 1.1 新建web项目 点击File->New->D ...

  6. struts2框架(1)---struts2入门

    struts2框架 如果你之前在MVC模式的时候一直都是通过servlet,获取和返回数据,那么现在开始学习struts2框架, Struts是一个实现MVC设计模式的优秀的框架.它的许多优点我就不说 ...

  7. [java]struts2入门

    摘要 本文是struts2入门,配置教程.如何在IntelJ Idea中进行手动配置.在使用idea新建struts2web项目的时候,在下载jar包的过程中,下载失败,没办法就直接手动进行下载jar ...

  8. ---web模型 --mvc和模型--struts2 入门

    关于web模型: 早期的web 应用主要是静态页丽的浏览〈如新闻的制监),随着Internet的发展,web应用也变得越来越复杂,不仅要 和数据库进行交互 ,还要和用户进行交互,由此衍生了各种服务器端 ...

  9. Struts2入门示例(Myeclipse)

    1.新建Web项目在lib导入struts-2.3.37核心基础jar包 2.在WebRoot新建2个JSP demo1.jsp <%@ page language="java&quo ...

  10. Struts2入门(六)——国际化

    一.前言 1.1.国际化简介 国际化是指应用程序在运行的时候,根据客户端请求来自的国家地区.语言的不同而显示不同的界面(简单说就是根据你的地区显示相关地区的语言,如果你现在在英国,那么显示的语言就是英 ...

随机推荐

  1. scrapy不抓取重复的网页解决办法

    1.scrapy爬虫遇到一个问题,有时候会对一个网页重复爬取提取不同的数据,这时候会发现,后面的那个重复爬取scrapy直接终止了. 原因: scrapy 的request逻辑里面  dont_fil ...

  2. Activiti学习笔记4 — 流程实例化

    1.创建流程引擎对象 private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); 2.启动流程 流程 ...

  3. Matplotlib---柱状图、直方图(高斯分布)

    # _*_ coding: gbk _*_ # @Author: Wonde # bar 直方图 import matplotlib.pyplot as plt # 绘图 from matplotli ...

  4. thinkphp 判断请求类型

    判断请求类型 在很多情况下面,我们需要判断当前操作的请求类型是GET .POST .PUT或 DELETE,一方面可以针对请求类型作出不同的逻辑处理,另外一方面有些情况下面需要验证安全性,过滤不安全的 ...

  5. duilib教程之duilib入门简明教程14.部分bug 2

    上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃      如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口都用new生成,_t ...

  6. NOI2001 炮兵阵地 洛谷2704

    题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P&quo ...

  7. MindManager全部快捷键(官方英文文档+中文翻译)

    MindManager全部快捷键 [中文翻译版] ------------------------------------------------------------- 导图文件 创建一个新的导图 ...

  8. day20_函数的闭包 与 装饰器

    #!/usr/bin/env python # -*- coding:utf-8 -*- # # 一些文章 # https://www.cnblogs.com/Vae1242/p/6944338.ht ...

  9. tomcat部署war和war exploded区别和intellij idea部署项目的位置

    tomcat部署war和war exploded区别和intellij idea部署项目的位置 来自https://blog.csdn.net/u013041642/article/details/7 ...

  10. File、FileFilter、递归初步

    java.io.File 文件和目录 路径名的抽象表示形式 文件:File 存储数据的 目录:Directory 文件夹 用来存储文件 路径:Path 定位具有平台无关性 在任意平台都可以使用 Fil ...