• 1. Struts 2初体验第一章
  • 2. 本章任务实现基于Struts 2的用户登录
  • 3. 本章目标掌握Struts 2的使用方法 使用Struts 2实现用户登录 使用Struts 2实现访问Servlet API 使用标签和数据验证完成用户登录
  • 4. Struts 2及其优势 Struts 2是一个MVC框架,以WebWork设计思想为核心,吸收了Struts 1的部分优点 Struts 2拥有更加广阔的前景,自身功能强大,还对其他框架下开发的程序提供很好的兼容性
  • 5. Struts 2的资源获取 Struts官方地址:http://www.apache.com 本书选取Struts 2.1.6进行讲解 Struts 2 目录结构 apps目录:Struts2示例应用程序 docs目录:Struts2指南、向导、API文档 lib目录:Struts 2的发行包及其依赖包 src目录:Struts 2项目源代码
  • 6. 使用Struts 2实现:输入用户姓名,然后输出欢迎信息Struts 2初体验7-1
  • 7. 使用Struts 2 开发程序的基本步骤 加载Struts2 类库 配置web.xml 开发视图层页面 开发控制层Action 配置Struts 2的配置文件(struts.xml) 部署、运行项目Struts 2初体验7-2
  • 8. Struts 2初体验7-3第一步:加载Struts2 类库 文件名说 明struts2-core-2.1.6.jarStruts 2框架的核心类库xwork-2.1.2.jarXWork类库,Struts 2的构建基础ognl-2.6.11.jarStruts 2使用的一种表达式语言类库freemarker-2.3.13.jarStruts 2的标签模板使用类库commons-fileupload-1.2.1.jarStruts 2文件上传依赖包必须加载的5个jar文件
  • 9. 第二步:配置web.xml Struts 2初体验7-4 struts2 org.apache.struts2.dispatcher.ng.filter. StrutsPrepareAndExecuteFilter struts2 /* 将全部请求定位到指定的Struts 2过滤器中
  • 10. 第三步:开发视图层页面-helloWorld.jsp Struts 2初体验7-5…

    Hello World

    ${message}


    请输入您的姓名:
  • 11. 第四步:开发控制层Action-HelloWorldAction Struts 2初体验7-6public class HelloWorldAction { private String name = ""; // 用户输入的姓名 private String message = ""; // 向用户显示的信息 /** * 当Struts 2处理用户请求时,在默认配置下调用的方法 */ public String execute() { // 根据用户输入的姓名,进行“Hello,XXXX!”的封装 this.setMessage("Hello,"+this.getName()+"!"); // 处理完毕,返回“helloWorld” return "helloWorld"; } … //省略setter、getter方法 }
  • 12. 第五步:配置Struts 2配置文件(struts.xml) 第六步:部署、运行项目Struts 2初体验7-7 helloWorld.jsp 与Action返回字符串对应与form表单的action属性值对应演示示例:第一个Struts 2程序
  • 13. 练习——为租房网增加Struts 2支持需求说明: 修改租房网程序,为其添加Struts 2功能 提示: 在web.xml中配置Struts 2核心Filter 加载Struts 2框架的类库 增加struts.xml配置文件 完成时间:20分钟
  • 14. 共性问题集中讲解常见调试问题及解决办法 代码规范问题共性问题集中讲解
  • 15. 使用Struts 2实现:用户登录验证 实现步骤和Struts 2初体验相同Struts 2再体验4-1
  • 16. Struts 2再体验4-2第一步:加载Struts2 类库 第二步:配置web.xml 第三步:开发视图层页面 登录页面login.jsp 登录成功页面success.jsp 登录失败页面fail.jsp
    用户名:
    密码:

    登录成功

    欢迎您,${username}!

    登录失败

    用户名为空,或用户名密码不匹配
  • 17. 第四步:开发控制层Action-LoginAction Struts 2再体验4-3public class LoginAction { private String username = ""; private String password = ""; public String execute() { if("jbit".equals(username) && "bdqn".equals(password)) { return "success"; } else { return "fail"; } } … //省略setter和getter方法 }
  • 18. 第五步:配置Struts 2配置文件(struts.xml) 第六步:部署、运行项目Struts 2再体验4-4… success.jsp fail.jsp 演示示例:使用Struts 2实现用户登录
  • 19. 练习——为租房网添加用户登录 需求说明: 添加用户登录页 在LoginAction中获得用户名及密码并对其合法性进行验证 配置Struts.xml文件,用户登录成功和失败跳转的页面 完成时间:25分钟
  • 20. 共性问题集中讲解常见调试问题及解决办法 代码规范问题共性问题集中讲解
  • 21. 用户登录成功后,将用户名保存在session中,供多个页面和Action使用 在Struts 2 中通过Action属性的数据绑定降低了对request的使用需求,但是对于session、application还是有使用需求的 与Servlet API解耦的访问方式 与Servlet API耦合的访问方式Struts 2访问Servlet API 3-1
  • 22. 与Servlet API解耦的访问方式 Struts 2对Servlet API进行封装,提供了三个Map对象代替request、session、application 通过ActionContext类获取这三个Map对象 Object get("request") Map getSession() Map getApplication() Struts 2访问Servlet API 3-2 public class LoginAction { private static final String CURRENT_USER = "CURRENT_USER"; … //省略username、password属性及其setter和getter方法 public String execute() { if("jbit".equals(username) && "bdqn".equals(password)) { Map session = null; session = ActionContext.getContext().getSession(); if(session.containsKey(CURRENT_USER)) { session.remove(CURRENT_USER); } session.put(CURRENT_USER, username); return "success"; } else { return "fail"; } } }将用户名存入session获取session演示示例:与Servlet API解耦的访问方式
  • 23. 与Servlet API耦合的访问方式 通过ServletActionContext类获取Servlet API对象 ServletContext getServletContext() HttpServletResponse getResponse() HttpServletRequest getRequest() 通过request.getSession()获取session对象 通过xxx.setAttribute()和xxx.getAttribute() 功能,在不同的页面或Action中传递数据 Struts 2访问Servlet API 3-3 public class LoginAction { private static final String CURRENT_USER = "CURRENT_USER"; … //省略username、password属性及其setter和getter方法 public String execute() { if("jbit".equals(username) && "bdqn".equals(password)) { HttpSession session = null; session = ServletActionContext.getRequest().getSession(); if(session.getAttribute(CURRENT_USER) != null) { session.removeAttribute(CURRENT_USER); } session.setAttribute(CURRENT_USER, username); return "success"; } else { return "fail"; } } }将用户名存入session获取session演示示例:与Servlet API耦合的访问方式
  • 24. Struts 2表单标签3-1 Struts 2提供了功能强大的标签库 需要在JSP页面导入标签库 <%@ taglib prefix="s" uri="/struts-tags"%>” 常用表单标签标 签说 明表单标签…文本输入框…密码输入框…文本域输入框…单选按钮…多选框提交标签重置标签隐藏域标签
  • 25. 修改JSP页面 Struts 2表单标签3-2<%@ taglib prefix="s" uri="/struts-tags"%> …
    用户名:
    密  码:
    必须导入Struts 2标签库<%@ taglib prefix="s" uri="/struts-tags"%> …

    登录成功

    欢迎您,
  • 26. 修改struts.xml文件 Struts 2表单标签3-3… success.jsp fail.jsp 更改默认主题风格演示示例:Struts 2表单标签
  • 27. 对用户登录添加表单验证功能 Struts 2的提供了数据验证机制,需要继承ActionSupport类来完成Action开发 ActionSupport类不仅对Action接口进行简单实现,同时增加了验证、本地化等支持 Struts 2的数据校验4-1
  • 28. 修改LoginAction Struts 2的数据校验4-2 public class LoginAction extends ActionSupport { … public void validateExecute() { if("jbit".equals(username) && "bdqn".equals(password)) { Map session = ActionContext.getContext().getSession(); if(session.containsKey(CURRENT_USER)) { session.remove(CURRENT_USER); } session.put(CURRENT_USER, username); } else { super.addActionError("用户名为空,或用户名密码不匹配。"); } } public String execute() { return SUCCESS; } } 继承ActionSupport验证出错,指定错误提示信息验证成功
  • 29. 修改JSP页面 Struts 2的数据校验4-3 <%@ taglib prefix="s" uri="/struts-tags"%> …
    用户名:
    密  码:
    显示服务器返回的错误信息
  • 30. 修改struts.xml文件 Struts 2的数据校验4-4… success.jsp login.jsp “input”结果:指定用户输入不能通过验证时的返回页面演示示例:Struts2的数据校验
  • 31. 总结使用Struts 2 开发程序的基本步骤是什么? 在Struts 2中如何获取Servlet的session对象? ActionSupport类支持哪些功能?