马士兵struts2学习笔记详细版.docx

上传人:b****8 文档编号:9427082 上传时间:2023-05-19 格式:DOCX 页数:22 大小:23.62KB
下载 相关 举报
马士兵struts2学习笔记详细版.docx_第1页
第1页 / 共22页
马士兵struts2学习笔记详细版.docx_第2页
第2页 / 共22页
马士兵struts2学习笔记详细版.docx_第3页
第3页 / 共22页
马士兵struts2学习笔记详细版.docx_第4页
第4页 / 共22页
马士兵struts2学习笔记详细版.docx_第5页
第5页 / 共22页
马士兵struts2学习笔记详细版.docx_第6页
第6页 / 共22页
马士兵struts2学习笔记详细版.docx_第7页
第7页 / 共22页
马士兵struts2学习笔记详细版.docx_第8页
第8页 / 共22页
马士兵struts2学习笔记详细版.docx_第9页
第9页 / 共22页
马士兵struts2学习笔记详细版.docx_第10页
第10页 / 共22页
马士兵struts2学习笔记详细版.docx_第11页
第11页 / 共22页
马士兵struts2学习笔记详细版.docx_第12页
第12页 / 共22页
马士兵struts2学习笔记详细版.docx_第13页
第13页 / 共22页
马士兵struts2学习笔记详细版.docx_第14页
第14页 / 共22页
马士兵struts2学习笔记详细版.docx_第15页
第15页 / 共22页
马士兵struts2学习笔记详细版.docx_第16页
第16页 / 共22页
马士兵struts2学习笔记详细版.docx_第17页
第17页 / 共22页
马士兵struts2学习笔记详细版.docx_第18页
第18页 / 共22页
马士兵struts2学习笔记详细版.docx_第19页
第19页 / 共22页
马士兵struts2学习笔记详细版.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

马士兵struts2学习笔记详细版.docx

《马士兵struts2学习笔记详细版.docx》由会员分享,可在线阅读,更多相关《马士兵struts2学习笔记详细版.docx(22页珍藏版)》请在冰点文库上搜索。

马士兵struts2学习笔记详细版.docx

马士兵struts2学习笔记详细版

 

1、02_尚学堂马士兵_Struts2_Struts2_HelloWorld_2.avi

指定Tomcat的目录,指定JDK搭建开发环境(拷贝jar包,复制struts.xml文件此文件不要放在WEB-INF下面,应该放到src下面),在web.xml文件中:

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

/*

其中/*不要写/*.do或者/*.action约定俗成用/*

 

2、04_尚学堂马士兵_Struts2_Struts2_HelloWorld_3.avi

(1)

--:

常量的配置-->

--name="struts.devMode"value="true":

当前是开发模式,改动配置文件会自动装载默认是false-->

--命名空间--->action-->相应的处理类或页面-->

/Hello.jsp

(2)struts.xml不自动提示的解决办法:

window--perferences-XMLcatalog---add---keyType="URI"key="*.dtd"

 

3、09_尚学堂马士兵_Struts2_Struts2_HelloWorld_7_2.avi

struts2的执行流程:

当用户在浏览器中敲入要访问的地址的时候,浏览器会将这个请求发送给tomcat然后tomcat判断应该交给那个WebApplication来处理,然后会读取它下面的web.xml配置发现有配置:

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

/*

因为为/*它会过滤所有的请求然后就交给filter类org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter处理执行调用doFilter()方法,然后再方法中会读取struts-xml文件,根据用户请求的地址找到相应的package、action、result、然后将相应的页面返回给浏览器

 

4、10_尚学堂马士兵_Struts2_Struts2_Namespace_命名空间.avi

(1)namespace决定了action的访问路径,默认为"",可以接收所有路径的action

namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action,

/xxx/index.action,或者/xxx/yyy/index.action

namespace最好也用模块来进行命名

 

5、11_尚学堂马士兵_Struts2_Struts2_Action.avi

(1)struts1与struts2的一个重要区别:

在struts1中进行多次访问的时候用到的是同一个Action对象。

而struts2则是每一次访问都会创建一个Action对象,所以struts2不会有线程安全问题的发生

(2)标签如果没有指定name属性默认返回值为success

(3)标签中的class值如果没有配置相应的类,它会调用struts默认的一个处理类的execute()方法.

(4)实现struts的处理类的时候不要自己随便写类然后定义execute()方法,也不要实现Action类而要从ActionSupport类继承,可以直接使用它为我们定义好的方法.

 

6、12_尚学堂马士兵_Struts2_Struts2_Path_路径问题.avi

(1)struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。

虽然可以用redirect方式解决,但redirect方式并非必要。

解决办法非常简单,统一使用绝对路径。

(在jsp中用request.getContextRoot方式来拿到webapp的路径)

或者使用myeclipse经常用的,指定basePath

(2)request.getContextPath()得到项目的名字,一般用来解决路径问题如果项目为根目录,则得到一个"",即空的字条串。

request.getscheme()返回的协议名称.默认是http

request.getServerName()就是获取你的网站的域名,如果是在本地的话就是localhost

request.getServerPort()获取服务的端口号

 

7、13_尚学堂马士兵_Struts2_Struts2_ActionMethod_DMI_动态方法调用.avi

Action执行的时候并不一定要执行execute方法

可以在配置文件中配置Action的时候用method=来指定执行哪个方法

也可以在url地址中动态指定(动态方法调用DMI)(推荐)

/user/userAdd">添加用户


/user/user!

add">添加用户


前者会产生太多的action,所以不推荐使用

配置文件:

/user_add_success.jsp

/user_add_success.jsp

 

8、14_尚学堂马士兵_Struts2_Struts2_ActionWildcard_通配符配置.avi

主要学习通配符的使用通配符可以将配置量降到最低,不过一定要遵守"约定优于配置"的原则

/Student_{1}_success.jsp

--更简便的配置法-->

/{1}_{2}_success.jsp

说明:

(1){1}代表name="Student*"后面第一个'*',同理{2}代表第二个'*'

(2).如果action之间有重复配置,struts2会匹配最精确的action。

如果通配符配置之间有重复,则看前后配置顺序

 

9、15_尚学堂马士兵_Struts2_Struts2_用Action的属性接收参数.avi

在继承ActionSupport的类中定义要接受的参数,参数的名称与Action所传的名称无关在struts2内部调用的是属性的set方法,所以setxxx()的名字一定要与Action后面所传的值是一样的。

 

10、16_尚学堂马士兵_Struts2_Struts2_用DomainModel接收参数.avi

如果要接受的参数的个数很多,我们可以不用定义属性而是直接定义一个对象例如:

privateUseruser(setget方法)在调用Action传值的时候使用user!

add?

user.name=x&user.age=x的方式进行值得传递。

(最常用的方式)

 

11、17_尚学堂马士兵_Struts2_Struts2_用ModelDriven接收参数.avi

继承ActionSupport类的处理类必须同时实现ModelDriven(实现getModel())在传值的时候使用user/user!

add?

name=bbb进入处理类的时候会调用getModel()方法返回User对象并且把传过来的值set到里面,注意:

此时privateUseruser=newUser()不能只定义,要同时实现这样getModel()才能拿到user对象。

 

12、18_尚学堂马士兵_Struts2_Struts2_2.1.6版本的中文问题.avi

在配置文件中加入:

按照文档说明加入此句可解决中文乱码但是不行这是2.1.6的一个bug,会在下一个版本中修复如何解决呢:

在web.xml中:

struts2

--org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter-->

org.apache.struts2.dispatcher.FilterDispatcher

把过滤器的版本改成老版本的即可解决该问题!

 

13、19_尚学堂马士兵_Struts2_简单数据验证_1.avi

使用addFieldError方法和s:

fieldError标签简单处理数据校验

publicStringadd(){

if(name==null||!

name.equals("admin")){

this.addFieldError("name","nameiserror");

this.addFieldError("name","nameistoolong");

returnERROR;

}

returnSUCCESS;

}

在页面中显示错误信息:

--以固定的css样式取出错误信息,不方便我们进行相应的处理-->

fielderrorfieldName="name"theme="simple"/>

--从存储错误信息的Map中拿数据-->

propertyvalue="errors.name[1]"/>

--显示详细的栈信息-->

debug>

debug>

 

14、21_尚学堂马士兵_Struts2_访问Web元素_1.avi

注意:

web.xml中关于struts的配置一定要采用2.1的,2.0的会取不到这是一个bug

(1)通过ActionContext对象取得Map类型的request,session,applicationHttpServletRequest,HttpSerletSessionServletContetext:

publicclassLoginAction1extendsActionSupport{

privateMaprequest;

privateMapsession;

privateMapapplication;

//访问此方法,取得相应的对象但是是Map类型

publicLoginAction1(){

request=(Map)ActionContext.getContext().get("request");

session=ActionContext.getContext().getSession();

application=ActionContext.getContext().getApplication();

}

//在Map类型的对象中存入相应的值

publicStringexecute(){

request.put("r1","r1");

session.put("s1","s1");

application.put("a1","a1");

returnSUCCESS;

}

}

//在页面中通过标签取得存入的数据二种方法(通过标签,通过原始方式):

propertyvalue="#request.r1"/>|<%=request.getAttribute("r1")%>

propertyvalue="#session.s1"/>|<%=session.getAttribute("s1")%>

propertyvalue="#application.a1"/>|<%=application.getAttribute("a1")%>

propertyvalue="#attr.a1"/>

propertyvalue="#attr.s1"/>

propertyvalue="#attr.r1"/>

debug>

debug>


我们存入Map中的数据居然可以在request,等对象中得到,那么在struts内部他是将Map中的数据全部复制到了request,session等对象中的#attr,可以取得所有的属性,但是不推荐使用,为了防止同名的情况,造成无法区别。

(2)通过实现RequestAware,SessionAware,ApplicationAware接口获取(最常用和重要的一种)

privateMaprequest;

privateMapsession;

privateMapapplication;

//DIdependencyinjection

//IoCinverseofcontrol

publicStringexecute(){

request.put("r1","r1");

session.put("s1","s1");

application.put("a1","a1");

returnSUCCESS;

}

@Override

publicvoidsetRequest(Maprequest){

this.request=request;

}

@Override

publicvoidsetSession(Mapsession){

this.session=session;

}

@Override

publicvoidsetApplication(Mapapplication){

this.application=application;

}

(3)通过ServletActionContext()取得真实的相应的对象

privateHttpServletRequestrequest;

privateHttpSessionsession;

privateServletContextapplication;

publicLoginAction3(){

request=ServletActionContext.getRequest();

session=request.getSession();

application=session.getServletContext();

}

publicStringexecute(){

request.setAttribute("r1","r1");

session.setAttribute("s1","s1");

application.setAttribute("a1","a1");

returnSUCCESS;

}

(4)通过实现ServletRequestAware接口获得相应的对象

privateHttpServletRequestrequest;

privateHttpSessionsession;

privateServletContextapplication;

publicStringexecute(){

request.setAttribute("r1","r1");

session.setAttribute("s1","s1");

application.setAttribute("a1","a1");

returnSUCCESS;

}

 

@Override

publicvoidsetServletRequest(HttpServletRequestrequest){

this.request=request;

this.session=request.getSession();

this.application=session.getServletContext();

}

15、23_尚学堂马士兵_Struts2_模块包含

可以将别的写好的配置文件直接包含到struts得配置文件中,方便多人开发避免不必要的配置文件冲突.

login.xml

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

>

DOCTYPEstrutsPUBLIC

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

"http:

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

/user_login_success.jsp

16、24_尚学堂马士兵_Struts2_默认Action

--当配置文件中没有用户要访问的Aciton的时候,会调用

/default.jsp

17、27_尚学堂马士兵_Struts2_结果类型_result_type_1

ResultType的最常用的几种配置:

(四种配置分别代表了四种不同的跳转方式)

--type不写默认的为dispatcher:

用服务器跳转跳转到结果页面--只能跳转到页面,不能跳转到Action-->

/r1.jsp

--客户端跳转的方式跳转到结果页面只能跳转到页面,不能跳转到Action-->

/r2.jsp

--服务器跳转的方式跳转到Action-->

r1

--客户端跳转的方式跳转到Action-->

展开阅读全文
相关搜索
资源标签


copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2