struts2课堂笔记.xls_第1页
struts2课堂笔记.xls_第2页
struts2课堂笔记.xls_第3页
struts2课堂笔记.xls_第4页
struts2课堂笔记.xls_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

1 serlvet回顾 2 重构servlet 3 struts2的基本配置 基本要掌握的东西 4 action的原型模式 5 通配符 特点常用的 6 利用struts2怎么样访问servlet的API 7 拦截器 重点和难点 8 OGNL 难点和重点 servlet 1 服务器端运行的程序 2 三个方法 init service destroy 3 步骤 1 在web xml中 描述了servlet类本身 HelloWorldServlet cn heima6 servlet HelloWorldServlet 怎么样请求servlet HelloWorldServlet HelloWorldServlet 4 servlet的缺点 1 web xml配置比较多 不利于团队开发 2 servlet具有容器依赖性 没有办法进行测试 3 如果要在servlet中写多个方法 会导致很不好的结构 注意 在servlet中 一个servlet只生成一个对象 这就意味着servlet的属性如果是数据 则这个 数据将是全局的数据 数据是共享的数据 共享数据容器引起线程安全问题 所以在servlet 中 数据应该放在方法中 url http localhost 8080 heima6 HelloWorldServlet web xml HelloWorldServlet cn heima6 servlet HelloWorldServlet HelloWorldServlet HelloWorldServlet url http localhost 8080 heimai 6 HelloWorldAction action web xml dispatcher cn heima6 filter DispatcherFilter dispatcher DispatcherFilter 功能 把每一个请求的url 转发到相应的action 通过java的反射机制 在转发的时候 应该把H ttpServletRequest和HttpServletResponse这两个参数带过去 doFilter Action action Action Class forName cn heima6 action actionName newInstance forward指定要跳转到的jsp页面 String forward action execute this request this response 跳转的方法 重定向 request里的参数不起作用 this response sendRedirect jsp页面 转发 放在request作用域里的值可以取出来 this request getRequestDispatcher index jsp forward this request this response this request getRequestDispatcher index jsp forward this request this response 重构以后的serlvet框架的缺点 红色部分 cn heima6 action actionName包的名字写死了 没有动态的调用 红色部分 HelloWorldAction中的execute request response 仍然具有容器依赖性 面试的问题 servlet有什么样的缺点 1 web xml配置比较多 2 servlet具有容器依赖性 web xml dispatcher cn heima6 filter DispatcherFilter dispatcher servlet 1 服务器端运行的程序 2 三个方法 init service destroy 3 步骤 1 在web xml中 描述了servlet类本身 HelloWorldServlet cn heima6 servlet HelloWorldServlet 怎么样请求servlet HelloWorldServlet HelloWorldServlet 4 servlet的缺点 1 web xml配置比较多 不利于团队开发 2 servlet具有容器依赖性 没有办法进行测试 3 如果要在servlet中写多个方法 会导致很不好的结构 注意 在servlet中 一个servlet只生成一个对象 这就意味着servlet的属性如果是数据 则这个 数据将是全局的数据 数据是共享的数据 共享数据容器引起线程安全问题 所以在servlet 中 数据应该放在方法中 HelloWorldServlet HelloWorldAction execute request response Action abstract class或者 interface web xml HelloWorldServlet cn heima6 servlet HelloWorldServlet HelloWorldServlet HelloWorldServlet web xml dispatcher cn heima6 filter DispatcherFilter dispatcher web xml dispatcher cn heima6 filter DispatcherFilter dispatcher DispatcherFilter 功能 把每一个请求的url 转发到相应的action 通过java的反射机制 在转发的时候 应该把H ttpServletRequest和HttpServletResponse这两个参数带过去 doFilter Action action Action Class forName cn heima6 action actionName newInstance forward指定要跳转到的jsp页面 String forward action execute this request this response 跳转的方法 重定向 request里的参数不起作用 this response sendRedirect jsp页面 转发 放在request作用域里的值可以取出来 this request getRequestDispatcher index jsp forward this request this response this request getRequestDispatcher index jsp forward this request this response 重构以后的serlvet框架的缺点 红色部分 cn heima6 action actionName包的名字写死了 没有动态的调用 红色部分 HelloWorldAction中的execute request response 仍然具有容器依赖性 面试的问题 servlet有什么样的缺点 1 web xml配置比较多 2 servlet具有容器依赖性 HelloWorldAction execute request response 测试结果类型为dispatcher 测试 successResultType jsp public String testRispatcher throws Exception 把一个String类型的字符串放入到request域中 ServletActionContext getRequest setAttribute msg msg return rispatcher 测试结果类型为redirect 测试 重定向 successResultType jsp public String testRedirect ServletActionContext getRequest setAttribute msg msg return redirect 测试结果类型为redirectAction 从action跳转到action 测试 resulttype dispatcherAction action从action到action的跳转路径 public String testRedirectAction return actiontoaction 重定向 successResultType jsp 提交一个请求 验证 如果用户名和密码合法 则把后台person表中的数据显示出来 loginServlet loginServlet doGet 验证用户名和密码是否存在 如果存在则 跳转到PersonServlet serlvet to servlet 如果不存在 跳转到出错页面 servlet to jsp PersonServlet 调用dao查询person表中的数据 从serlvet到servlet successResultType jsp public String testRispatcher throws Exception 把一个String类型的字符串放入到request域中 ServletActionContext getRequest setAttribute msg msg return rispatcher 测试结果类型为redirect 测试 重定向 successResultType jsp public String testRispatcher throws Exception 把一个String类型的字符串放入到 request域中 ServletActionContext getRequest setAttribute msg msg return rispatcher successResultType js p 重定向 successResultType jsp public String testRedirect ServletActionContext getRequest setAttribute msg msg return redirect 测试结果类型为redirectAction 从action跳转到action 测试 resulttype dispatcherAction action从action到action的跳转路径 public String testRedirectAction return actiontoaction loginServlet doGet 验证用户名和密码是否存在 如果存在则 跳转到PersonServlet serlvet to servlet 如果不存在 跳转到出错页面 servlet to jsp PersonServlet 调用dao查询person表中的数据 从serlvet到servlet public class PrototypeAction extends ActionSupport 构造函数 public PrototypeAction System out println new action public String execute throws Exception return SUCCESS 当请求PrototypeAction时 请求几次 输出几次 new action action不是单例模式 可以把数据放入到属性中 属性中存放的数据 如果太大 也不是特别合适 url http localhost 8080 struts2 interceptorActi StrutsPrepareAndExecuteFilter 拦截器 ParametersInterceptor 参数拦截器 ModelDrivenInterceptor 模型驱动拦截器 FileUploadInterceptor 文件上传的拦截器 在struts default xml文件中 InterceptorAction 结合拦截器的详细的流程 测试在调用action之前 ParametersInterceptor拦截器的执行 测试 页面代码做了两件事情 1 把一个字符串放入到session域中 key值为admin 2 请求IntercetorAction中的add方法 目标类的目标方法为add方法 自己定义的拦截器栈 可以存放很多 拦截器 引入自己的拦截器 把拦截器放入到拦截器栈中 引入struts2内部的拦截器 在配置文件中使用拦截器栈 successInterceptor jsp 说明 先经过默认的拦截器 再经过自己写的拦截器 ActionProxy 代理类由struts2框架自动生成 struts2内部的拦截器 内部的拦截器 谁声明在先 谁先执行 自定义的拦截器 目标类的目标方法 页面 拦截器 ParametersInterceptor 参数拦截器 ModelDrivenInterceptor 模型驱动拦截器 FileUploadInterceptor 文件上传的拦截器 在struts default xml文件中 InterceptorAction 测试在调用action之前 ParametersInterceptor拦截器的执行 测试 页面代码做了两件事情 1 把一个字符串放入到session域中 key值为admin 2 请求IntercetorAction中的add方法 目标类的目标方法为add方法 自定义拦截器 1 必须实现Interceptor接口 2 init interceptor destroy构成了拦截器的生命周期 3 在interceptor方法中 必须执行 return invocation invoke 调用目标类的目标方法 4 interceptor方法的返回值必须和配置文件中的result中的n ame保持一致 Public String interceptor return success 自己定义的拦截器栈 可以存放很多 拦截器 引入自己的拦截器 把拦截器放入到拦截器栈中 引入struts2内部的拦截器 在配置文件中使用拦截器栈 successInterceptor jsp 说明 先经过默认的拦截器 再经过自己写的拦截器 ActionProxy 代理类由struts2框架自动生成 struts2内部的拦截器 内部的拦截器 谁声明在先 谁先执行 自定义的拦截器 目标类的目标方法 自己定义的拦截器栈 可以存放很多 拦截器 引入自己的拦截器 把拦截器放入到拦截器栈中 引入struts2内部的拦截器 在配置文件中使用拦截器栈 successInterceptor jsp 说明 先经过默认的拦截器 再经过自己写的拦截器 自定义拦截器 1 必须实现Interceptor接口 2 init interceptor destroy构成了拦截器的生命周期 3 在interceptor方法中 必须执行 return invocation invoke 调用目标类的目标方法 4 interceptor方法的返回值必须和配置文件中的result中的n ame保持一致 Public String interceptor return success el表达式 1 导包 2 把相应的值放入到request session appliction 3 在页面上进行显示 OGNL 值栈 1 研究OGNL的内存结构 2 把数据放入到OGNL中 3 利用ognl表达式把数据显示出来 研究ValueStack的内存结构 public class OgnlValueStack CompoundRoot root Map context public class CompoundRoot extends ArrayList ValueStack OgnlValueStack context Map map栈 root CompoundRoot extends ArrayList ArrayList ValueStackAction values Map key request application root CompoundRoot extends ArrayList 对象栈 arrayList ValueStackAction DefaultTextProvider 国际化类 DefaultTextProvider session parameters action 说明 1 对象栈的内容和context的 root属性是一样的 2 客户端请求的action出现在对象栈 root values中 3 values封装了application session reuqest parameters域 4 当action创建的时候 valueStack就创建了 当action消失的时候 valueStack就消失了 5 ValueStack valueStack3 ValueStack ServletActionContext getRequest getAttribute struts valueStack 从上述代码可以看出来 ValueStack来自于request 所以ValueStack的作用域是request ValueStack OgnlValueStack context Map map栈 root CompoundRoot extends ArrayList ValueStackAction values Map 存放数据的过程 ServletActionContext getRequest setAttribute request username username ActionContext getContext getSession put session username username ServletActionContext getServletContext setAttribute application username username values Map key value request Map request username username session Map session username username application Map application username username 利用request session application存放数据 利用ActionContext getContext put key value ActionContext getContext put msg msg OgnlValueStack values key value msg msg ActionContext getContext put person person 说明 1 对象栈的内容和context的 root属性是一样的 2 客户端请求的action出现在对象栈 root values中 3 values封装了application session reuqest parameters域 4 当action创建的时候 valueStack就创建了 当action消失的时候 valueStack就消失了 5 ValueStack valueStack3 ValueStack ServletActionContext getRequest getAttribute struts valueStack 从上述代码可以看出来 ValueStack来自于request 所以ValueStack的作用域是request OgnlValueStack values key value person person对象 利用ValueStack getRoot add方法把对象放入到对象栈中 Person person new Person person setPid 1 person setPname aaa ValueStack valueStack ActionContext getContext getValueStack valueStack getRoot add person valueStack getRoot add 0 person 0代表存放在集合的最上面 栈顶 OgnlValueStack root CompoundRoot extends ArrayList 如果调用add Object 方法 则存放在对象栈的最下面 如果调用add 0 Object 方法 则存放在对象栈的栈顶 存放一个person对象 context OgnlContext root ArrayList person对象 和root中存放的person对象一样 调用valueStack set方法 把一个对象起一个名字作为key值 整个作为map放入到栈顶 ValueStack valueStack ActionContext getContext getValueStack valueStack set msg msg OgnlValueStack root ArrayList HashMap key value msg msg 利用ValueStack push方法把一个对象压入到对象栈中 ValueStack valueStack ActionContext getContext getValueStack Person person new Person person setPid 1 person setPname aaa valueStack push person 调用push方法把对象压入到对象栈顶 OgnlValueStack root person对象在栈顶 总结 1 可以利用reqeust session application把一个数据放入到ValueStack的map中 2 可以利用ActionContext getContext put方法把一个数据放入到map中 3 可以利用ValueStack getRoot add object 方法把一个对象放入到对象栈中 栈低 4 可以利用ValueStack getRoot add index object 可以把一个对象放入到对象栈中 index 指定位置 5 可以利用valueStack的set方法把对象放入到栈顶 放入到栈顶的是一个HashMap 6 可以利用valueStack的push方法把一个对象放入到对象栈的栈顶 OgnlValueStack root ArrayList HashMap key value msg msg OGNL 值栈 1 研究OGNL的内存结构 2 把数据放入到OGNL中 3 利用ognl表达式把数据显示出来 public class OgnlValueStack CompoundRoot root Map context values Map 这里封装了这么一些信息 key value request RequestMap application ApplicationMap session SessionMap parameters Map action ValueStackAction value RequestMap ApplicationMap SessionMap public class CompoundRoot extends ArrayList ValueStack OgnlValueStack context Map map栈 values Map request application session Map ValueStackAction ValueStack OgnlValueStack context Map map栈 values Map root CompoundRoot extends ArrayList 对象栈 session parameters action 说明 1 对象栈的内容和context的 root属性是一样的 2 客户端请求的action出现在对象栈 root values中 3 values封装了application session reuqest parameters域 4 当action创建的时候 valueStack就创建了 当action消失的时候 valueStack就消失了 5 ValueStack valueStack3 ValueStack ServletActionContext getRequest getAttribute struts valueStack 从上述代码可以看出来 ValueStack来自于request 所以ValueStack的作用域是request SessionMap 说明 1 对象栈的内容和context的 root属性是一样的 2 客户端请求的action出现在对象栈 root values中 3 values封装了application session reuqest parameters域 4 当action创建的时候 valueStack就创建了 当action消失的时候 valueStack就消失了 5 ValueStack valueStack3 ValueStack ServletActionContext getRequest getAttribute struts valueStack 从上述代码可以看出来 ValueStack来自于request 所以ValueStack的作用域是request ServletActionContext getRequest setAttribute request username username ActionContext getContext getSession put session username username ServletActionContext getServletContext setAttribute application username username values Map key value request Map request username username session Map session username username application Map application username username 利用request session application存放数据 OgnlValueStack values key value msg msg OgnlValueStack values key value person person对象 Person person new Person person setPid 1 person setPname aaa ValueStack valueStack ActionContext getContext getValueStack valueStack getRoot add person valueStack getRoot add 0 person 0代表存放在集合的最上面 栈顶 OgnlValueStack root CompoundRoot extends ArrayList 如果调用add Object 方法 则存放在对象栈的最下面 如果调用add 0 Object 方法 则存放在对象栈的栈顶 存放一个person对象 context OgnlContext root ArrayList person对象 和root中存放的person对象一样 调用valueStack set方法 把一个对象起一个名字作为key值 整个作为map放入到栈顶 ValueStack valueStack ActionContext getContext getValueStack Person person new Person person setPid 1 person setPname aaa valueStack push person 调用push方法把对象压入到对象栈顶 OgnlValueStack root person对象在栈顶 总结 1 可以利用reqeust session application把一个数据放入到ValueStack的map中 2 可以利用ActionContext getContext put方法把一个数据放入到map中 3 可以利用ValueStack getRoot add object 方法把一个对象放入到对象栈中 栈低 4 可以利用ValueStack getRoot add index object 可以把一个对象放入到对象栈中 index 指定位置 5 可以利用valueStack的set方法把对象放入到栈顶 放入到栈顶的是一个HashMap 6 可以利用valueStack的push方法把一个对象放入到对象栈的栈顶 Map String List key list username password 用户名不能为空 密码不能为空 密码的长度不能小于6 String username ServletActionContext getRequest getParameter username String password ServletActionContext getRequest getParameter password if equals username this addFieldError username 用户名不能为 空 if equals password this addFieldError password 密码不能为空 else if password length 6 this addFieldError password 密码的长度不能 小于6 Map String List list 用户名不能为空 密码不能为空 密码的长度不能小于6 1 可以写很多个配置文件 可以保证组队的一人一个配置文件 2 struts2中的action和servletAPI完全松耦合 好处 1 没有容器的依赖性 2 方便做测试 在java中 代理模式一方面的作用是 这个是业务逻辑类 TargetObject public void buiness 代理对象 buiness 目标对象 buiness privilege 权限方法 拦截器的作用 控制目标对象的目标方法的执行 在struts2中 页面请求一个action中的一个方法 这个action中的方法就是目标对象的目标方法 http localhost 8080 heima6struts2 base helloWorldAction add action 上面的url 目标对象是HelloWorldAction 目标方法是add 权限判断类 Privilege String access 代理对象 buiness 目标对象 buiness privilege 权限方法 拦截器的作用 控制目标对象的目标方法的执行 在struts2中 页面请求一个action中的一个方法 这个action中的方法就是目标对象的目标方法 http localhost 8080 heima6struts2 base helloWorldAction add action 上面的url 目标对象是HelloWorldAction 目标方法是add 两种方法建立struts2与servlet的通信 1 利用ServletActionContext类 public String testServlet1 HttpServletRequest request ServletActionContext getRequest request setAttribute request username username HttpServletResponse response ServletActionContext getResponse HttpSession是servlet的session HttpSession session request getSession session setAttribute session username username strus2封装以后的session Map sessionMap ServletActionContext getContext getSession sessionMap put session username username ServletContext servletContext ServletActionContext getServletContext servletContext setAttribute application username username return servlet 2 利用action类本身实现了三个接口 ServletContextAware SessionAware ServletRequestAware 两种方法建立struts2与servlet的通信 1 利用ServletActionContext类 public String testServlet1 HttpServletRequest request ServletActionContext getRequest request setAttribute request username username HttpServletResponse response ServletActionContext getResponse HttpSession是servlet的session HttpSession session request getSession session setAttribute session username username strus2封装以后的session Map sessionMap ServletActionContext getContext getSession sessionMap put session username username ServletContext servletContext ServletActionContext getServletContext servletContext setAttribute application username username return servlet 2 利用action类本身实现了三个接口 ServletContextAware SessionAware ServletRequestAware 查找location的来源 success jsp 因为result标签中没有type属性 所以应该是默认的 转发 public class ServletDispatcherResult extends StrutsResultSupport public abstract class StrutsResultSupport private String location location的set和get方法 success jsp 通过location的set方法赋值了 1 在配置文件中action标签中的method 在配置文件中 action标签里有method属性 请求testMethod方法 a 在配置文件中 action标签里有method属性 请求testAaa方法 a successPattern jsp successPattern jsp 2 actionName action的名称 methodName 方法名称 利用action名称 方法名称动态调用action中的方法 测试 successPattern jsp 3 a add b add c add这里的a b c可以动态表示 通配符映射一 a add action b add action c add action全部请求PatternAction的add方法 a add b add c add successPattern jsp 4 不同的action 相同的方法映射 通配符映射二 请求PersonAction和StudentAction的add方法 personAction studentAction successPattern jsp 说明 如果客户端url是PersonAction add action 则 代表PersonAction 1 也代表 PersonAction 5 相同的action 不同的方法 请求PatternAction中的aa bb cc dd方法 aa bb cc dd successPattern jsp 6 不同的action 不同的方法 请求PersonAction和StudentAction中的aa bb方法 person aa person bb student aa student bb successPattern jsp successPattern jsp PatternAction public String testMethod public String testAaa PatternAction public String testMethod 在配置文件中 action标签里有method属性 请求testMethod方法 a 在配置文件中 action标签里有method属性 请求testAaa方法 a successPattern jsp successPattern jsp successPattern jsp PatternAction public String add return add PersonAction add StudentAction add 通配符映射一 a add action b add action c add action全部请求PatternAction的add方法 a add b add c add successPattern jsp 通配符映射二 请求PersonAction和StudentAction的add方法 personAction studentAction successPattern jsp PatternAction public String aa public String bb public String cc public String dd PersonAction public String aa public String bb StudentAction public String aa public String bb 说明 如果客户端url是PersonAction add action 则 代表PersonAction 1 也代表 PersonAction 请求PatternAction中的aa bb cc dd方法 aa bb cc dd successPattern jsp 请求PersonAction和StudentAction中的aa bb方法 person aa person bb student aa student bb successPattern jsp successPattern jsp PersonAction public String aa public String bb StudentAction public String aa publ

温馨提示

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

评论

0/150

提交评论