`

struts2的详解以及怎么使用struts2?

阅读更多
Struts2简介:
一、MVC
Model 1:将所有的程序代码,都写到JSP页面中。
Model 2:JSP(流程控制、数据显示) + JavaBean
改进的Model2:Servlet(流程控制) + Jsp(数据显示) + JavaBean(业务逻辑、数据处理)
MVC:将整个应用程序划分为3大组件(Model、View、Controller)
注意:MVC和三层不是一回事。
二、Struts2简介
struts2是一个典型的MVC框架。
struts2 = Struts1 + WebWork
struts2下载包的目录结构:apps(示例程序)、docs(帮助文档)、lib(jar包)、src(源码)
三、Struts2项目的开发流程
1.创建web项目
2.导入struts2相关的Jar包
提示:可以解压apps目录下的struts-blank.war,从它的lib目录中拷贝相关的jar包
在web.xml文件中配置struts2的核心控制器(过滤器)
  <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.在src中添加struts.xml文件
5.创建Action类,并添加Action方法
方式一:实现接口Action
常量:INPUT(input)、SUCCESS(success)、ERROR(error)、LOGIN(login)、NONE(none)
方式二:继承类ActionSupport
方式三:POJO类
6.在struts.xml文件中配置action节点
7.编写JSP页面
四、struts.xml配置详解
1.struts2的常量,可以在struts.xml的constant中设置,也可以单独写到struts.properties中。
2.result节点的type属性
dispatcher:转发(JSP),默认值
redirect:重定向(JSP或外部url)
redirectAction:重定向到其他的action
chain:转发到其他的action
stream:文件下载
json:ajax请求时,一般以json格式串返回
3.常见配置介绍
result的name属性可以省略,默认值为success
result的type属性可以省略,默认值为dispatcher
用户访问的url地址,为namespace+actionName
  <?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>
<!-- 设置struts2的常量 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<!-- 可以有多个package节点 -->
<!-- name:每个package的name值都不能相同,必填
namespace:命名空间(URL地址的一部分)
extends:一般都要继承struts-default包  -->
<package name="default" namespace="/" extends="struts-default">
<!-- 结果类型 -->
<result-types>
<result-type name="" class=""></result-type>
</result-types>
<!-- interceptors用户声明所有的拦截器 -->
<interceptors>
<!-- interceptor声明拦截器 -->
<interceptor name="" class=""></interceptor>
<!-- 配置拦截器栈(多个拦截器可以构成拦截器栈) -->
<interceptor-stack name="">
<!-- 引用的拦截器,可以是一个拦截器栈 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 配置默认的拦截器 -->
<default-interceptor-ref name=""></default-interceptor-ref>

<!-- 默认的action。当用户在浏览器地址栏中没有输入任何action时,将访问本节点配置的action -->
<!-- http://localhost:8080/projectname/ -->
<default-action-ref name="login"></default-action-ref>
<!-- 默认的action类(当action节点省略时,将使用本节点配置的类) -->
<default-class-ref class=""></default-class-ref>
<!-- 全局的result -->
<global-results>
<result name="login" type="dispatcher">/login.jsp</result>
<result name="error" type="dispatcher">/error.jsp</result>
</global-results>
<!-- 全局的异常映射 -->
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
<exception-mapping result="error" exception="java.sql.SQLException"></exception-mapping>
<exception-mapping result="error" exception="java.lang.NullPointerException"></exception-mapping>
</global-exception-mappings>

<!-- action可以有多个(name必填;class和method可以省略;method如果省略默认为execute) -->
<action name="login" class="" method="">
<!-- name可以省略,默认值为success;type可以省略,默认值是dispatcher -->
<result name="" type=""></result>
</action>
</package>
<!-- 导入其他的struts配置文件,不管有多少个struts的配置文件,struts2框架而言,只会加载struts.xml,所有需要将其他的配置文件导入到struts.xml文件中 -->
<include file=""></include>
</struts>
五、拦截器
1.定义拦截器
实现接口:Interceptor
继承类:AbstractInterceptor
2.配置拦截器
首先,在Interceptors节点下添加Interceptor节点;
其次,要么在action中通过interceptor-ref使用拦截器,要么配置default-interceptor-ref
3.注意
一旦使用了自定义的拦截器,那么struts2提供的默认的拦截器defaultStack将不再起作用。
怎么破?新添加一个拦截器栈,里面添加对自定义拦截器和defaultStack的引用,然后将这个拦截器栈设置为默认的拦截器。
4.struts2提供的拦截器
params拦截器
validation拦截器
fileUpload拦截器
workflow拦截器
… …
六、文件上传
1.jsp页面的form标记,method属性值必须为post
2.jsp页面的form标记,必须添加enctype=multipart/form-data属性
3.jsp页面中使用type=file的文件域
4.添加apache文件上传的jar包:commons-fileupload、commons-io
5.在Action类中添加三个属性:
  private  File  xxx;
  private  String  xxxFileName;
  private  String  xxxContentType;
6.在action方法中实现文件的保存
避免文件名重名时文件被覆盖:uuid作为文件名
数据库中存储的文件路径一定要是相对路径
如何获取项目中指定目录的绝对路径
String path = ServletActionContext.getServletContext().getRealPath(“files”);
7.限制文件大小和文件类型
通过设置fileUpload拦截器的参数即可实现。
maximumSize:限制文件上传的大小
allowedTypes:限制文件上传的类型
<constant name="struts.multipart.maxSize" value="1024000"></constant>
<interceptor-ref name="fileUpload">
<!--配置允许上传的文件类型-->
<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
<!--配置允许上传的文件大小单位字节-->
<param name="maximumSize">5242880</param>
</interceptor-ref>
8.多文件上传
只需要将action中的那三个属性设置为数组即可
private  File[]  xxx;
private  String[]  xxxFileName;
private  String[]  xxxContentType;
七、文件下载
1.在action中必须存在一个InputStream类型的属性,并且该属性具有get方法
2.在struts.xml的action的result节点中,type属性值为stream
<result name=”xxx” type=”stream”>
  <param name=”contentType”></param>
<param name=”inputName”>类型为inputstream的属性名</param>
<param name=”contentDisposition”>
  attachment;filename=”${fileName}”
</param>
</stream>
八、 struts2中如何使用servlet api
1.方式一(耦合)
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = ServletActionContext.getRequest.getSession();
HttpServletResponse response = ServletActionContext.getResponse();
ServletContext application = ServletActionContext.getServletContext();
2.方式二(非耦合)
Map<String, Object> request = (Map<String, Object>) ActionContext.getContext().get(“request”);
Map<String, Object> session = ActionContext.getContext().getSession();
Map<String, Object> application = ActionContext.getContext().getApplication();
3.方式三(非耦合)
让Action类实现接口:RequestAware、SessionAware、ApplicationAware
九、OGNL
1.ognl:对象图导航语言
2.ognl和el相似,都是用来简化jsp中的java代码
3.ongl可以从2个地方获取数据
ValueStack:值栈。一般值栈中只会存放当前Action类的对象。
ActionContext:application、session、request、pageContext、parameters、attr。
注意:值栈中的数据可以直接通过名字获取;但是ActionContext中的数据则需要添加前缀#
#application
#session
#request
#pageContext
#paramteters
#attr
其中attr表示依次从pageContext、request、session、application中获取数据。
十、struts2的标签
1.jstl- JSP标准标签库
核心标签
forEach、choose、when、otherWise、if
格式化标签
formatDate、formatNumber
2.struts2提供的标签
form、iterator、if、else、select、checkbox、checkboxlist、radio、fielderror
十一、数据校验
1.客户端验证
通过javascript脚本验证用户数据是否合法
<form>
  <input type=”submit” value=”save Data” onclick=”return checkFormData();” />
</form>
<script type=”text/javascript”>
function checkFormData(){
  … …
  return true|false;
}
</script>
注意:客户端验证是不安全的。用户可以通过禁用js脚本让js代码失效;用户也可以使用HttpRequest来模拟用户请求来避免js验证。
2.服务器端验证
服务器端的验证不能省。
如果没有通过数据校验,那么默认返回input。
如果数据类型转换失败了,那么仍然会执行数据校验。
如果没有通过数据校验,那么肯定不再执行目标action方法。
重写父类ActionSupport的validate方法
该Action类中所有的action方法都会被验证。
在Action类中添加验证方法validateXxx方法
该验证方法只对xxx方法起作用。
在Action类同一个包中添加xml验证文件
只对特定的action方法起作用。最大的好处就是不用再编写java验证代码。
验证文件的格式:ActionClassName-actionAlias-validation.xml。
struts2内置的校验器:
required:必填校验器
requiredstring:必填字符串校验器(trim)
int:整数校验器
stringlength:字符串长度校验器(minLength、maxLength)
regex:正则表达式校验器
date:日期校验器
double:双精度校验器
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.2//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="user.userName">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">10</param>
<message>用户长度必须介于${minLength}-${maxLength}之间</message>
</field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>密码不能为空</message>
</field-validator>
</field>
<field name="user.phone">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>手机号不能为空</message>
</field-validator>
<field-validator type="regex">
<param name="regex">^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$</param>
<message>手机号码格式错误</message>
</field-validator>
</field>
</validators>
十二、国际化
1.国际化
同一套应用程序,针对不同语系、不同地区的用户显示特定的语言文字。
zh-CN、zh-HK、zh-TW、en-US、
2.本地化
针对不同语系、不同地区添加不同的资源文件
3.struts2中如何实现国际化
首先,在struts.xml文件中配置常量
<constant name="struts.custom.i18n.resources" value="message"></constant>
其次,添加名称为message的资源文件
message_zh_CN.properties
message_en.properties
message.properties
最后,在JSP页面中使用s:text来显示文字,在数据验证文件中使用<message key=”key”>
十三、ajax
1.ajax的定义
异步的javascript和xml。
2.ajax的作用
异步请求,局部刷新
3.ajax基本概念
ajax不是一种单独的技术,它涉及javascript、css、XMLHttpRequest等。它的核心组件是XMLHttpRequest,但是不同的浏览器对XMLHttpRequest的支持不同,所以在创建它的对象时,要分别对浏览器做出判断。因此在实际开发过程中,我们很少编写原生的ajax代码,而是使用jquery等框架提供的ajax函数来快速实现ajax效果。
4.XMLHttpRequest
open(method, url, async)
method:get|post请求发送的类型
onreadystatechange
请求状态改变事件,需要挂载function。
readyState==4    status==200   表示成功
send(data)
向服务器正式发送请求
5.jquery提供的ajax函数
load(url)
加载指定url请求的结果
$.get(url, parameter, callback, type)
以get方式向服务器发送请求
url:请求的地址
parameter:请求的参数,一般是json格式的对象{id:5, name:”zhangsan”}
callback:回调函数function(data){},其中data代表服务器返回的结果
type:text|json|html|xml
$.post(url, parameter, callback, type)
以post方式向服务器发送请求。参数同$.get一样。
$.getJSON(url, parameter, callback)
以get方式向服务器发送请求。返回的结果为json格式。
$.ajax({})
最底层的ajax函数。上面的所有函数都可以通过本函数实现。
$.ajax({
url:url地址,
type: “get|post”,
data:{id:5, name:”zhangsan”},
dataType: “json”,
success:  function(data){},
error: function(xhr){}
});
分享到:
评论

相关推荐

    struts2框架详解

    Struts2框架详解 Struts2是Java Web开发中的一款广泛应用的开源MVC框架,它构建在Apache Struts 1的基础上,提供了更为强大的功能和更好的灵活性。Struts2旨在简化Web应用开发,通过将表现层与业务逻辑层解耦,提高...

    struts2常量详解

    默认使用`org.apache.struts2.config.DefaultConfiguration`。 - **struts.locale**: 设定Web应用的默认区域设置,影响日期、货币和数字格式等。 - **struts.i18n.encoding**: 指定Web应用的默认字符编码,对处理...

    Struts2配置详解

    ### Struts2配置详解 #### 一、总览 在深入了解Struts2的配置细节之前,我们先来简要概述一下Struts2框架的核心特点及其配置文件的基本结构。Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web...

    struts2深入详解源码1-5章

    本资料包包含的是《Struts2深入详解》一书的源码分析,涵盖了从第一章到第五章的内容,并附带了相关的jar包,方便读者结合理论与实践进行学习。 首先,让我们从第一章开始,Struts2的基础知识。这一章通常会介绍...

    Struts2深入详解 源码

    Struts2深入详解一书的源代码,Struts2深入详解

    Struts2的常量详解

    Struts2是一个流行的Java web应用程序框架,用于构建MVC(模型-视图-控制器)架构的应用。它提供了许多内置功能,如国际化、异常处理、插件扩展等,以简化开发流程。在Struts2中,配置是至关重要的,因为它们定义了...

    Struts2属性文件详解

    ### Struts2属性文件详解 #### struts.configuration 该属性用于指定加载Struts 2配置文件的配置文件管理器,默认值为`org.apache.struts2.config.DefaultConfiguration`,这是Struts 2默认的配置文件管理器。若...

    Struts2 深入详解课本代码

    在深入详解Struts2的课本代码中,我们可以看到一系列章节对应的不同代码示例,包括`ch01`、`ch02`、`ch03_1`、`ch03_2`、`ch03_3`和`ch03_4`。这些章节通常会涵盖以下几个重要的知识点: 1. **Struts2基础概念**:...

    Struts2开发详解

    Struts2提供了内置的验证框架,可以在Action类中定义验证规则,或者使用XML文件进行外部化验证。验证框架可以在用户提交表单前检查输入数据,防止无效数据进入系统,提高数据质量。 **4. 国际化** Struts2支持多...

    struts2标签详解(经典)

    struts2标签详解(经典)struts2标签详解(经典)struts2标签详解(经典)

    struts2入门实例教程详解

    ### Struts2入门实例教程详解 #### 一、环境搭建与基本配置 在开始学习Struts2框架之前,首先需要确保开发环境的正确搭建。根据提供的文档,所使用的开发工具为MyEclipse6,Web服务器为Tomcat6,Struts版本为...

    struts2常量设置详解 struts2常量设置详解

    ### Struts2常量设置详解 #### 一、概述 在Struts2框架中,配置文件`struts.properties`用于定义一系列重要的系统级配置项,这些配置项对框架的行为模式和功能实现起着至关重要的作用。本文将详细介绍该文件中几个...

    Struts 2 技术详解:基于WebWork核心的MVC开发与实践

    Struts 2 是一个强大的Java Web应用程序框架,它基于Model-View-Controller(MVC)设计模式,提供了灵活的架构来构建可维护性和扩展性良好的Web应用。在深入讲解Struts 2之前,我们先来了解一下MVC模式的基本概念。 ...

    Struts2中Struts.xml配置文件详解

    "Struts2 中 Struts.xml 配置文件详解" Struts2 中的 Struts.xml 配置文件是 Struts2 框架的核心配置文件,用于定义应用程序的行为和结构。在 Struts.xml 文件中,我们可以定义 package、action、interceptor、...

    struts2注解详解

    ### Struts2 注解详解 #### 一、Struts2 Convention 插件介绍与使用 在 Struts2 框架的发展过程中,随着版本的更新和技术的演进,其配置方式也发生了变化。从 Struts2.1 版本开始,官方不再推荐使用 Codebehind ...

    详解Struts2拦截器

    ### Struts2拦截器详解 #### 一、Struts2拦截器概述 Struts2框架作为Java Web开发中的一种流行框架,其核心组件之一便是**拦截器**。拦截器不仅在Struts2中扮演着重要角色,更是整个框架灵活性与扩展性的基石。...

Global site tag (gtag.js) - Google Analytics