达内stuts2学习笔记.docx
- 文档编号:24280210
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:69
- 大小:450.64KB
达内stuts2学习笔记.docx
《达内stuts2学习笔记.docx》由会员分享,可在线阅读,更多相关《达内stuts2学习笔记.docx(69页珍藏版)》请在冰豆网上搜索。
达内stuts2学习笔记
struts2
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>day01<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
1.Struts2历史、与Struts1关系
Struts2是基于WebWork框架发展而来。
Struts2与Struts1可以说没有太直接关系。
2.Struts2特点
(1)由Action组件承担Struts1中ActionForm和Action的功能。
(2)Action非常灵活,可以使用一个普通的Class来充当。
(3)Action可测性强。
(4)提供了大量的Result组件,简化了响应处理的实现。
(5)提供了大量的拦截器(封装共通的处理)组件。
(6)易于扩展、整合和维护。
struts2基本流程图
3.Struts2的MVC实现
控制器实现:
FilterDispatcher(早期),StrutsPrepareAndExecuteFilter(新)
视图实现:
各种类型Result,支持各种视图组件的响应。
Struts2标签:
提供了分支、循环、显示等功能。
模型实现:
普通的POJO(Action),更加灵活。
ValueStack组件(存储值):
用于封装请求相关信息,如request、session、action对象等
*4.Struts2开发入门
(1)创建WebProject,引入struts2开发基本包(见右图)。
(2)在web.xml中配置控制器,添加控制器的配置文件struts.xml。
(3)编写JSP、Action组件。
(4)编写struts.xml配置,定义Action组件和请求的对应关系。
struts2默认支持两种请求名:
①带.action扩展名的;②不带action扩展名,就只一个名字;
如果此时还用.do结尾的请求名,struts2是不认的。
web.xml
--这个名字是可以随便取的-->
--这个名字要跟上面定义的拦截器名字相同-->
--/*表示请求都会被拦截到上面定义的filter-class类进行处理-->
struts.xml
--name属性是随便取的--> /*type类型可以在struts-default.xml中找到*/ action的name属性表示客户端向服务器发出的请求的名字。 action的class属性指定响应该请求的类名。 action的method属性指定响应请求的响应类中的方法,省略此属性的话默认是execute()方法。 Login.java publicclassLogin{ privateStringname; privateStringpassword; /*省略set/get方法*/ publicStringexecute() { if("scott".equals(name)&&"1234".equals(password)){ return"success"; } return"login"; } } struts2的工作流程: 一启动tomcat就加载工程的web.xml文件,创建出filter对象,告诉服务器发出什么样的请求时就调用这个filter对象;页面点击登录,发出login.action请求,服务器收到请求就会调用filter对象控制器,如果这个请求是.action或不带action的请求,控制器就认为这是struts2的请求,然后就会根据struts.xml里面的信息去找相应的action做处理;如果请求是其它比如login.jsp,filter就不会去调action了,filter收到请求后得判断一下什么样的请求才会根据配置去调用相应的action进行处理。 上例中发出login.action请求后,filter发现有相应的action与之相对应,然后就创建这个action对象,创建了action对象后,就得接收请求信息,实际上是由拦截器来做的。 struct.xml放在src目录下 *5.Struts2配置文件 (1)struts-default.xml(框架自带,只读) 定义了一些框架自带的Result组件、拦截器组件。 (2)struts.xml(开发创建并使用) 定义开发者编写的Result组件,拦截器组件、Action组件。 (3)default.properties(框架自带) 定义了框架的一些系统参数。 如下: ①struts.action.extension=action,,配置了默认接受.action的请求或者什么都不加 ②struts.i18n.encoding=UTF-8配置了框架处理的时候使用的字符格式是utf-8 (4)struts.properties(开发创建并使用,只读) 用于覆盖default.properties中的系统配置。 例如我们新建一个struts.properties文件在其中写上struts.action.extension=do那么struts默认认*.do的请求,如果是acion请求将找不到。 (5)struts-plugin.xml 整合插件包中带的配置文件。 (1) (2)(5)的DTD是一样的,都去struts-default.xml中copy即可。 *6.Struts2中Action相关配置 (1) 用于指定package中的action对应的请求路径。 请求路径格式: http: //localhost: 8080/工程名+namespace属性+ 有了namespace后我们可以为一个模块写一个package。 (2) 用于指定action中的业务方法名,默认为execute。 (3)元素 可以出现在 作用就是为Action,Result或拦截器等组件的属性指定值。 例如: \\image 收到login请求时,struts创建tarena.action.Login类的对象时会调用对象中的setDir方法将D: \\image属性值传进去! 应用: 例如分页,有些action一次要显示5条,有些action一次要显示10条,这时我们就可以传一个值进去,不同action指定不同的值。 表示在创建dispatcher组件对象的时候,它里面有一个location属性方法将这个属性值传进去。 然后在组件内部,用request等实现跳转。 (4)通配符*的使用 为了简化配置,struts2允许使用通配符。 {N}表示引用前面的第几个通配符的值。 例如: name属性里的通配符的值在method属性里可以使用,在class属性里面也可以使用。 例如: 第一个通配符指定类名,第二个通配符指定方法名。 (5)动态方法调用 通过请求格式指定业务方法名。 格式: 请求名! 方法名.action 例如: 服务器端的配置: 客户端请求格式: update.do">更新 delete.do">删除 add.do">添加 如果不想浏览器地址栏显示.jsp的路径,而是始终显示.do或.action,我们可以这样配置: 这样写了之后,地址栏的路径就会以index.do或index.action结尾了。 如果把jsp页面直接放在WebRoot目录下,外部访问者能够直接访问得到jsp页面, 如果不想这样可以把jsp页面放在WEB-INF目录下,通过上面的配置方式以.do/.action 的请求方式访问jsp页面。 WEB-INF这一层外部是无法直接访问的,输入路径也不行。 *7.ValueStack,ActionContext,ServletActionContext (1)ValueStack 主要用于存储请求相关信息,内部结构如下: root区域: 被称为根存储区,是一个栈结构,栈顶元素为当前请求的Action对象 context区域: 被称为变量存储区,是一个Map结构,存储了request,session,application等对象 (2)ActionContext用于获取context存储区内容,可以将request、session、application对象以Map结构返回。 ActionContext.getContext().getSession(); ActionContext.getContext().getApplication(); ActionContext.getContext().get("request"); (3)ServletActionContext是ActionContext子类,可以获取ServletAPI类型的对象 (2)和(3)的区别: Map request.put(“user”,”tom”);/*把内容存入request*/ request.get(“user”);/*从request中取东西*/ HttpServletRequestrequest1=ServletActionContext.getReuquest(); request1.setAttribute(“sex”,”male”); 这两种写法达到的效果其实是一样的。 8.思考题: ---------------如何将request,session,application封装成Map结构? ------------------- Mapmap=newSessionMap(request); publicclassSessionMapextendsAbstractMap{ privateHttpSessionsession; publicRequestMap(HttpServletRequestrequest){ this.session=request.getSession(); } publicvoidput(Objectkey,Objectvalue){ session.setAttribute(key.toString(),value); } publicObjectget(Objectkey){ returnsession.getAttribute(key.toString()); } } 如何使用Filter充当控制器? 控制器doFilter方法的主要流程如下: publicvoiddoFilter(ServletRequestarg0,ServletResponsearg1, FilterChainchain)throwsIOException,ServletException{ //1.请求是否为.action //2.如果是,通过配置信息创建Action对象,执行业务方法。 //3.如果不是,chain.doFilter(arg0,arg1); } 9.练习: 针对d_user表的添加和列表显示 姓名: 密码: 注意name属性值的写法。 user.java publicclassUser{ privateStringname; privateStringpwd; publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicStringgetPwd(){ returnpwd; } publicvoidsetPwd(Stringpwd){ this.pwd=pwd; } } Login.java publicclassLogin{ //接收表单信息 privateUseruser; //接收struts.xml中的param元素 publicStringcheck(){ if("scott".equals(user.getName())&&"1234".equals(user.getPwd())){ Map session.put("user",user.getName()); return"success"; } return"login"; } publicUsergetUser(){ returnuser; } publicvoidsetUser(Useruser){ this.user=user; } } >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>day02<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1.OGNL对象图导航语言(ObjectGraphicNavigationLanguage) 源于ognl.jar工具包,其作用如下: (1)对属性获取和设置 (2)调用对象方法 (3)调用静态属性和方法 (4)对集合进行过滤 (5)支持Java中的运算符,操作符 (6)定义List常量{"tom","sun"} (7)定义Map常量#{"M": "男","F","女"} ognl并不是struts2自带的,而是一个独立的小工具。 Address.java publicclassAddress{ privateStringstreet; privateStringzipcode; publicAddress(Stringstreet,Stringzipcode){ super(); this.street=street; this.zipcode=zipcode; } getter与setter方法省略; } Person.java publicclassPerson{ privateStringname; privateAddressaddress; publicPerson(){} publicPerson(Stringname){ this.name=name; } getter与setter方法省略; } Test.java publicclassTest{ publicstaticvoidmain(String[]args)throwsException{ Personp=newPerson(); p.setName("tom"); p.setAddress(newAddress("海淀中鼎大厦B座","100212")); //使用ognl工具对属性操作setter ognl.Ognl.setValue("address.street",p,"中关村大街"); //getter Stringval=(String)ognl.Ognl.getValue("address.street",p); System.out.println(val); } } 输出: 中观村大街 2.struts2标签 (1)struts2使用OGNL来访问ValueStack中的信息。 a.访问context区域内容语法以"#key"开始 b.访问root区域内容语法为"属性名" (2)struts2提供了很多标签,有些标签属性需要指定OGNL表达式。 a.通用标签 debug,property,date,if...else,iterator bean,push,action,set debug> debug>用于在页面生成一个调试链接,当单击该链接时,可以看到ValueStack和StackConttext中的内容。 (如下图所示) 由图可知,栈顶存放的是action。 property标签: 用于输出某个值,包括输出ValueStack、StackContext和ActionContext中的值。 显示一般属性: propertyvalue="name"/>/*不加#,表示去root区查找*/ 显示日期类型的数据: datename="dt"format="yyyy年MM月dd日"/> 日期标签可将日期类型的数据格式化。 如何获取session中的内容? 服务器端: Map session.put("msg","SessionValueMessage"); 客户端JSP: SessionMessage: propertyvalue="#session.msg"/> 如何获取request中的内容? 服务器端: Map request.put("msg","RequestValueMessage"); 客户端JSP: RequestMessage: propertyvalue="#request.msg"/> 如果在jsp中写上: AttrMessage: propertyvalue="#attr.msg"/> 则输出的时候会显示request中的msg信息。 使用s标签的判断语句 价格: propertyvalue="price"/> iftest="price>10000"> 太贵了! if> else> 太便宜了! else> 字符串的比较: i登录页面
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- stuts2 学习 笔记