struts2重点.docx

上传人:b****3 文档编号:5352072 上传时间:2022-12-15 格式:DOCX 页数:30 大小:408.09KB
下载 相关 举报
struts2重点.docx_第1页
第1页 / 共30页
struts2重点.docx_第2页
第2页 / 共30页
struts2重点.docx_第3页
第3页 / 共30页
struts2重点.docx_第4页
第4页 / 共30页
struts2重点.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

struts2重点.docx

《struts2重点.docx》由会员分享,可在线阅读,更多相关《struts2重点.docx(30页珍藏版)》请在冰豆网上搜索。

struts2重点.docx

struts2重点

Struts2

Struts2大纲:

1、MVC及流行MVC框架简介;

2、配置基于Struts2的登陆和HelloWorld程序;

3、Struts2基础;

4、深入Struts2配置文件;

5、Struts2的类型转换;

6、Struts2拦截器;

7、国际化;

8、输入校验;

9、Struts2标签;

10、AJAX支持及与其他常用技术整合;

11、Struts2下的文件上传

项目开发:

实现Struts2下的注册和登陆模块(对比JSP+JavaBean+Servlet模式体会Struts2的优点);

实现Struts2下的BBS系统;

实现Struts2下的在线考试应用系统;

 

一、MVC模式

1.1、Model1模式

1.2、Model2模式

小型Web应用可以用Model1来开发;虽然Model2模式提供了良好的扩展性和可维护性,但增加了前期开发成本。

1.3、MVC模式优点

1、业务逻辑和数据显示分离;PHP(SMARTY模板).NET(CLASS和一个页面)

2、应用被分为三层,降低了耦合性;

3、更符合软件工程化的精神,不同的层各司其职,有利于通过工程化管理代码。

有利于代码的复用及组件化。

1.4、常用MVC框架

1、Struts1.x和Struts2.x

2、Webwork

3、SUN的JSF

4、Tapestry

5、SpringMVC

1.5、Struts2处理流程图

Struts2处理流程如下:

1、浏览器发送请求,如login.action(struts2-*.action)(struts1-*.do);

2、核心控制器FilterDispatcher根据请求决定调用合适的action;

3、拦截器链自动对请求应用通用功能,如validation输入验证;

4、回调Action的execute方法,该方法先获取用户请求参数,然后调用业务逻辑组件如JavaBean处理用户请求;

5、Action的execute方法处理结果将输出到浏览器,可以是HTML、JSP,也可以是Velocity、Freemarker等其他模板技术;

从代码层面上看,Struts2需要新加的内容:

*.action(相当于servlet,可以有n个方法如增删改查,默认有个execute方法,根据页面过来的参数调用哪个方法)

result(视图层技术如jsp文件的映射,由struts.xml文件来配置)

struts.xml(struts核心配置文件,完成诸如定义action的映射路径,以及result的定义等功能)

二、初识Struts2——HelloWorld

实现目标:

地址栏输入http:

//localhost:

88/Struts2HelloWorld/helloworld.jsp,输入用户名,交由http:

//localhost:

88/Struts2HelloWorld/hello.action处理,返回到helloworld.jsp视图层,并显示刚才输入的值;

步骤:

1、MyElipse下新建一个叫struts2hello的web工程;

2、将struts2的jar包copy到WEB-INF/lib/目录下;

3、修改web.xml文件,配置Struts2的核心Filter;

struts2

org.apache.struts2.dispatcher.FilterDispatcher

struts2

/*.action

4、在src目录下增加struts.xml配置文件;

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEstrutsPUBLIC

"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"

"http:

//struts.apache.org/dtds/struts-2.0.dtd">

login.jsp

index.jsp

5、实现控制器

packagecom.app.hello;

importcom.opensymphony.xwork2.Action;

//POJO(PlainObjectJavaObject低侵入式)

publicclassUserWorldimplementsAction{

//获取页面上的控件,只需要要在这里注入对应的属性,提供setter和getter方法即可。

(名称要完全一样)

privateUseruser;

privateUserDAOuserDAO=newUserDAO();

//action默认执行方法

publicStringexecute(){

if(!

userDAO.login(user.getUsername(),user.getPassword())){

ActionContextac=ActionContext.getContext();

ac.put("msg","登陆信息有误");//request.setAttribute("",);

}else{

return"index";//转发到逻辑视图对应的页面

}

return"login";

}

publicUsergetUser(){

returnuser;

}

publicvoidsetUser(Useruser){

this.user=user;

}

//http:

//localhost:

8080/Struts2HelloWorld/hello!

aliasAction.action

publicStringaliasAction(){

name="";

return"success";

}

}

6、修改struts.xml文件,添加Action的映射和逻辑视图转向,在中添加如下内容;

/helloworld.jsp

7、添加JSP视图层,取名helloworld.jsp

<%@pagecontentType="text/html;charset=utf-8"%>

<%@taglibprefix="s"uri="/struts-tags"%>

<%@pageisELIgnored="false"%>

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

SayHello

Say"Hello"to:

propertyvalue="name"/>${name}

formaction="hello">

Name:

textfieldname="name"/>

submit/>

form>

三、Struts2基础

3.1、核心控制器FilterDispatcher

FilterDispatcher是Struts2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求。

如果用户请求以*.action结尾,该请求将被转入struts2框架进行处理。

Struts2获得*.action请求后,将查找struts.xml文件的配置信息,改文件配置了action的name和class属性,其中name属性决定了该action处理哪个用户请求,而class属性决定了action的实现类。

Struts2用于处理用户请求的action实例,并不是用户实现的业务控制器,而是action代理——因为用户实现的业务控制器并没有与servletAPI耦合,显然无法处理用户请求。

而Struts2框架提供了系列拦截器,该拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到action中,并回调action的execute方法来处理用户请求。

3.2、业务控制器

业务控制器组件就是用户需要实现的Action类,该类包含一个execute方法,该方法返回一个字符串,字符串就是一个逻辑视图名——对应于一个JSP文件或其他视图层技术;

程序员实现完action后,需要在struts.xml配置action三个部分:

1、action处理的url;

2、action对应的实现类;

3、action里包含的逻辑视图与物理资源间的对应关系;

如:

/helloworld.jsp

/helloworld.jsp

3.3、模型组件

模型组建包括实体bean和业务逻辑bean,或其他J2EE组件,如EJB等技术;

3.4、视图组件

Struts2改变了Struts1只能使用JSP作为视图层技术的现状。

允许使用如Freemarker、Velocity等模板技术;每个action都有result子元素,定义逻辑视图名与物理资源的映射关系。

3.5、Struts2基本配置

3.5.1、配置web.xml

配置加载struts2标签库(如果web应用使用sevlet2.4以上的规范,无需配置因为它会自动加载标签库文件)

1、配置FilterDispatcher核心控制器类;

2、标签库;

需要把TLD描述文件COPY到WEB-INF/下;

/WEB-INF/tld/*.tld//TLD文件真实路径

/WEB-INF/tld/*.tld//引用位置

想在jsp文件使用该标签:

<%@tagliburi=””prefix=”s”%>

3.5.2、配置struts.xml

避免struts.xml文件过于臃肿,可以分拆成多个配置文件,然后包含进来;

//包含默认的xml文件

3.5.1、配置struts.properties属性文件

struts.properties应该放在WEB-INF/classes下,该文件包含了系列的key-value对象,每个key就是一个属性,对应的value就是值;

常见的key:

//设置web应用的默认编码,相当于request.setCharacterEncoding(“GBK”)

struts.i18n.encoding=GBK

//每次进来http请求时,是否重新加载国际化资源文件;开发阶段应该设为true,发布阶段为false

struts.i18n.reload=false

//定义国际化资源文件的baseName

struts.custom.i18n.resources=globalMessages

有时候开发人员不喜欢使用额外的struts.properties文件,也可以在struts.xml通过配置constant元素,一样可以配置属性:

--指定国际化资源文件的baseName-->

3.5.1、struts.xml文件结构

GBK

--全局逻辑视图的定义-->

/input.jsp

/input.jsp

四、深入Struts2

4.1、深入struts2.xml配置文件

4.1.1、常量配置

可以在struts.xml也可以在struts.properties文件配置属性;

Struts框架按照如下顺序加载常量:

struts-default.xml

struts.xml

struts.properties(可以把struts.xml文件里的constant部分丢过来,利于管理)

web.xml

若同名,后面的会覆盖前一个;

4.1.2、包配置

Struts2核心组件是Action和拦截器,struts2用包来管理它们。

每个包就是多个Action和拦截器的集合。

下例定义了一个default包,并继承struts默认的包:

http:

//localhost:

8080/项目名/hello.action

name属性:

必填,包名,改名字是被其他包引用的key;

extends属性:

可选,改包继承其他包,自动拥有对方的action和拦截器等;

namespace属性:

可选,定义包的命名空间;

abstract属性:

可选,值为true|false,若为true,则改包为抽象包,不能包含action定义。

4.1.3、命名空间配置NameSpace

考虑到同一个web应用需要同名的action,struts2以命名空间来管理action,同一个命名空间不能有同名的action,不同的命名空间可以有同名的action;

Struts2通过为包指定namespace属性来为包下的所有action指定共同的命名空间;

--配置Action和逻辑视图-->

/helloworld.jsp

--配置Action和逻辑视图-->

/helloworld.jsp

上例配置了两个包,admin包指定了/admin命名空间,也就是说它能处理

http:

//localhost:

88/Struts2HelloWorld/admin/hello.action下的所有URL请求;

对于default包,没有指定命名空间,那么默认它的命名空间是“”;

可以为包显示指定根命名空间为”/”;

如果请求为/barspace/bar.action,系统首先查找/barspace命名空间里名为bar的action,如果有,则调用改action处理请求,否则会去默认命名空间去找;若都找不到,系统会报错误;

4.1.4、包含配置

包含配置允许将一个struts.xml分拆成多个以便于管理;每个被包含的文件都是标准的struts2配置文件;

4.1.5、异常处理配置

在程序中出现异常可以尽管往外抛,由统一接口做页面处理

<%@pageerrorPage=”url”%>

在异常处理页中处理异常:

<%@pageisErrorPage=”true”%>

<%

try{}catch(Exceptione){}

%>

  

      

            /error.jsp  

          

      

            

       

 

这样抛出的异常java.lang.Exception由struts2处理,跳转到/error.jsp页面。

这个异常声明是全局的,也可以声明成局部的。

4.1.6、拦截器配置

拦截器允许在action处理请求之前或者之后,插入开发者自定义的代码;

详细请参考拦截器配置

4.2、Strus2的Action

4.2.1、实现Action

要点:

1、Struts2的Action属于低侵入式设计,不需要实现任何接口或者继承类。

也就是一个普通的POJO;

2、使用Action里的属性封装请求参数以及处理后的结果,对应给每个属性添加setXXX和getXXX方法;可以利用

propertyvalue=”username”/>或者{$username}输出属性的值;可以封装任何类型,包括自定义的类、数字、集合类、MAP等数据类型;

3、可以实现Action接口或者继承ActionSupport类,以利用其中的方法,增强功能;

4.2.2、Action访问ServletAPI

Struts2提供了一个ActionContext类来访问ServletAPI,使用request、session、application对象;

publicStringexecute(){

//实例化ActionContext用来访问ServletAPI

ActionContextac=ActionContext.getContext();

if(getUsername().equals("tiger")&&getPw().equals("1")){

//获取application的count属性

Integercount=(Integer)ac.getApplication().get("count");

if(count==null)

count=1;

else

count++;

//设置application的count属性

ac.getApplication().put("count",count);

//设置session的username属性

ac.getSession().put("username","tiger");

//设置request的msg属性,相当于request.setAttribute(key,value)

ac.put("msg","你已成功登陆");

returnSUCCESS;

}else{

ac.put("msg","登陆失败");

returnLOGIN;

}

}

4.2.3、Action直接访问Servl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 预防医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1