发表于: 2019-11-12 23:52:13
1 2305
今天完成的事:
1、 使用Tiles框架进行页面重组。
首先需要引入jar包,如下所示的三个jar包,但是在添加依赖时报错依赖冲突,因为在添加依赖时,不仅仅只是引入了该依赖的jar包,还会引入该jar包所依赖的所以jar包,所以层层依赖引用,就很引入很多jar包,相互之间有不同版本的相同jar包就会产生冲突。
于是查看相关依赖,排除冲突jar包。
还有说可以使用idea的插件Maven helper可以排除冲突,有机会尝试。
.png)
如下图可以查看jar包的相互依赖。
这里就能看到彼此之间冲突的jar包,这里需要注意的是,排除冲突jar包是将两个jar包的其中一个排除,还是有相关jar包的,所以不用担心功能问题。
右击,选择exclude,可以排除jar包。
结果排除后还是报错,百度得知是引用的依赖格式不对,我这因为是直接从网上复制,可能带着相应的格式一起复制了,于是将所有回车换行去掉,报错消失。
引入jar包后,开始编写tiles.xml配置文件,在配置文件中定义基础模板,同时指定jsp位置,将固定的部分填充上,此处即header、footer,而后指定对应的jsp位置。
添加继承基础模板的页面,这里是homePage、jobPage,加上变化的部分,即body部分,并指定jsp位置。
下图为所需的jsp。
tiles.xml配置文件。
基础模板template.jsp页面,引用了配置文件中添加的header、body、footer部分,注意顺序不能乱,依次排列。且此处需要指定字符编码为UTF-8,否则会有乱码。
在springmvc.xml文件中添加Tiles框架视图解析器,并指定tiles.xml文件位置。
这需注意controller内返回的jsp名称应该是tiles.xml文件中设置的名称,此处即homePage、jobPage。
最后需要注意原jsp头部的引用,原本我以为就是将原有的jsp拆成三部分,相应的头部引用也只在头部jsp处,重组就是将三个部分组成一个jsp再读取,尝试后发现不是这样。
基础模板template.jsp页面没有指定编码为UTF-8就会全问号,单独的部分页面不指定编码为UTF-8也会乱码,所以编码的指定是所有拆分的jsp都需要指定的。
而c标签,在header.jsp加上c标签没用,必须要在使用的jsp处加上c标签,此处即jobBody.jsp。
基础模板template.jsp页面没有指定编码为UTF-8,单独的组装页面指定也没用。
2、使用Tag标签处理时间转换。
查看的Tag标签实例,是引入了下图三个依赖,因为查看相关依赖关系发现 jstl.api 就包含了其他两个,于是这里只导入一个依赖。
运行报错,后来才知道,因为是重新部署,所以页面不会自动跳出,当时就以为是报错,所以查找解决办法,其实这里不理会也能正常显示jsp页面。。
翻译如下,百度得知是 sl4j 和 log4j 不兼容导致的,查看了下,果然在tiles-servlet下发现了sl4j,于是按照百度方法添加 sl4j-log4j12 ,并将log4j修改为其依赖的版本。
在tiles-servlet下发现了sl4j。
搜索 sl4j-log4j12,将log4j修改为其依赖的版本。
修改后还是报错,jsp页面可以正常加载。
再次查找得知,sl4j-log4j12的scope是test,就只会在测试时参与工作。
将test改为compile,或者直接将那一行删除,因为jar包默认的就是compile,表示会在编译时就加载该jar包。
Tag标签的具体使用需要编写一个标签处理类、一个设置标签相关信息的tld文件、以及用于显示时间的jsp。这里标签处理类找到了两个方法,分别是继承SimpleTagSupport、TagSupport类。两种方式只有标签处理类不同,tld和jsp都是一样的。
标签处理类(继承TagSupport类):
返回值EVAL_PAGE表示tag已处理完毕,返回jsp页面。
import javax.servlet.jsp.tagext.TagSupport;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TagDate extends TagSupport {
// 时间戳
private long dateLong;
// 日期格式
private String dateType;
/**
* 时间戳转换成日期时间
*/
public int doStartTag() {
try {
Date timeDate = new Date(dateLong);
SimpleDateFormat sdf = new SimpleDateFormat(dateType);
String dateString = sdf.format(timeDate);
pageContext.getOut().println(dateString);
} catch (Exception e) {
e.printStackTrace();
}
return EVAL_PAGE;
}
public long getDateLong() {
return dateLong;
}
public void setDateLong(long dateLong) {
this.dateLong = dateLong;
}
public String getDateType() {
return dateType;
}
public void setDateType(String dateType) {
this.dateType = dateType;
}
}
标签处理类(继承SimpleTagSupport类):
重写doTag方法。
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleTagDate extends SimpleTagSupport {
/**
* @Description: long 时间
*/
private long dateLong;
/**
* @Description: String类型的格式
*/
private String dateType;
@Override
public void doTag() {
try {
JspWriter out = getJspContext().getOut();
SimpleDateFormat sdf = new SimpleDateFormat(dateType);
Date date = new Date(dateLong);
String dateString = sdf.format(date);
out.write(dateString);
} catch (IOException e) {
e.printStackTrace();
}
}
public long getDateLong() {
return dateLong;
}
public void setDateLong(long dateLong) {
this.dateLong = dateLong;
}
public String getDateType() {
return dateType;
}
public void setDateType(String dateType) {
this.dateType = dateType;
}
}
tld文件:
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1">
<!-- 该标签库的描述信息 -->
<description>自定义标签库</description>
<display-name>long转Date</display-name>
<tlib-version>1.0</tlib-version>
<short-name>longToDate</short-name>
<uri>Tag</uri>
<tag>
<!-- 标签的描述信息 ,可不配置 -->
<description>时间戳转换时间</description>
<!-- 标签名 -->
<name>dateTag</name>
<!-- 标签处理类 -->
<tag-class>com.jnshu.tag.TagDate</tag-class>
<!-- 标签体内容 -->
<!--
body-content选项:
empty:该标签的标签体为空
scriptless:标签体内容可以是,文本内容,EL表达式,动态指令和其他标签,不能有JSP脚本和表达式
tagdependent:表示将标签的内容写入BodyContent,不由JSP引擎处理
JSP:不推荐使用
-->
<body-content>JSP</body-content>
<attribute>
<!-- name:表示该标签下的属性名称 -->
<name>dateLong</name>
<!-- true,表示可以使用el表达式来赋值 -->
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>dateType</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
jsp页面:
uri可以是绝对路径,指向WEB-INF中的tld文件,也可以是tld中设置的标签库uri名称,这里是Tag。prefix是指标签的前缀,这里是test,且使用该标签还需要添加tld中设置的标签名称,这里是dateTag。
在dateLong中添加时间戳,dateType中设置时间格式,即可成功在页面返回相应格式的时间。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--<%@ taglib uri="/WEB-INF/tag/tagDate.tld" prefix="test"%>--%>
<%@taglib uri="Tag" prefix="test"%>
<html>
<body>
<h2>Hello World!</h2>
时间戳1634521888333转为日期类型:<test:dateTag dateLong="1634521888333" dateType="yyyy年MM月dd日 HH:mm:ss"/>
</body>
</html>
明天计划的事:
1、将项目部署服务器。
2、提交任务四。
3、准备任务五的学习。
遇到的问题:
1、项目部署服务器无法读取css样式以及图片。
职业页面数据都能显示,就是图片加载不了。
收获:
1、 使用Tiles框架进行页面重组。在tiles.xml配置文件中定义基础模板,同时指定jsp位置,将固定的部分填充上,此处即header、footer,而后指定对应的jsp位置。添加继承基础模板的页面,这里是homePage、jobPage,加上变化的部分,即body部分,并指定jsp位置。
2、了解了如何排除冲突jar包。
3、使用Tag标签处理时间转换。需要编写一个标签处理类、一个设置标签相关信息的tld文件、以及用于显示时间的jsp。标签处理类有两个方法,分别是继承SimpleTagSupport、TagSupport类。两种方式只有标签处理类不同,tld和jsp都是一样的。
评论