毕设之每天总结 二
来源:互联网 发布:淘宝发优惠券软件 编辑:程序博客网 时间:2024/06/04 18:29
突然发现原来request中设置的属性可以是对象属性...然后在网页上用object.属性就能调用了...
那以后获取detail的entity只需要request.setAttribute('entity',entity);就行了
问题:
1.java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]
解决方法:数据库中的时间类型改成datetime
学习:
模板方法设计模式
模板方法模式(Template Method Pattern),定义一个操作中的算法骨架,而将一些实现步骤延迟到子类当中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
模板方法模式是比较简单的一种设计模式,但是它却是代码复用的一项基本技术,在类库中尤其重要,它遵循“抽象类应当拥有尽可能多的行为,应当拥有竟可能少的数据“的重构原则。作为模板的方法要定义在父类中,在方法的定义中使用抽象的方法,而只看父类的抽象方法是根本不知道怎样处理的,实际具体处理的是子类,在子类中实现具体功能,因此不同的子类执行将会得出不同的实现结果,但是处理流程还是按照父类定制的方式。这就是模板方法的要义所在,定制算法骨架,让子类具体实现。
--------------------------------《软件秘籍--设计模式那点事》
今天,因为需要把论文信息以表格的形式一条一条的列举出来,于是就用到了老师提供的GenericListAction,看了下源码继承的是AbstractController类。看过源码之后发现AbstractController就是模板方法模式的一个例子。
AbstractController是WebContentGenerator的子类,并实现了Controller接口。AbstractController是最重要的Controller接口实现之一 ,它提供了一些很基本的功能特征,例如生成HTTP协议的缓存头标数据,设定GET/POST动作等等。
考察一下AbstratorController所在的类层次:
java.lang.Object|_ org.springframework.context.support.ApplicationObjectSupport |_ org.springframework.web.context.support.WebApplicationObjectSupport |_ org.springframework.web.servlet.support.WebContentGenerator |_ org.springframework.web.servlet.mvc.AbstractController
AbstratorController从其超类中继承许多属性,这些属性可以通过配置文件注入:
* supportedMethods :指明本Controller应该接受的方法,缺省值“GET,POST”,开发人员也可以自己修改本属性以反应欲支持的方法。若一个请求带有该方法设定,但Controller并不支持,那么这个信息将被通知客户。
* requiresSession:指明本Controller是否需要一个HTTP会话以完成它的工作,若Contrller在接收一个请求时并没有HTTP会话存在,那么将抛出一个ServletException。本属性的缺省值是false。
* synchronizeSession:若在客户的HTTP会话中,需要以同步方式处理Controller,则使用本属性。
* cacheSeconds:当需要Controller为客户的HTTP响应生成一个缓存指令时,可以为cacheSeconds指定一个正整数。本属性缺省值为-1,即不设定缓存。
* useExpiresHeader:指示Controller为客户的HTTP响应指定一个兼容HTTP 1.0版本中的"Expires"头标数据。本属性缺省值是true。
* useCacheHeader:指示Controller为客户的HTTP响应指定一个兼容HTTP 1.1版本中的"Cache-Control"头标数据。本属性缺省值是true。
阅读一下AbstractController的源代码:
package org.springframework.web.servlet.mvc;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.support.WebContentGenerator;import org.springframework.web.util.WebUtils;public abstract class AbstractController extends WebContentGenerator implements Controller { private boolean synchronizeOnSession = false; public final void setSynchronizeOnSession(boolean synchronizeOnSession) { this.synchronizeOnSession = synchronizeOnSession; } public final boolean isSynchronizeOnSession() { return synchronizeOnSession; } public final ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { checkAndPrepare(request, response, this instanceof LastModified); if (this.synchronizeOnSession) { HttpSession session = request.getSession(false); if (session != null) { Object mutex = WebUtils.getSessionMutex(session); synchronized (mutex) { return handleRequestInternal(request, response); } } } return handleRequestInternal(request, response); } protected abstract ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception;}
从上述代码可以看出,AbstractorController的工作流程如下:
1.DispatcherServlet调用handleRequest方法;
2.检查被支持的方法(GET/POST/PUT之一),若不支持则抛出ServletException;
3.若需要发起一个session,则尝试获取一个session,若获取不到,则抛出ServletException;
4.根据cacheSeconds属性,设定缓存头标的数据;
5.调用受保护的抽象方法handleRequestInternal,这个方法应由AbstractController的子类提供实际的功能实现,并返回ModelAndView对象。
当开发人员使用AbstractController作为自己所设计的控制器的基类时,只需覆盖handleRequestInternal(HttpServletRequest, HttpServletResponse)方法即可,并返回一个ModelAndView对象,示例如下:
package samples;public class SampleController extends AbstractController {public ModelAndView handleRequestInternal(HttpServletRequest request,HttpServletResponse response) throws Exception { ModelAndView modelAndView = new ModelAndView("hello"); modelAndView.addObject("message", "Hello World!"); return modelAndView;}}父模板多行为,少数据,具体实现handleRequest方法交给继承自己的子类去完成。处理逻辑又父模板控制,定制算法骨架,让子类具体实现。
典型的模板方法模式。SimpleFormController也是同样的原理。只不过需要子类实现的方法不一样而已
- 毕设之每天总结 二
- 毕设之每天总结 四
- 毕设之每天总结 三【12.03.30】
- 毕设之每天总结 五:模拟百度自动匹配
- 毕设总结之 六
- 毕设总结之 八
- 毕设项目总结之序章
- 毕设总结
- 毕设总结
- 毕设总结
- android 毕设点滴之显示进度条(二)
- 毕设之s3c2440视频监控系统总结
- 毕设之 asterisk
- 毕设日记(二)
- elk 毕设资料总结
- 毕业设计之每天总结 一
- 毕设小结(二)Android进程间通信之LocalSocket
- 毕设开发之二-对概要设计的重要性的理解
- UI----自定义android界面的标题
- 典型的 C++ 程序员成长经历
- 常用的兵刃(一)
- 判断当前网络状况
- vb 报告
- 毕设之每天总结 二
- 用OpenCms API获取XML数据资源
- 第一节vb课
- android调用平台功能
- 使用分析函数为记录进行分组排名(rank, dense_rank, row_number)——分析函数2
- pl /sql导入导出表结构,表数据,sql脚本
- Linux TCP/IP协议栈的通用编码模式解析
- 获取Repeater的当前行号
- linux的CFQ调度器解析(1)