发表于: 2018-06-10 18:42:13
1 862
日期:6月10号
今天完成的事情:
解决了昨天遗留的问题
在web.xml里面把静态资源请求的servlet-mapping注释掉
<servlet>
<servlet-name>restInterface</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>restInterface</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--<servlet-mapping>-->
<!--<servlet-name>default</servlet-name>-->
<!--<url-pattern>*.png</url-pattern>-->
<!--<url-pattern>*.js</url-pattern>-->
<!--<url-pattern>*.css</url-pattern>-->
<!--<url-pattern>*.jpg</url-pattern>-->
<!--</servlet-mapping>-->
然后去Spring-servlet.xml里面开启静态资源的访问
<mvc:default-servlet-handler/>
然后把jsp里的css引用和图片引用换成项目的绝对路径
<link rel="stylesheet" href="css/body.css">
<img src="images/erweima.png">
项目结构
重新打包项目发布到服务器,这样服务器上图片和css都能加载出来了,跟本地项目的运行效果是一样的。
自定义标签的时间类型转换,这里的坑比较烦人,看了不下5篇博客,都说在写好tld文件之后要在web.xml里面配置taglib,
配置了之后反而报错严重,实际上web.xml是不需要配taglib的!
先写一个时间转换的工具类,继承TagSupport类如下:
package com.tools;
import java.io.IOException;
import java.text.SimpleDateFormat;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class TimeFormat extends TagSupport {
private static final long serialVersionUID = -8683014812426654300L;
private String value;//要转换的Long类型时间
private String pattern;//要转换的对应格式
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getPattern() {
return pattern;
}
public void setPattern(String pattern) {
this.pattern = pattern;
}
// 重写父类方法
public int doStartTag() throws JspException {
Long time = Long.valueOf(value);
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
String t = dateFormat.format(time);
try {
pageContext.getOut().write(t);
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}
}
关于serialVersionUID的介绍,博客里别人这样写了,还是查一下这个serialVersionUID的作用:
serialVersionUID 用来表明类的不同版本间的兼容性
简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来 的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序 列化,否则就会出现序列化版本不一致的异常。
当实现java.io.Serializable接口的实体(类)没有显式地定义一个名为serialVersionUID,类型为long的变 量时,Java序列化机制会根据编译的class自动生成一个serialVersionUID作序列化版本比较用,这种情况下,只有同一次编译生成的 class才会生成相同的serialVersionUID 。
如果我们不希望通过编译来强制划分软件版本,即实现序列化接口的实体能够兼容先前版本,未作更改的类,就需要显式地定义一个名为serialVersionUID,类型为long的变量,不修改这个变量值的序列化实体都可以相互进行串行化和反串行化。
工具类就是根据输入的Long类型时间和要转换的时间格式,把Long类型时间转换成对应的格式
然后用一个tld文件来实现tag标签,这个文件要写在WEB-INF下,servlet在处理的时候会自动去找下面的tag标签:
<?xml version="1.0" encoding="UTF-8"?>
<taglib >
<tlib-version>1.1</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>date</short-name><!-- 标签库的简称,暂时没发现要用它的地方 -->
<uri>http://vmaxtam.com/mytag</uri><!-- 你标签库的引用uri,随便写个 -->
<tag>
<name>dateFormat</name><!-- 标签库具体引用的tag名字,标签引用后,使用的时候要用 -->
<tag-class>com.tools.TimeFormat</tag-class><!-- 刚才写的那个时间转换工具类-->
<attribute>
<name>value</name><!-- Long类型时间参数-->
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>pattern</name><!-- 转换后的格式-->
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
上面差不多该注意的地方我都写了注释,下面在jsp页面来引用这个自定义标签:
标签引入是必须的
<%@ taglib prefix="date111" uri="http://vmaxtam.com/mytag"%>
prefix,你引用的标签的名字,可以根据自己的需求命名
uri对应<uri></uri>的值,我直接用别人写的了,没个改
使用标签:
<td><date111:dateFormat pattern="yyyy-MM-dd HH:mm:ss" value="${user.create_at}"/></td>
date对应prefix的值
dateFormat对应<name></name>的值,引用的tag的名字
pattern和value就是工具类的两个参数了。
运行项目查看是否成功
这样就完成了自定义tag来转换时间类型。
明天的计划:看看自媒体是啥,学一下任务4的深度思考。
遇到的问题:已解决,后面可能会遇到静态资源在服务器反向代理后怎么使用相对路径。
收获:学会了自定义标签的实现。
评论