发表于: 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的深度思考。


遇到的问题:已解决,后面可能会遇到静态资源在服务器反向代理后怎么使用相对路径。


收获:学会了自定义标签的实现。


返回列表 返回列表
评论

    分享到