第二章 Struts 2的应用
2.1 Struts 2的应用
2.1.1 使用步骤
1、创建web项目,添加jar包,创建helloWorld.jsp页面
2、创建HelloWorldAction类,用于对用户的请求作出处理
public class HelloWorld implements Action {
//用户输入的姓名
private String name = "";
//向用户显示的信息
private String message = "";
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;
}
@Override
public String execute() throws Exception {
this.setMessage("Hello,"+this.getName()+"!");
return "success";
}
}
3、修改项目配置文件web.xml,将所有请求定位到指定当的Struts 2 过滤器中
<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>
4、创建Struts 2配置文件
Struts.xmll:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.ui.theme" value="simple"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="helloWorld" class="cn.jbit.strutsdemo.HelloWorld">
<result name="success">helloWorld.jsp</result>
</action>
<action name="login" class="cn.jbit.strutsdemo.loginAction">
<result name="loginInfo">loginInfo.jsp</result>
<result name="login">login.jsp</result>
<result name="input">login.jsp</result>
</action>
</package>
</struts>
总结步骤:
1、确认环境
1、将Struts 2框架支持文件引入项目
2、修改工程的web.xml文件,配置过滤器
2、代码编写
1、编写开发处理求求的Action类,实现处理请求的方法,返回一个字符串类型的结果
2、编写Struts.xml文件,对Action进行配置
3、编写与Action相关的JSP页面
2.2 Struts 2访问servletAPI对象
1、使用ActionContex类获取ServletPAI对应的Map对象
request:ActionContext ac=ActionContext.getContext();
Map request=(Map)ac.get("request");
session: ActionContext ac=ActionContext.getContext();
Map session=(Map)ac.get("session");
application:ActionContext ac=ActionContext.getContext();
Map application=(Map)ac.get("application");
2、Struts 2 向Action注入ServletAPI对象对应的Map对象
org.apache.struts2.interceptor.RequestAware:向Action实例注入HttpServletRequest对象对应的Map对象
public void setRequest(Map<String,Object>request);
org.apache.struts2.interceptor.SessionAware:向Action实例注入HttpSession对象对应的Map对象
public void setSession(Map<String,Object>Session);
org.apache.struts2.interceptor.ApplicationAware:向Action实例注入ServletContext对象对应的Map对象
public void setApplication(Map<String,Object>Application);
与Servlet API耦合的访问方式
使用ServletActionContext类获取ServletAPI对象
HttpServletRequest = public static HttpServletRequest getRequest();
ServletCOntext = public static ServletContext getServletContext();
HttpServletResponse = public static HttpServletResponse getResponse();
使用HttpServletRequest可以获得HttpSession对象
除了使用ServletActionContext获取ServletAPI对象,还可以实现特定的接口实现注入Action实例注入ServletAPI对象
ServletContext :void setServletCOntext(ServletCOntext context);
HttpServletRequest :void serServletRequest(HttpServletRequest request);
HttpServletResponse :void setServletResponse(HttpServletResponse response);
2.3 Struts 2数据校验
通过继承ActionSupport类实现数据验证机制
例: public void validate(){
if(this.getUsername().length()==0||"".equals(this.getUsername())){
addFieldError("name", "用户名不能为空");
}
if(this.getPassword().length()==0||"".equals(this.getPassword())){
addFieldError("pwd", "密码不能为空");
}
}
2.4 Struts 2标签
UI标签
表单标签:
<s:form></s:form>:获取相应form的值
<s:textfied></s:textfied>:文本输入框
<s:password></password>:密码输入框
<s:textarea></textarea>:文本域输入框
<s:radio></s:radio>:单选按钮
<s:checkbox></s:checkbox>:复选框
<s:submit/>:提交标签
<s:reset/>:重置标签
<s:hidden/>:隐藏域标签
例:<s:form action="login.action">
<div>用户名:<s:textfield name="username"/></div>
<div>密码:<s:password name="password"/><br></div>
<div><s:submit value="提交"/></div>
</s:form>
<font color="red"><s:property value="text"/><s:fielderror/></font>
非表单标签
Ajax标签
通用标签
条件标签:
<s:if>
需执行的代码
</s:if>
<s:elseif>
需执行的代码
</s:elseif>
<s:else>
需执行的代码
</s:else>
迭代标签:<s:iterator value="集合对象" status="status" id="name">
读取集合对象并输出显示
</s:iterator>
第二章 Struts 2的应用的更多相关文章
- 《精通Spring4.x企业应用开发实战》第二章
昨天联系了一下学长,学长说这个项目因为种种原因代码比较混乱,感觉最坏的打算是从头开始写. 大概询问了一下学长和xianhua学姐的建议,又看了看网上的资料,这个项目开发的技术栈基本就是SpringBo ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...
- Jenkins入门系列之——02第二章 Jenkins安装与配置
2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之——03 ...
- Python黑帽编程 2.0 第二章概述
Python黑帽编程 2.0 第二章概述 于 20世纪80年代末,Guido van Rossum发明了Python,初衷据说是为了打发圣诞节的无趣,1991年首次发布,是ABC语言的继承,同时也是一 ...
- 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型
第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...
- Asp.Net MVC4 + Oracle + EasyUI 学习 第二章
Asp.Net MVC4 + Oracle + EasyUI 第二章 --使用Ajax提升网站性能 本文链接:http://www.cnblogs.com/likeli/p/4236723.html ...
- 数据结构与算法分析C++表述第二章编程题
把昨天看的第二章巩固一下,做一做编程习题. 2.6: 第一天交2元罚金,以后每一天都是前一天的平方,第N天罚金将是多少? 这个题目和2.4.4-3介绍的幂运算基本一致.若按相同的递归思路分析,比那个问 ...
- 【vue.js权威指南】读书笔记(第二章)
[第2章:数据绑定] 何为数据绑定?答曰:数据绑定就是将数据和视图相关联,当数据发生变化的时候,可以自动的来更新视图. 数据绑定的语法主要分为以下几个部分: 文本插值:文本插值可以说是最基本的形式了. ...
随机推荐
- C#的for循环使用方法
for循环是程序语言开发中常见的技法之一,这类循环可以执行指定的次数,并维护它自己的计数器,要定义for循环,需要下述信息:1.初始化计数器变量的一个起始值;2.继续循环的条件,它应涉及到计数器变量; ...
- 电子器件行业ERP实施案例
XX有限公司是一家致力于能源需求侧管理,为工业,建筑,交通等终端能耗领域提供系统高效的能源管理解决方案的中港合资企业,作为最早从事电力计量与采集的省级高新技术企业,自2001年成立以来,专注于用户侧智 ...
- 【曝】苹果应用商店逾千款iOS应用存安全漏洞
据国外网站Ibtimes报道,知名网络安全公司FireEye日前警告称,由于一款名为“JSPatch”.可帮助开发者修改应用程序的软件上存在安全漏洞,导致苹果应用商店内1000多款使用了该框架的iOS ...
- jquery ajax标准写法
$.ajax({ url:url, //地址 type:'post', //请求方式 还可以是get type不可写成Type 不让会导致数据发送不过去,使用 ...
- [POJ1028]Web Navigation(栈)
这题是01年East Central North的A题,目测是签到题 Description Standard web browsers contain features to move backwa ...
- Java集合学习笔记
在Java中,我们经常听到Collections框架.Collection类以及Collections类.这三者名字相似,但是从概念上讲却是不同的.Collections框架泛指Java中用于存储 ...
- Adapter基本用法
使用流程 graph LR A(新建适配器) -->B(绑定数据源) B-->C(设置适配器) 1. ArrayAdapter new ArrayAdapter<?>(cont ...
- 基于AGS JS开发自定义贴图图层
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.前言 假设一个景区有多张图片需要在地图上展示,并且随着地图的缩放而缩 ...
- JavaScript数据结构——链表的实现
前面楼主分别讨论了数据结构栈与队列的实现,当时所用的数据结构都是用的数组来进行实现,但是数组有的时候并不是最佳的数据结构,比如在数组中新增删除元素的时候需要将其他元素进行移动,而在javascript ...
- (11)连个工具类之间的比较4.Collections与Arrays
集合框架中的工具类:特点:该工具类中的方法都是静态的. Collections:常见方法: 1, 对list进行二分查找: 前提该集合一定要有序. int binarySearch(list,key) ...