发表于: 2018-01-02 21:15:20

1 506


今日完成

1.小课堂上传与整理。

2.自定义jstl标签,完成long类型时间的转换。

理论:

一个tag就是一个普通的java类,它唯一特别之处是它必须继承 TagSupport或者BodyTagSupport类。这两个类提供了一些方法,负责jsp页面和你编写的类之间的交互,例如输入,输出。而这两个类 是由jsp容器提供的,无须开发人员自己实现。

“特别的工作”通常有以下几个步骤:

1)提供属性的set方法,此后这个属性就可以在jsp页面设置。以jstl标签为例 <c:out value=""/>,这个value就是jsp数据到tag之间的入口。所以tag里面必须有一个setValue方法,具体的属性可以不叫value。

这个“value”的名称是在tld里定义的。取什么名字都可以,只需tag里提供相应的set方法即可。

2)处理 doStartTag 或 doEndTag 。这两个方法是 TagSupport提供的。 还是以<c:out value=""/>为例,当jsp解析这个标签的时候,在“<”处触发 doStartTag 事件,在“>”时触发 doEndTag 事件。通常在 doStartTag 里进行逻辑操作,在 doEndTag 里控制输出。

3)编写tld文件。

4)在jsp页面导入tld

3.编写一个转换类customlongtodate,继承TagSupport类。

public class CustomLongToDate extends TagSupport {
private String value;
   
   private String pattern;
   
   public void setPattern(String pattern) {
this.pattern = pattern;
   }

public void setValue(String value) {
this.value = value;
   }



/**
    * 自定义时间转换类型
    * @return
    * @throws JspException
    */
   
   @Override
   public int doStartTag() throws JspException {

long time = Long.valueOf(value);
       Calendar c = Calendar. getInstance();
       c.setTimeInMillis(time);
       SimpleDateFormat dateformat = new SimpleDateFormat(pattern);
       String s = dateformat.format(c.getTime());
       Date dd = c.getTime();
       try {
pageContext.getOut().write(s);
       } catch (IOException e) {
e.printStackTrace();
       }
return super .doStartTag();
     
   }

}

4.编写tld文件放在web-inf里面。

再说说tld是啥

扩展名为tld的文件是存放标签名字和类的映射用的标签库,他把页面标签和后面的Java类影射起来.减少了页面中的代码。使页面清晰。其实标签最后还是被解释成后台的Java代。

原理是,在用户在jsp页面中使用标签时,系统首先会先到xml文件中的 <taglib>标签中的<taglib-uri>和<taglib-location>这两对标签找到相对应的扩展名为tld文件,然后在 tld文件中的映射再找到相对应的taglib类。

<?xml version="1.0" encoding= "UTF-8"?>
<taglib>
   <tlib-version>1.0</tlib-version>
   <jsp-version>1.2</jsp-version>

   <tag>
       <name>date</name>
       <tag-class>lujing.util.CustomLongToDate</tag-class>
       <body-content>JSP</body-content>
       <attribute>
           <name>value</name>
           <required>true</required>
           <rtexprvalue>true</rtexprvalue>
       </attribute>
       <attribute>
           <name>pattern</name>
           <required>true</required>
           <rtexprvalue>true</rtexprvalue>
       </attribute>
   </tag>
</taglib>

5.再将其配置在web.xml里面。

<!--配置自定义jstl标签-->
<jsp-config >
  <taglib >
     <taglib-uri> /CustomsTags</taglib-uri >
     <taglib-location>/LongToDate.tld</taglib-location >
  </taglib >
</jsp-config >

6.jsp页面的使用

(1)记得在jsp头部申明标签库

<%@ taglib uri="/CustomsTags" prefix="md"%>

(2)将数据库中得到的数据转换成格式化的日期类型字符串。

<td>createAt(使用springconverter)</td>
<td><input type="text" name="createAt" value="<md:date  value="${student.createAt }" pattern="yyyy-MM-dd"/>" /></td>

(3)效果

样tag标签的配置也完成了,参考链接:http://blog.csdn.net/tayanxunhua/article/details/20488457

深度思考:

1.什么是jsp?

答:

.JSP全名为Java Server Pages,其根本是一个简化的Servlet设计,他实现了Html语法中的java扩张(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。

通俗说就是动态页面,需要被编译成class文件,然后转译成servlet,最后把视图渲染出来。jsp需要web服务器启动,而HTML等静态文件直接在浏览器中即可观看。


2.jsp有几个内置对象?

答:

jsp内置对象:可以不加声明和创建就可以在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量

jsp9大内置对象:

1).request对象

客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。

2).response对象

response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。

response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其它页面的response对象对当前页面无效。

3).session对象

session对象指的是客户端与服务器的一次会话,从客户端连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例。

Session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要Session对象。

session对象具有会话作用域。

4).out对象

out对象是JspWriter类的实例,是向客户端输出内容常用的对象

5).page对象

page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例

6).application对象

application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。

7).exception对象

exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象

8).pageContext对象

pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pageContext。

9).config对象

config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)

另外四大作用域:

request、page、session、application

一张表:

隐含对象类型作用域
requestjavax.servlet.http.HttpServletRequestrequest
responsejavax.servlet.http.HttpServletResponsepage
pageContextjavax.servlet.jsp.PageContextpage
sessionjavax.servlet.http.HttpSessionsession
applicationjavax.servlet.ServletContextapplication
outjavax.servlet.jsp.JspWriterpage
configjavax.servlet.ServletConfigpage
pagejava.lang.Objectpage
exceptionjava.lang.Throwablepage


这块没深入了解,文字性的东西容易忘,还是需要使用,但是最近没用过,以后用到再深入了解


3.熟练使用c标签,el表达式。


4.为什么要使用tiles框架?

答:代码的复用,可扩展性。

遇到问题

1.一直想用springMVC的converter,还欸有搞懂其调用逻辑。

(1)如果同时定义两个converter,结果转换器出现在了不该出现的地方。

明日计划

1.解决重页面存数据到数据库的转换问题。

2.整理代码,提交任务4 .

3.开始任务5的内容。

收获

1.学会了自定义jstl标签。


返回列表 返回列表
评论

    分享到