Struts2

是SUN推出的开发模型。

是基于MVC开发模型的一个框架,属于表现层框架。

Struts2:Struts+WebWork框架


搭建开发环境

1.下载发行包

2.新建一个JavaWeb工程,拷贝jar包到lib目录中

3.在构建路径的顶端,创建一个配置文件 struts.xml

4.在web.xml中配置控制器映射

5.部署验证


小案例开发过程

1.发出请求给框架

<body>
    <a href="${pageContext.request.contextPath }/helloword.action">哈哈</a>
  </body>

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="p1" extends="struts-default">
		<action name="helloworld" class="qzq.haha.action.HelloWorldAction" method="sayHello">
			<result name="success">/success.jsp</result>
			<result name="error">/error.jsp</result>
		</action>
	</package>
</struts>

3.编写动作类和动作方法

package qzq.haha.action;

public class HelloWorldAction {
	public String sayHello(){
		System.out.println("hello world");
		return "success";
	}
}

4.编写success.jsp或error.jsp页面


编写Struts.xml配置文件没有提示

1.联网

2.没有联网:手动配置


Struts2的执行过程


Struts2的配置文件

1.Struts2框架会按照以下顺序加载配置文件

  a、default.properties:struts2-core**.jarorg.apache.struts包中(程序员只能看)

  b、struts-default.xml:struts2-core**.jar中(程序员只能看)

  c、struts-plugin.xml:在插件的jar包中(程序员只能看)

  dstruts.xml:在应用的构建路径顶端。自己定义的Struts配置文件(推荐)

  estruts.properties:在应用的构建路径顶端。程序员可以编写(不推荐)

  fweb.xml:配置过滤器时,指定参数。程序员可以编写(不推荐)

  特别注意:顺序是固定的。后面的配置会覆盖前面的同名配置信息。

2.代码验证

  Struts2的默认请求路径是***.action,改为***.do

此处默认配置在default.properties中

struts.action.extension=action,,

*struts.xml覆盖

 <constant name="struts.action.extension" value="do"></constant>

struts.properties覆盖

web.xml覆盖


3.更改Struts2默认的参数


4.package元素:

意义:分模块开发

属性:

  name:必须的。配置文件中要唯一。就是一个名字。

  extends:指定父包。会把父包中的配置内容继承下来。一般需要直接或间接的继承一个叫做“struts-default”的包(在struts-default.xml配置文件中)。如果不继承该包,那么Struts2中的核心功能将无法使用。

  abstract:是否是抽象包。没有任何action子元素的package可以声明为抽象包。

  namespace:指定名称空间。一般以”/”开头。该包中的动作访问路径:namesapce+动作名称。如果namespace=””,这是默认名称空间,和不写该属性是一样的。


5.action元素:

作用:定义一个动作。

属性:

  name必须的。动作名称。用户用于发起请求。在包中要唯一。

  class:指定动作类的全名。框架会通过反射机制实例化。默认是:com.opensymphony.xwork2.ActionSupport。

  method:指定动作类中的动作方法。框架会执行该方法。默认是execute()。


动作类

1.编写动作类的三种方法:

   a.POJO普通的JavaBean

package qzq.haha.action;

public class HelloWorldAction {
	public String sayHello(){
		System.out.println("hello world");
		return "success";
	}
}
  b.实现com.opensymphony.xwork2.Action接口

       Action接口中的常量:

       String SUCCESS:success。一切正常。

       String NONE:none。动作方法执行后,不转向任何的结果视图。或者在动作方法中返回null

       String ERROR:error。动作方法执行时遇到异常,转向错误提示页面。

       String INPUTinput。验证、转换失败,转向输入页面。

       String LOGINlogin。检测用户是否登录,没有登录转向此视图。


 c.继承com.opensymphony.xwork2.ActionSupport(推荐)

    意义:提供了一些基本的功能。比如验证和国际化消息提示等。


2.动作类中的动作方法

    编写要求:public String  XXX(){}


3.动作通配符映射

细节:

存在多个匹配的情况:

绝对匹配----->按照通配符匹配的配置顺序为准。

4.动作类方法调用:DMI(Dynamic Method Invocation)

注意:不建议使用。容易暴露动作类中的动作方法,害怕非法执行。


动作类中获取ServletAPI

方式一:推荐

方式二:

原因:

拦截器(servletConfig)给你注入的这些实例。


结果视图

局部和全局结果视图

1.局部视图:

<action name="demo" class="qzq.haha.cation.DemoAction">
     <result>/demo.jsp</result>
</action>

2.全局视图:多个动作对应一个视图

<package name="p1" extends="struts-default">
        <global-results>
		<result name="success" type="dispatcher">/demo1.jsp</result>
	</global-results>
</package>

result元素的配置

name:逻辑视图的名称,它对应的是动作方法的返回值。默认值:success

type:到达目标的形式,默认值:dispatcher 转发


struts2提供的结果类型(result type 属性)

在struts-default.xml中有定义

chain:用户转发到另一个动作。

             转发到不同名称空间中的另外一个动作

<result name="success" type="chain">
        <param name="namespace">/n2</param>
	<param name="actionName">demo2</param>
</result>

dispatcher:用于转发到另一个JSP页面

freemarker:用于转发到另外一个freemarker模板。(页面静态化)

velocity:用于转发到另外一个velocity模板

httpheader:用于输出http协议的消息头

xslt:XML有关的样式

redirect:用于重定向到另外一个JSP页面

redirectAction:用于重定向到另外一个动作

stream:用于文件下载

plainText:以纯文本的形式展现页面,输出源码


自定义结果视图

1.编写一个类,直接或间接实现 com.opensymphony.xwork2.Result 接口。一般继承 org.apache.struts2.dispatcher.StrutsResultSupport 类

2.声明结果类型,然后使用

<result-types name="captcha" class="qzq.haha.results.CaptachaResult"></result-types>

3.使用

<action name="captcha">
	<result name="success" type="captcha"></result>
</action>


封装请求参数

动态参数注入:

1.方式一

用Action动作类作为模型对象


2.方式二

动作类和模型分开

模型:

动作:

配置文件:

表单页面:


3.方式三

动作和模型分开

模型驱动:ModelDriven

模型:

动作:

配置文件:

JSP页面:


与Struts2的值栈有关

该功能是由一个叫做modelDriven的拦截器完成的


静态参数注入


两个拦截器完成参数注入功能的

动态参数注入:params

静态参数注入:staticParams


类型转换(...)



输入验证

1.编程式验证

编写验证代码:

  缺点:验证规则写到了代码中,硬编码。

  优点:验证时可以控制的更加精细。(用的少)

a、针对动作类中的所有动作方法进行验证

     1、动作类需要实现ActionSupport,覆盖掉public void validate(){}方法

     2、方法内部:编写你的验证规则,不正确的情况调用addFieldError添加错误信息

          动作类就是模型:

      动作类和模型分开:

不使用student.username这种方式添加错误信息s:fieldError标签中和普通标签中都有错误提示消息,使用了,将只会在s:fieldError中显示错误消息

     3、验证失败:

            视图:会自动转向一个name=input的逻辑视图

            错误消息提示:建议使用struts2标签库。如果没有显示请使用s:fieldError标签


a、针对动作类中的指定动作方法进行验证

方式一:简单。使用一个注解。

方式二:

如果一个动作方法名叫做regist

只针对该方法进行验证,请编写public void validateRegist(){}


2.声明式验证

优点:把验证规则写到了配置文件中。(用得多)

缺点:不是很精细。

 

错误视图和消息提示和编程式一致。

 

a、针对动作类中的所有动作方法进行验证

l  动作类就是模型:

在动作类所在的包中建立:动作类名-validation.xml配置文件。

u  动作类和模型分开:

在动作类所在的包中建立:动作类名-validation.xml配置文件。

 

 

b、针对动作类中的指定动作方法进行验证

在动作类所在的包中建立:动作类名-动作名(是请求的struts.xml配置文件中的)-validation.xml配置文件。

 

说明:验证功能是由validation拦截器来负责处理的。回显错误信息是由workflow拦截器来负责处理的。


3.Struts2中提供的内置声明式验证器的使用

Struts2提供的声明式验证器在xwork-core-**.jar包的

com\opensymphony\xwork2\validator\validators\default.xml配置文件中。



4.自定义声明式验证

编写一个类,继承FieldValidatorSupport


声明自定义的验证器

在构建路径顶端,建立一个固定名称为validators.xml的配置文件

使用


Struts2的国际化(...)


Struts2的拦截器

常用的拦截器(面试题):Struts2中功能核心。是一种AOP编程思想的具体应用。

modelDriven:模型驱动

servletConfig:获取ServletAPI

staticParams:静态参数注入

params:动态参数注入

validation:输入验证,声明式验证。

等等


自定义拦截器开发步骤

1.编写一个类,继承AbstractInterceptor抽象类


2.配置拦截器

3.使用拦截器


编写一个执行动作方法前验证用户是否登录的拦截器

(细粒度权限控制)

a、针对所有动作方法进行拦截的拦截器


b、开发功能更加强大的拦截器


文件的上传和下载

1.文件上传

必要前提:

表单的method必须是post

表单的enctype必须是multipart/form-data

提供input type=”file”类型上传输入域

Struts2 中,文件上传是由一个叫做 fileUpload 完成的

单文件上传

多文件上传


2.文件下载

名字为stream的结果类型处理文件下载。

1、动作类的书写遵守一定的规范

2.struts.xml配置文件



context上下文:数据中心


动作类的生命周期:每次访问都会重新创建新的动作类的实例。还会创建ActionContextValueStack的实例。ActionContextValueStack一直保持在你的线程中。(ThreadLocal



1、ActionContext的API:操作contextMap中的数据的

PS:ContextMapxwork中的东西,struts2的核心就是xwork中的ognl,但是为了方便使用,所以就在ContextMap的基础上添加了root,ContextMaproot栈组成了值栈


2、ValueStack的API:操作contextMap中根的数据


ValueStack的常用方法:


OGNL的其他用法

1、在JSP中使用ONGL显示contextMap/根中的数据

获取contextMap中的数据,OGNL表达式要用#开头


获取根(List)中的对象的属性,直接写属性的名称。会从栈顶的对象一致往下找。

2、OGNL的其他用法

a、在JSP中取数据,可以使用OGNL表达式,也可以使用EL表达式

EL表达式在Struts2中,被做了小小的改动。

Struts2对原始的HttpServletRequest(服务器提供)进行包装,

org.apache.struts2.dispatcher.StrutsRequestWrapper

b、在JSP页面中利用OGNL构造List对象和Map对象

c、字符串和OGNL互换


d、在配置文件中xml或properties也可以使用OGNL表达式,请使用${ognl}


Struts2中的常用标签


Struts2中的UI常用标签

Struts2中的UI主题

1、提供的主题:simple(实际用)、xhtml(默认)、css_xhtml、ajax

2、修改struts2使用的主题:配置全局参数

<constant name="struts.ui.theme" value="simple"></constant>

防止表单重复提交

1、在表单中添加一个s:token

  a、向HttpSession中存放了一个令牌

  b、向表单中产生一个隐藏域,存了令牌

2、执行动作方法前,有一个叫做token的拦截器负责处理




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值