发表于: 2018-01-02 21:15:20
1 505
今日完成
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(使用spring的converter)</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
一张表:
隐含对象 | 类型 | 作用域 |
---|---|---|
request | javax.servlet.http.HttpServletRequest | request |
response | javax.servlet.http.HttpServletResponse | page |
pageContext | javax.servlet.jsp.PageContext | page |
session | javax.servlet.http.HttpSession | session |
application | javax.servlet.ServletContext | application |
out | javax.servlet.jsp.JspWriter | page |
config | javax.servlet.ServletConfig | page |
page | java.lang.Object | page |
exception | java.lang.Throwable | page |
这块没深入了解,文字性的东西容易忘,还是需要使用,但是最近没用过,以后用到再深入了解
3.熟练使用c标签,el表达式。
4.为什么要使用tiles框架?
答:代码的复用,可扩展性。
遇到问题
1.一直想用springMVC的converter,还欸有搞懂其调用逻辑。
(1)如果同时定义两个converter,结果转换器出现在了不该出现的地方。
明日计划
1.解决重页面存数据到数据库的转换问题。
2.整理代码,提交任务4 .
3.开始任务5的内容。
收获
1.学会了自定义jstl标签。
评论