资料参考教学讲稿day_第1页
资料参考教学讲稿day_第2页
资料参考教学讲稿day_第3页
资料参考教学讲稿day_第4页
资料参考教学讲稿day_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、IT 培训集团知识点列表注:"*"理解级别"*"掌握级别"*"应用级别1编号名称描述级别1Strution深入了解Struts2 中的 Action,掌握 5 个知识点*2Result 基本原理理解 Result 的基本原理,在 Struts2 中 Result 的功能强大*3课堂练习实现功能:1)登录、2)、3)增删改查*IT 培训集团目录1. Strution*错误!未定义书签。1.1. Action*4【案例 1】Action 演示*错误!未定义书签。【案例 2】 属性注入*2 错误!未定义书签。2. 使用 Result*272

2、.1. Reslut 基本原理*27【案例 3】Reslut 演示*303. 课堂练习*403.1. 【案例 4】综合练习 01*402IT 培训集团1.Strution*1.1. Action *1)Action 基本原理 *ü 每次請求都会创建一个新的 Action 的实例因为每次请求都对应一个单独的Action,所以丌需要考虑线程安全问题。ü Action 对象将置于ValueStack 的栈顶ü Action 的业务(默认为execute)根据输入算输出2)在 Action 中如何Session&Applicationü 使用 Actio

3、nContextSessionsession, application 将存放在ValueStack 的 Context 中ü 通过实现SessionAware 接口session (更好)首先,新建BaseAction implements SessionAware其次,所有需要session 的类似的,还有: ServletRequestAwareServletResponseAware ServletContextAwareAction extends BaseAction3)使用通配符配置Action3<action name="*_*_*" cla

4、ss="com.tarena.outman.1Action" method="2"><result name="success">/WEB-INF/jsp/day03/3.jsp</result></action><s:property value="#session."/> 戒者<s:property value="#application."/>ActionContext ctx = ActionContext.getCont

5、ext(); Map session = ctx.getSession();戒者Map application = ctx.getApplication();IT 培训集团4)给 Action 注入参数(属性注入)5)在 result 的配置中使用OGNL 表达式【案例 1】Action 演示 *案例描述业务:ü 登录页面,知识点:则转入主页面,失败则仍然跳转到登录页面。ü 在 Action 中如何Session&Applicationü 使用通配符配置Actionü 给 Action 注入参数(属性注入)ü 在 result 的配置中

6、使用OGNL 表达式参考代码1)项目结构图4<result name="success" type="dispatcher">/WEB-INF/jsp/day03/user.jsp?userId=$user.userId</result><param name="rowsPerPage">5</param>IT 培训集团2)a.b.准备好Struts2 的开发环境导入 Jar 包配置 web.xmll 在 Action 中如何Session&ApplicationØ 第

7、 1 种(不推荐)使用 ActionContextSession3)新建实体类User5package com.tarena.outman.day03.entity;public class User private int userId;IT 培训集团4)新建 UserDao5)新建 struts.xml6private String username;private String password;public String getPassword() return password;public void setPassword(String password) this.passwor

8、d = password;public String getUsername() return username;public void setUsername(String username) this.username = username;public int getUserId() return userId;public void setUserId(int userId) this.userId = userId;IT 培训集团注:loginform和login使用同一个类LoginAction,这样是OK的。只要该Action有多个mo thod,可以使一个Action对应多个请

9、求。情况下,我们在多个请求很相似时(戒者多个请求会共用一些数据时) 这样使用。这样使用的便利之处在于可以Action的数量。6)新建 LoginAction7""><struts><package name="core" extends="struts-default" namespace="/day03"><action name="loginform" class="com.tarena.outman.day03.LoginAction"

10、;><result name="success">/WEB-INF/jsp/day03/loginform.jsp</result></action><action name="login"class="com.tarena.outman.day03.LoginAction" method="login"><result name="success">/WEB-INF/jsp/day03/main.jsp</result&g

11、t;<result name="fail">/WEB-INF/jsp/day03/loginform.jsp</result></action></package></struts>IT 培训集团7)新建 loginform.jsp8private User user;/良编程习惯:将dao 作为属性使用private UserDao userDao = new UserDao();public String return "success"public String login() Syste

12、m.out.println(user.getUsername(); System.out.println(user.getPassword();user = userDao.validate(user.getUsername(), user.getPassword(); if (user != null) / 登录/ 获得 session 的ActionContext ctx = ActionContext.getContext(); Map<String, Object> session = ctx.getSession(); session.put("day03.us

13、er", user);return "success" else / 登录失败return "fail"public User getUser() return user;public void setUser(User user) this.user = user;IT 培训集团8)新建 main.jsp9<body><form action="" method="post"><table><tr><td>用户名:</td><

14、td><input name="user.username" type="text" /></td></tr><tr><td>:</td><td><input name="user.password" type="password" /></td></tr><tr colspan="2"><td><input value="提交&q

15、uot; type="submit" /></td></tr></table></form></body></html>IT 培训集团9)a.输入用户名“whatisjava”,随便b.点击“debug”c.找到“session”10<h1>你好</h1></body></html>IT 培训集团d.在“session”中是有数据的,使用 ActionContextSession在页面从 session 中取数据10) 修改 main.jsp11IT

16、 培训集团11)不推荐使用ActionContextSession 的方式,因为这种方式的“侵入性”较强。ActionContext 是 Struts2 的 API,如果使用其他框架代替目前的Struts2 框架,而我们实际顷目中的 Action 的数量非常庞大,每个类都修改会很费劲。Ø 第 2 种(推荐)通过实现SessionAware 接口12) 新建 BaseActionsession12<s:debug/></body></html>集团该类实现了SessionAware 接口,表明Struts2 在首先,创建出该Action 的对象,放入

17、“栈顶”BaseAction 时,然后,会调用BaseAction 的 setSession(注意:如果是普通的Action,Struts2 在,把session 传入给 BaseAction 对象时仅创建出该 Action 的对象,然后放入“栈顶”)由此,我们定义了属性session,以便在之后其他的符为protected。中使用。为了让子类也能使用,所以按照这样的机制,我们可以让所有的Action(如 LoginActio n)继承实现了SessionAware 接口的 BaseAction,当需要更换 Struts2 框架为其他框架时,只需要修改BaseAction 即可(另外的框架只要

18、提供一个类似SessionAware 接口的接口,由BaseAction 继承)13) 修改 LoginAction 继承 BaseAction13package com.tarena.outman.day03;import java.util.Map;import erceptor.SessionAware;public class BaseAction implements/为了让子类也能使用,所以符为protected Map<String, Object>public void(Map<String, Object>

19、session) this.session = session;IT 培训集团14),效果是一样的。如果指定从session 中取数据,应该这样写15) 修改 main.jsp14public String form() return "success"public String login() user = userDao.validate(user.getUsername(), user.getPassword();if (user != null) / 登录/ 直接使用父类中的session,丌再需要这样获取/ActionContext ctx = ActionCon

20、text.getContext();/Map<String, Object> session = ctx.getSession(); session.put("day03.user", user);return "success" else / 登录失败return "fail"public User getUser() return user;public void setUser(User user) this.user = user;IT 培训集团#session'day03.user'表示的意思是从

21、 session 这个 Map 集合中取出key 为"day03.user"的数据。同样的,从其它 3 个范围中取数据的方式是一样的,还有其他的接口:ü request 对应 ServletRequestAwareü response 对应 ServletResponseAwareü session 对应 SessionAwareü application 对应 ServletContextAware演示:Struts2 提供了许多的Aware使用通配符配置Action配置文件struts.xml 中我们可以在action 的名字里带

22、“*”星号作l配符15<action name="*_*"<body><h1>你好,<s:property value="#session'day03.user'.username" /></h1><s:debug/></body></html>集团“*_*”指名称中有“_”下划线的所有action(如 a_b.action、aaa_bbb.action), 注,“_”下划线可以是任意字符当我们这样写时,表示所调用的Action 丌确定如果“ABC_

23、f.action”,将调用“ABCAction”,1Action 表示 name 属性中第 1 个“*”星号匹配的字符串同理,当我们这样写时,表明除了所调用的Action 丌确定,也丌确定,method="2" 表示名对应的是name 属性中第 2 个“*”号匹配的字符串继续,还可以这样,3.jsp 表示 jsp 文件名也丌确定, jsp 文件的名称不第 3 个“*”号匹配的字符串对应16<action name="*_*_*"class="com.tarena.outman.day03.1Action"method="

24、;2"><result name="success">/WEB-INF/jsp/day03/</result>3.jspclass="com.tarena.outman.day03.LoginAction"method="form"><result name="success">/WEB-INF/jsp/day03/loginform.jsp</result></action>IT 培训集团演示16)新建 one.jsp17)新建 t

25、wo.jsp18)新建 OneAction17package com.tarena.outman.day03;public class OneAction public String f() System.out.println("OneAction.f()"); return "success"<%page pageEncoding="utf-8"%><html><head><title></title></head><body><h1>

26、Two</h1></body></html><%page pageEncoding="utf-8"%><html><head><title></title></head><body><h1>One</h1></body></html></action>IT 培训集团19)新建 TwoAction20)修改 struts.xml18<?xml version="1.0" e

27、ncoding="UTF-8"?><!DOCTYPE struts PUBLIC"-/Apache Software Foundation/DTD Struts Configuration 2.1/EN" ""><struts><package name="core" extends="struts-default" namespace="/day03"><action name=class="com.tarena.o

28、utman.day03." method=><result name="success">/WEB-INF/jsp/day03/</result>3.jsp"2"1Action"*_*_*"package com.tarena.outman.day03;public class TwoAction public String f() System.out.println("TwoAction.f()"); return "success"public St

29、ring g() System.out.println("TwoAction.g()"); return "success"public String g() System.out.println("OneAction.g()"); return "success"IT 培训集团21)表示调用OneAction 的 f(),转向one.jsp 页面台显示22)台显示19</action></package></struts>IT 培训集团给 Action 注入参数(注入属性)情况

30、下,为该Action 定义一些属性, 有些是用于输入的(比如表单提交用户名、此外,还有一些属性是Action 自用的参数l),有些是用于输出的(比如员工列表、当前页数)比如分页案例中,每页显示多少行的行数,我们是写死在ProjectAction的但是,我们可以把它ProjectAction为一个属性,方便更改rowsPerPage 就是参数,而参数注入就是说,像 rowsPerPage 这样的参数,我们可以写在配置文件中。23) 新建 ParamAction20package com.tarena.outman.day03;集团24) 修改 struts.xml21IT 培训<?xml

31、version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-/Apache Software Foundation/DTD Struts Configuration 2.1/EN" ""><struts><package name="core" extends="struts-default" namespace="/day03"><action name

32、="param" class="com.tarena.outman.day03.ParamAction" ><param name="param1">ABC</param><param name="param2">10</param></action><!- 给ParamAction赋值 ->public class ParamAction /* input属性 */ ./* output属性 */ ./* 参数 */private St

33、ring param1;private int param2;public String execute() System.out.println("param1: " + param1); System.out.println("param2: " + param2); return null;public String getParam1() return param1;public void setParam1(String param1) this.param1 = param1;public int getParam2() return par

34、am2;public void setParam2(int param2) this.param2 = param2;集团在 Struts2时,两个参数 param1 和 param2 就分别被赋值了。25)台打印l 在 result 的配置中使用OGNL 表达式26)新建 UserAction22</package></struts>IT 培训集团27)修改 UserDao28)配置 struts.xml23IT 培训集团29)新建 user.jsp30)24<!DOCTYPE struts PUBLIC"-/Apache Software Found

35、ation/DTD Struts Configuration 2.1/EN" ""><struts><package name="core" extends="struts-default" namespace="/day03"><action name="user" class="com.tarena.outman.day03.UserAction"><!- 使用Ognl-><result name=&q

36、uot;success" type="dispatcher">/WEB-INF/jsp/day03/</result></action></package></struts>IT 培训集团刷新(案例结束)【案例 2】属性注入 *案例描述修改 day02【案例 1】分页 02 ,使用属性注入的方式指定每页几行数据(rowsPerPage)参考代码1)2)请day03 案例 2 源码.zip修改 ProjectListAction25IT 培训集团3)修改 struts.xml26public class Proj

37、ectListAction / inputprivate int page = 1;/ outputprivate List<Project> projectList; private int totalPages;private int rowsPerPage; public String execute() ProjectDao projectDao = new ProjectDao(); projectList = projectDao.findAll(page, rowsPerPage); totalPages = projectDao.getTotalPages(rows

38、PerPage); return "success"public int getPage() return page;public int getTotalPages() return totalPages; public void setTotalPages(int totalPages) this.totalPages = totalPages;public void setPage(int page) this.page = page;public List<Project> getProjectList() return projectList; pub

39、lic void setProjectList(List<Project> projectList) jectList = projectList;public int getRowsPerPage() return rowsPerPage; public void setRowsPerPage(int rowsPerPage) this.rowsPerPage = rowsPerPage;IT 培训集团4)localhost:8080/struts01/day01/projectlist.action(案例结束)2.使用 Result *2.1. Reslut 基

40、本原理 *在 Struts2 中,Result 的功能非常强大的。Reslut 也是类,职责是生成视图。27<struts><package name="helloworld" extends="struts-default" namespace="/day01"><action name="projectlist" class="com.tarena.outman.ProjectListAction"><result name="succes

41、s">/WEB-INF/jsp/projectlist.jsp</result></action></package></struts>IT 培训集团视图可以是多种多样的(比如JSP、JSON、报表、负责。Marker 等),这些视图都可以由Reslut在 struts.xml 文件中,”struts-default“是由 Struts2 定义package我们找到配置文件 struts-default.xml查看 struts-default.xml 文件,”struts-default“共定义了 10 个<result-

42、type>28IT 培训集团”dispatcher“对应 ServletDispatcherResult 类,该类负责转发。当我们在 struts.xml 中这样写时,表示"dispatcher”所对应的类 org.apache.struts2.dispatcher.ServletDispatcherResult 在起作用注意:如果丌写 type 属性,默认就是"dispatcher”同理,我们还可以这样写29IT 培训集团我们还可以这样写,Result 常用类型1)2)3)4)5)dispatcherredirect redirectAction streamjso

43、n【案例 3】Result 演示 *1)新建 ResultAction30<!- 使用Ognl-><result name="success">/WEB-INF/jsp/day03/user.jsp?userId=$user.userId</result></action></package></struts>IT 培训集团l 重定向redirect2)修改 struts.xml注意:在 struts2 中,转发和重定向的地址都是从应用名之后开始写;这是struts2 中重定向写法不之前重定向写法的丌同

44、之处。3)重定向到day03/user.action31System.out.println("ResultAction.execute()");return "success"IT 培训集团与重定向相似的一个用法:redirectAction4)修改 struts.xml32集团l json如果想使用json,必须加入新的Jar 包5)拷贝 jar 包(struts2-json-plugin-.jar)到/lib 目录下打开 struts-plugin.xml”json-default“包继承了struts-default,在此基础上增加

45、了“json”33<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-/Apache Software Foundation/DTD Struts Configuration 2.0/EN" ""><struts><package name="" extends=""><result-types><result-type name=&q

46、uot;json"struts-defaultjson-defaultuser</result></action></package></struts>集团6)修改 ResultAction7)新建 result.jsp34class="org.apache.struts2.json.JSONResult"/></result-types><interceptors><interceptor name="json" class="org.apache.

47、struts2.json.JSONInterceptor"/></interceptors></package></struts>IT 培训集团按照转发的方式:type="dispatcher" 修改 struts.xmlØ8)9)35</h1><s:debug /></body></html>IT 培训集团按照 json 的方式:type="json"修改 struts.xmlØ10)11)显示的是json 字符串增加一些数据12)

48、修改 ResultAction36IT 培训集团13) 修改 result.jsp37<%page pageEncoding="utf-8"%><%taglib uri="/struts-tags" prefix="s"%><html><head><title></title></head><body><h1><s:property value="username" /></h1>&l

49、t;ul>private String username;private List<String> nameList; public String execute() username = "WhatisJava"nameList = new ArrayList<String>(); nameList.add("Struts"); nameList.add("Hibernate"); nameList.add("Spring");return "success"pu

50、blic String getUsername() return username; public void setUsername(String username) this.username = username;public List<String> getNameList() return nameList;public void setNameList(List<String> nameList) List = nameList;IT 培训集团按照转发的方式:type="dispatcher" 修改 struts.xml&

51、#216;14)15)38<s:iterator value="nameList"><li><s:property /></li></s:iterator></ul><s:debug /></body></html>IT 培训集团按照 json 的方式:type="json"修改 struts.xmlØ16)17)39IT 培训集团(案例结束)3.课堂练习【案例 4】综合练习 01【案例 4】代码,请练习描述实现功能:1)登录、2)、3)

52、增删改查参考代码项目结构示意图40IT 培训集团1)请 a.b.准备开发环境day03_课堂练习source.zip 新建项目memory准备数据库数据,执行db.sql41IT 培训集团42VALUES (98,'pm000002','上班赚钱喂吃肉','2008-02-01','2008-02-20');SQL> INSERT INTO t_projectVALUES (99,'pm000003','骑着上街溜达','2008-03-01','2008-03-08&

53、#39;);SQL> INSERT INTO t_projectVALUES (100,'pm000004','让咬我丌喜欢的人 ','2008-03-08','2008-03-10');SQL> INSERT INTO t_projectVALUES (167,'pm000071','name0968058634','2008-05-28','2008-08-26');SQL> INSERT INTO t_projectVALUES (168,&#

54、39;pm000072','name1255323646','2008-11-05','2009-01-17');SQL> INSERT INTO t_projectVALUES (197,'pm000101','和喝着咖啡彻夜长谈','2008-01-01','2008-02-02');# Table structure for table t_user #SQL> DROP TABLE IF EXISTS t_user; SQL> CREATE TABL

55、E t_user (t_id int(11) NOT NULL AUTO_INCREMENT,t_loginname varchar(50) DEFAULT NULL, t_password varchar(50) DEFAULT NULL,t_name varchar(100) DEFAULT NULL,#真实PRIMARY KEY (t_id) ENGINE=InnoDB;SQL> INSERT INTO t_user(t_loginname, t_password, t_name) VALUES ('whatisjava','12345','

56、goodman');IT 培训集团c.d.e.f.将 9 个 Jar 包拷贝到 lib 目录下拷贝 css、js 到项目下拷贝 jsp 页面文件到项目下( 配置 web.xml情况下会提供静态页面)g.建好各个 package在这样的环境下开始开发项目43IT 培训集团开始开发项目习惯上,我们先写struts 定义,再写Action 类,最后写页面功能l2)新建 struts.xml 文件3)新建 BaseAction44IT 培训集团4)a.新建 ProjectListAction,继承 BaseAction ProjectListAction45import java.util.M

57、ap;import erceptor.SessionAwar e;public class BaseAction implements SessionAware protected Map<String, Object> session;public String execute() return "success"public void setSession(Map<String, Object> session) this.session = session;集团注:在编程过程中要一层一层的写,先构建和

58、定义好比如 DAO 可以放到最后来实现,最后再实现这些,b.新建 Project注:在写顷目之前,最好先将属性及含义都 记住,在顷目过程中能更快速、避免一些错误。c.新建 ProjectDao46public ProjectDao getProjectDao() return projectDao;public void setProjectDao(ProjectDao projectDao) jectDao = projectDao;IT 培训集团注:有些做好了定义,如果担心之后忘记了写,可以增加/ TODO的注释,通过打开task 视图,跟踪这些只定义没有实现的双击这些“T

59、ODO”就可以定位到没有定义的处47package com.tarena.memory.dao;import java.util.List;import com.tarena.memory.entity.Project;public class ProjectDao public List<Project> findAll()return null;IT 培训集团d.修改 ProjectListAction5)修改 projectlist.jsp48IT 培训集团49<body topMargin="10"><div id="appe

60、nd_parent"></div><table cellSpacing=6 cellPadding=2 width="100%" border="0"><tbody><tr><td><table class="guide" cellSpacing="0" cellPadding="0" width="100%" border="0"><tbody><t

61、r><td>Memory的CRUD</td></tr></tbody></table><br /><form action="" method=""><!-顷目列表开始 -><table class="tableborder" cellSpacing="0" cellPadding="0" width="100%" border="0"><

62、;tbody><tr class="header"><td class="altbg1"><b>&nbsp;</b></td><td class="altbg1"><b>编号</B></td><td class="altbg1"><b>名称</B><td class="altbg1"><b>开始时间</B></td><td class="altbg1">IT 培训集团50<b>结束时间</B><

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论