340 likes | 642 Views
第二章. Struts 原理(一). 回顾. 为什么要使用框架? 说出三个流行的 Java 框架。 什么是 MVC ? MVC 有什么用? Struts 框架有什么用?. 预习检查. 如何在 web.xml 中配置 Struts ? Struts 默认的配置文件名是什么? Struts 中有哪几类组件?. 本章任务. 使用 Struts 框架实现: 加法器 发布房屋信息. 本章目标. 理解 Struts 框架的工作原理 掌握使用 Struts 框架开发 Web 应用的基本步骤 熟悉 MyEclipse 对 Struts 开发的支持.
E N D
第二章 Struts原理(一)
回顾 • 为什么要使用框架? • 说出三个流行的Java框架。 • 什么是MVC?MVC有什么用? • Struts框架有什么用?
预习检查 • 如何在web.xml中配置Struts? • Struts默认的配置文件名是什么? • Struts中有哪几类组件?
本章任务 • 使用Struts框架实现: • 加法器 • 发布房屋信息
本章目标 • 理解Struts框架的工作原理 • 掌握使用Struts框架开发Web应用的基本步骤 • 熟悉MyEclipse对Struts开发的支持
Web框架事实标准 http://struts.apache.org Java EE主流技术趋势图 主流 Web 框架趋势图 : Web框架的事实标准
使用Struts实现加法器 • 使用 开发的4个步骤 给项目添加Struts支持 实现业务类 添加Struts组件 1、ActionForm 2、Action 3、添加jsp页面 4、配置struts-config.xml 调试运行 1 2 3 4 完成的项目
使用Struts实现加法器 新建Web项目 添加Struts支持 给项目添加Struts支持 1 在项目节点上单击右键 点选 MyEclipse Add Struts Capabilities
使用Struts实现加法器 添加Struts支持前的项目 1 给项目添加Struts支持 Struts是基于Servlet技术实现的框架 • 增加了: • Struts JAR 包 • struts-config.xml • Struts标签库 • 修改了web.xml 可以配置Struts配置文件的文件名,支持多个配置文件 拦截所有以“.do”结尾的请求 添加Struts支持后的项目
使用Struts实现加法器 实现业务类(模型 - Model) 2
使用Struts实现加法器 2 填写Name属性 1 使用“Struts 1.2 Form,Action&JSP”向导新建组件 填写Form type属性 3 添加Struts组件 3 • 1、ActionForm 单击Add,给Form增加属性。
使用Struts实现加法器 添加Struts组件 3 2、Action 配置Action属性 设置Path属性 即访问该Action的路径 设置Type属性 即Action对应的Java类 设置Form属性 将Form和Action关联 设置Forwards属性 用于配置转发的JSP页面
使用Struts实现加法器 3 添加Struts组件 • 2、Action -- 编写Action代码 y2ssh.sg.chp2.AddAction.java public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { Calculator calc = new Calculator(); //获得ActionForm的引用 AddForm addForm = (AddForm) form; double model = calc.add( Double.parseDouble(addForm.getFirstNumber()), Double.parseDouble(addForm.getSecondNumber())); //将计算结果存储到request中 request.setAttribute("sum", model); //将请求转发到"result"出口指向的页面 return mapping.findForward("result"); } 从ActionForm中即可获得表单提交的参数 通过逻辑名引用页面 逻辑名和页面对应关系在struts-config.xml中配置
使用Struts实现加法器 /ch02/add.jsp <html:form action="/add" method="post"> 第一个数: <input type="text" name="firstNumber"/> 第二个数: <input type="text" name="secondNumber"/> <input type="submit" name="submitAdd" value="加"/> </html:form> /ch02/add_result.jsp 第一个数:${requestScope.addForm.firstNumber} 第二个数:${requestScope.addForm.secondNumber} 结果:${requestScope.sum} 3 添加Struts组件 • 3. 添加JSP页面 • 根据 Action 的 Forwords属性 • 的设置,添加add.jsp和 • add_result.jsp两个页面 采用Struts提供的html:form标签 对应前面Action 的path属性 对应前面Form 的属性名 ActionForm保存在request或session中
使用Struts实现加法器 add.jsp AddAction.java 3 添加Struts组件 • 4、配置struts-config.xml
使用Struts实现加法器 调试运行 3 演示示例:基于Struts实现加法器
小结 • 使用Struts开发加法器过程中使用了哪些Struts组件? • 使用Struts开发步骤是什么? 1、添加Struts支持 2、开发业务逻辑类(模型,Model) 3、开发ActionForm组件(视图组件,View) 4、开发Action组件(控制组件,Controller) 5、开发JSP页面 6、修改配置文件struts-config.xml,配置ActionForm和Action 7、调试运行 ActionForm组件 Action组件
Struts原理 数据库 • 回顾Servlet+JSP+JavaBean的编程模型 Servlet JaveBean JSP
Struts原理 add.jsp add_result.jsp • 自定义框架原理 视图 Controller Servlet AddAction 控制器 Calculator 业务逻辑方法 模型
Struts原理 struts-config.xml • Struts Web应用运行过程 控制器组件: ActionServlet 模型组件: [Post]Biz 控制器组件: [Add]Action 控制器组件: [Post]Action 数据库 模型组件: [Post]DAO 视图组件: JSP 视图组件: JSP
Struts原理 1、页面提交的数据封装到ActionForm中 2、通过请求路径查找Struts-config.xml中Action的配置,找到并调用对应的Action Controller (控制器) • Struts原理 1 ActionServlet 4 数据库 AddForm, ActionMapping 2 JavaBean [Add]Action 3 6 Model(模型) 5 JSP • 开发时只需关注: • ·两个核心组件: • ActionForm • [Add]Action • ·一个配置文件 查找ActionMapping,找到正确的JSP页面,并转发 View(视图)
Struts MVC小结 • 控制器组件 • ActionServlet • 由Struts提供:org.apache.struts.action.ActionServlet • 是一个Servlet,需要在web.xml中配置 • [Add]Action -- Action Bean • 封装一类客户操作 • 继承自org.apache.struts.action.Action,实现execute方法 • 需要在struts-config.xml中配置 public class AddAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { // TODO: 在这里添加代码 return mapping.findForward("result"); } }
Struts MVC小结 • 视图组件 • ActionForm -- Form Bean • 封装页面提交的数据 • 继承自org.apache.struts.action.ActionForm • 需要在struts-config.xml中配置 • 与JSP的交互 -- 从页面获得输入 -- 发送数据到页面 • 其他视图组件:JSP、JSTL、EL、自定义标签 • 第4章介绍Struts标签 addForm.getFirstNumber(); request.setAttribute("data", data);
Struts MVC小结 • 模型组件 • Struts对模型组件的实现没有任何限制 • 一般为:[User]Biz接口、[User]BizImpl类、[User]DAO接口、[User]DAOJdbcImpl类。 • struts-config.xml • 配置Form Bean和Action Bean • 服务器启动时,Struts装载struts-config.xml信息 <struts-config> <form-beans> <form-bean name="addForm" type="y2ssh.sg.ch2.web.form.AddForm" /> </form-beans> <action-mappings> <action name="addForm" path="/add" scope="request" type="y2ssh.sg.ch2.web.action.AddAction"> <forward name="input" path="/add.jsp" /> <forward name="result" path="/add_result.jsp" /> </action> </action-mappings> </struts-config>
小结 • Struts是如何实现MVC的?
Struts深度历险 • Struts执行顺序 • 在AddForm和AddAction中增加调试代码 • 运行程序查看控制台输出 ActionServlet调用AddForm的setter方法 然后调用AddAction 的execute方法 最后页面将Form中的值显示出来
Struts深度历险 • ActionForm和ActionMapping中有什么? • Action中execute方法的参数列表 • 设置断点,观察变量 AddAction.java • public ActionForward execute( • ActionMapping mapping, • ActionForm form, • HttpServletRequest request, HttpServletResponse response) 通过在excute方法中设置断点、观察变量,可以帮我们解决很多使用Struts中出现的问题
小结 • 结合下图,说说Struts的运行过程。
使用Struts开发“发布出租信息” • 使用Struts开发“发布房屋信息”功能 • 模型(Model)组件 • 典型的三层结构 • 面向接口编程 • 开发顺序: DAO Biz Form Bean JSP Action Bean struts-config.xml • 调试
使用Struts开发“发布出租信息” post.jsp confirm.jsp PostAction userlist login error 1、如果未登录,转到login 2、如果isConfirmed为false,转到confirm;否则,保存数据,转到userlist 3 、如果出错,转到error • 业务流程
使用Struts开发“发布出租信息” public ActionForward execute(...){ //如果没有登录,转发到登录页面 HttpSession session = request.getSession(false); USER user = null; if (session != null) { user = (USER) session.getAttribute("user"); } if(user == null){ return mapping.findForward("login"); } //如果还没有确认,转到确认页面 String confirm = request.getParameter("confirm"); if(null==confirm || !"yes".equals(confirm)){ return mapping.findForward("confirm"); } //调用业务逻辑方法,插入数据到数据库 try{ FwxxForm fwxxForm = (FwxxForm) form; FWXX fwxx = new FWXX(); fwxx.setTitle(fwxxForm.getTitle()); ... biz.post(fwxx); request.setAttribute("msg","发布成功!"); return mapping.findForward("index"); }catch(Exception e){ request.setAttribute("msg","出错啦:" + e.getMessage()); return mapping.findForward("error"); } } PostAction.java • 实现代码
使用Struts开发“发布出租信息” <form-beans> <form-bean name="fwxxForm" type="com.aptech.jb.entity.form.FwxxForm" /> </form-beans> <action-mappings> <action name="fwxxForm" path="/post" scope="request" type="com.aptech.jb.action.PostAction"> <forward name="affirm" path="/affirm.jsp" /> <forward name="userlist" path="/list.do?myrent=y" /> <forward name="login" path="/login.jsp" /> <forward name="error" path="/error.jsp" /> </action> </action-mappings> • 配置文件 演示示例:使用Struts开发“发布出租信息”功能
总结 • 如何使用Struts开发登录功能? • Action组件的作用是什么? • ActionForm组件的作用是什么? • struts-config.xml中都配置了哪些信息? • 回忆Struts架构图,讲述Struts是如何实现MVC模式的?