




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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)!- :常量的配置 - action -相应的处理类或页面 - /Hello.jsp (2)struts.xml不自动提示的解决办法: window-perferences-XML catalog-add-key Type=URI key=*.dtd3、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的访问路径,默认为,可以接收所有路径的actionnamespace可以写为/,或者/xxx,或者/xxx/yyy,对应的action访问路径为/index.action,/xxx/index.action,或者/xxx/yyy/index.actionnamespace最好也用模块来进行命名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)(推荐)a href=/user/userAdd添加用户a href=/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 如果要接受的参数的个数很多,我们可以不用定义属性而是直接定义一个对象例如: private User user (set get 方法)在调用Action传值的时候使用user!add?=x&user.age=x的方式进行值得传递。(最常用的方式)11、17_尚学堂马士兵_Struts2_Struts2_用ModelDriven接收参数.avi 继承ActionSupport类的处理类必须同时实现ModelDriven(实现getModel()在传值的时候使用user/user!add?name=bbb进入处理类的时候会调用getModel()方法返回User对象并且把传过来的值set到里面,注意:此时private User user = new User() 不能只定义,要同时实现这样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标签简单处理数据校验 public String add() if(name = null | !name.equals(admin) this.addFieldError(name, name is error);this.addFieldError(name, name is too long);return ERROR; return SUCCESS;在页面中显示错误信息:14、21_尚学堂马士兵_Struts2_访问Web元素_1.avi注意:web.xml中关于struts的配置一定要采用2.1的,2.0的会取不到这是一个bug(1)通过ActionContext对象取得Map类型的request, session, application HttpServletRequest, HttpSerletSession ServletContetext: public class LoginAction1 extends ActionSupport private Map request;private Map session;private Map application; /访问此方法,取得相应的对象但是是Map类型public LoginAction1() request = (Map)ActionContext.getContext().get(request); session = ActionContext.getContext().getSession(); application = ActionContext.getContext().getApplication();/在Map类型的对象中存入相应的值public String execute() request.put(r1, r1);session.put(s1, s1);application.put(a1, a1);return SUCCESS; /在页面中通过标签取得存入的数据 二种方法(通过标签, 通过原始方式): | | | 我们存入Map中的数据居然可以在request,等对象中得到,那么在struts内部他是将Map中的数据全部复制到了request,session等对象中的 #attr ,可以取得所有的属性,但是不推荐使用,为了防止同名的情况,造成无法区别。(2)通过实现RequestAware,SessionAware, ApplicationAware 接口获取(最常用 和重要的一种)private Map request;private Map session;private Map application;/DI dependency injection/IoC inverse of controlpublic String execute() request.put(r1, r1);session.put(s1, s1);application.put(a1, a1);return SUCCESS; Overridepublic void setRequest(Map request) this.request = request;Overridepublic void setSession(Map session) this.session = session;Overridepublic void setApplication(Map application) this.application = application;(3)通过ServletActionContext()取得真实的相应的对象private HttpServletRequest request;private HttpSession session;private ServletContext application;public LoginAction3() request = ServletActionContext.getRequest();session = request.getSession();application = session.getServletContext();public String execute() request.setAttribute(r1, r1);session.setAttribute(s1, s1);application.setAttribute(a1, a1);return SUCCESS; (4)通过实现ServletRequestAware接口获得相应的对象 private HttpServletRequest request;private HttpSession session;private ServletContext application;public String execute() request.setAttribute(r1, r1);session.setAttribute(s1, s1);application.setAttribute(a1, a1);return SUCCESS; Overridepublic void setServletRequest(HttpServletRequest request) this.request = request;this.session = request.getSession();this.application = session.getServletContext(); 15、23_尚学堂马士兵_Struts2_模块包含 可以将别的写好的配置文件直接包含到struts得配置文件中,方便多人开发避免不必要的配置文件冲突.login.xml /user_login_success.jsp 16、24_尚学堂马士兵_Struts2_默认Action !- 当配置文件中没有用户要访问的Aciton的时候,会调用 /default.jsp 17、27_尚学堂马士兵_Struts2_结果类型_result_type_1 ResultType的最常用的几种配置:(四种配置分别代表了四种不同的跳转方式) /r1.jsp /r2.jsp r1 r2 dashboard /sesure 18、30_尚学堂马士兵_Struts2_Global_Results_全局结果集 /main.jsp /index.jsp !-关键字extends的使用:我想在下面的这个配置包中使用上面那个包中的结果集,那么可以使用extends关键字继承上一个包 /admin.jsp 17、31_尚学堂马士兵_Struts2_动态结果集_dynamic_result可以在strtus.xml文件中动态的指定返回的结果集。public class UserAction extends ActionSupport private int type;private String r;public String getR() return r;public void setR(String r) this.r = r;public int getType() return type;public void setType(int type) this.type = type;Overridepublic String execute() throws Exception if(type = 1) r=/user_success.jsp;else if (type = 2) r=/user_error.jsp;return success;struts.xml文件中的配置: $r 18、32_尚学堂马士兵_Struts2_带参数的结果集访问链接格式:传参数public class UserAction extends ActionSupport private int type;public int getType() return type;public void setType(int type) this.type = type;Overridepublic String execute() throws Exception return success; 当从一个Action跳转到另一个Action的时候,如果需要传值并且是服务器端的跳转,没有必要再struts.xml文件result的跳转路径中进行传值操作,因为多个服务器端的跳转,共享的是同一个值栈,可以直接取到,但是如果是客户端的跳转(redirect)的方式进行跳转则需要进行如下的配置: /user_success.jsp?t=$type 但是如果在jsp页面取出传输的值用是取不到的,因为这种方式是在值栈里取值而我们跳转道德是一个jsp页面不是一个Action所以值栈为空,但是我们可以在ActionContext中进行取值:19、36_尚学堂马士兵_Struts2_OGNL_1在访问Actoin向Action进行传值的时候http:www.xxxxx/ognl.action?username=u&password=p;private String username(set get 方法)private String password(set get 方法)如果用这种方式进行传值,那么在jsp页面中可以用进行访问值栈中的内容,没有任何问题 但是如果:http:www.xxxxx/ognl.action?username=u&password=p;private User user;(set get)方法,使用依然访问不到,因为如果采用dominModel的方式进行传值,必须:http:www.xxxxx/ognl.action?user.username=u&user.password=p;这样 Struts会在Action中帮助我们new一个User对象,然后把值放进去,但是必须要有User空的构造方法。如果依然使用http:www.xxxxx/ognl.action?username=u&password=p;的方式进行传值,那么在Action中必须手动的初始化User对象,Private User user = new User();这样同样可以访问的到。20、37_尚学堂马士兵_Struts2_OGNL_2 Ognl:Object graph Navigation Language(对象图导航语言):首先看一下下面三个类之间的关系: public class OgnlAsction extends ActionSupport private Cat cat;(set get 方法) public String m() return 你好; public class Cat private Dog friend;(set get 方法) public Dog private String name;(set get 方法) 在OgnlAction中包含Cat,而在Cat中包含Dog的对象friend,那么现在我想访问OgnlAction的时候,给friend肤质,我们应该这么写:http:www.xxxx/ognl.action?=aaa; 用点进行导航,所以叫做对象图导航语言。21、39_尚学堂马士兵_Struts2_OGNL_4 已知以下三个类中的属性和方法: public class OgnlAsction extends ActionSupport private Cat cat;(set get 方法) private String password;(set get 方法) List users = new ArrayList();(set get 方法)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 私对私股权转让及企业经营管理权变更协议
- 创新型离婚孩子抚养权及监护责任转移合同
- 《离婚协议书签订前夫妻共同债务处理合同》
- 玻璃画小夜灯课件
- 责任督学培训汇报
- 正午牡丹教学课件
- 科学启蒙动画课件
- 桥梁工程技术试题及答案
- 机械技术员面试题及答案
- 辅警法律知识培训课件
- 2025年审计部招聘考试模拟题及答案详解
- Bowtie安全分析培训课件
- 2025年乡镇民政办招聘养老护理员面试常见问题及答案
- 财务遴选笔试题及答案
- 2025客运从业资格试题及答案
- 2025租房合同范本下载参考
- 2025广东广州市公安局招聘交通辅警150人(第二批)笔试参考题库附答案解析
- (2025秋新版)人教版二年级数学上册全册教案(教学设计)
- 中小学预防基孔肯雅热主题班会课件-防蚊灭蚊守护健康
- 电信条例、工业信息化部令测试题【附答案】
- 【EHS领导力培训】安全领导力与执行力培训(86页)
评论
0/150
提交评论