发表于: 2020-06-29 10:41:03

1 1785


今天完成的事情:结束任务四。学习Tag自定义标签,深度思考。
明天计划的事情:做任务五。
遇到的问题:师兄在真实项目中Velocity,Freemark,jsp用的哪个模板多些啊?
收获:

jsp中获取客户端数据和获取服务器返回数据方式

1. request对象通常用来接收客户端提交到服务端的数据,可以用request.getParameter()的方法获取参数内容。通常获取的都是URL提交的参数,或者POST提交的表单数据。

2. requestScope通常是获取request.setAttribute()方法把数据放到request对象中供客户端获取,然后客户端获取的方法就是requestScope.getAttribute()。获取的是个服务器返回的对象。

3. ${param.name} 等价于 request.getParamter("name"),这两种方法一般用于服务器从页面或者客户端获取的内容,这些内容都是String的。

4. ${requestScope.name} 等价于 request.getAttribute("name"),一般是从服务器传递结果到页面,在页面中取出服务器端保存的值。

自定义Tag

首先要知道的是应用自定义时间格式的原因,是因为数据库存储的bigint数据,entity实体类存放的是Long类型的时间数据,要输出到jsp页面要用到jstl中只有fmt:formatDate进行转为Date数据,但是jstl只能把String类型的转化,对于Long类型束手无策。原因就是这样。

1.先建一个类DateTag继承TagSupport。TagSupport就是一个自定义标签的类。当然还可以继承BodyTagSupport和SimpleTagSupport 。

DateTag类

public class DateTag extends TagSupport {
   //默认日期格式
   public static final String DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss";
   //long型的时间戳
   private String value;
   //日期格式,如果不传入则为默认
   private String format;

   //set方法赋值
   public void setValue(String value) {
       this.value = value;
   }
   public void setFormat(String format) {
       this.format = format;
   }

   //重写doStartTag方法
   @Override
   public int doStartTag() throws JspException {
       long l =0L;
       //isNotBlank 判断某字符串 是否不为空且 长度不为0 且不由空白符(whitespace)构成
       //isNotEmpty 判断某字符串是否非空
       if(StringUtils.isNotBlank(value)){
           l =Long.parseLong(value);
       }
       if (StringUtils.isNotBlank(format)){
           format = DEFAULT_FORMAT;
       }
       //调用用于转换的getFormatData方法,并返回
       String targetTime = "";
       if(l > 0L){
           targetTime = getFormatData(l,format);
       }
       try {
           super.pageContext.getOut().write(targetTime);
       } catch (IOException e) {
           e.printStackTrace();
       }
       return super.doStartTag();
   }

   /**
    * long类型数据转换为时间格式字符串
    * @param l
    * @param format
    * @return
    */
   public static String getFormatData(long l,String format){
       Date d = new Date(l);
       String date = new SimpleDateFormat(format).format(d);
       return date;
   }
}

2.编写tld文件,在WEB-INF下创建tags.tld文件

<?xml version="1.0" encoding="ISO-8859-1"?>

<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">

   <tlib-version>1.0</tlib-version>
   <short-name>
mydate</short-name>
   <uri>http://mydate.com</uri>

   <!-- Invoke 'Generate' action to add tags or functions -->
   <tag>
       <!--description描述信息,name待会要引用的名字,tag-class自定义的类路径-->
<description>时间戳转换日期</description>
       <name>myformatDate</name>
       <tag-class>com.hyx.util.DateTag</tag-class>
       <body-content>JSP</body-content>
       <attribute>
           <description>时间戳</description>
           <name>value</name>
           <required>true</required>
           <rtexprvalue>true</rtexprvalue>
       </attribute>
       <attribute>
           <description>需要输出的日期格式,默认为yyyy-MM-dd HH:mm:ss</description>
           <name>format</name>
           <required>false</required>
           <rtexprvalue>false</rtexprvalue>
       </attribute>
   </tag>
</taglib>

3.jsp引用

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="mydate" uri="http://mydate.com" %>

<html>
<body>
<h2>Hello World!</h2>
设置的默认时间是<mydate:myformatDate value="${1593408600145}" format="yyyy-MM-dd HH:mm:ss"/>
</body>
</html>


深度思考

1.JSP是什么?JSP中可否直接连接数据库?为什么现在不推荐使用%%来写JSP的代码,而是使用C标签?  

JSP即java服务器页面,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。

使用%%太繁琐了,不如C标签简洁,并且能够分割java代码和页面显示的代码。

2.Html有哪些常用的标签,CSS有几种引用方式,JS应该在顶部还是应该在底部加载?

常用标签:<head><div><h><p><br><a href=""><link><font><img><li><ol>

CSS引用:

内联式<p style="color:red"></p>,用style属性。

嵌入式<style>这里直接写样式</style>就是把style当作标签使用值,在中间写样式。

外部式-写在<head>头部标签内,用<link rel="" href="" type="">

js在底部加载。顶部也可以放<script>引入。

3.SEO是什么,后端在用JSP的方式输出页面时,可以做的SEO优化有哪些?  

SEO(搜索引擎优化),利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名

JSP是动态的网页抓取率很低,可以做成伪静态的。

JSP静态化。JSP技术主要用于动态网页, 但每次的结果没有保存, 导致每次请求都需要进行编译等多次复杂的操作, 这样使得系统开销巨大。在访问JSP网页时, 服务器会先把JSP转换成Servlet对象, 然后对Servlet进行处理, 最终将结果以HTML文件格式返回给浏览器。JSP静态化实际上就是在Servlet处理之后到HTML页面响应之前这一过程中, 设置一个拦截器, 将Servlet生成的HTML文件进行保存, 当下一次访问时, 可以直接加载HTML文件, 从而减少系统操作时间。

4.Tiles现在的版本是多少?Template,Attribute,Definition,ViewPreparer分别是什么?

 现在是Tiles3.0.8

Template:模板。一个模板(Template)可以没有属性(attributes),这时候该模板能直接使用。

Attribute:属性。有三个值

  • string:属性是string的话,会将string直接呈现在页面。
  • template:属性是一个模板(Template),有无属性都行。如果有属性的话,你也要将他们填充后再呈现页面。
  • definition:它是一个可重复使用组成的页面,包含所有的属性来填充以呈现页面。 

Definition:定义。定义是呈现给最终用户的组合物;一个定义是由一个模板和属性组成的。

ViewPreparer:视图助手。有时候一个定义在呈现之前需要“预处理”。例如,显示一个menu时,menu的结构必须被创建并且已经保存在request范围内,视图助手将在呈现定义之前被调用,已达到预处理效果。

https://my.oschina.net/jast90/blog/284254

5.Tiles有什么用处,为什么要用Tiles,如果不使用Tiles,可以实现公共部分的复用吗? 

简化代码,减少代码重复率,可以重用相同的页面部分。include标签也可以实现页面的复用。

6.套页面的前后端协作方式中,怎么传递参数给前端JS?怎么控制页面之间的跳转?  

把参数放在Model中,通过Http的request内置对象可以获取到。控制页面跳转在Tiles定义中定义要跳转的页面,还可设置拦截器,放行和拦截哪些页面。

7.Velocity,Freemark是什么,和JSP的区别在哪里?推荐使用哪种模板语言?

Velocity:是Apache下基于java的模板引擎。其提供了一个Context容器,在java代码里面我们可以往容器中存值,然后在vm文件中使用特定的语法获取,这是velocity基本的用法,相对于jsp而言,velocity对前后端的分离更加彻底:在vm文件中不允许出现java代码,而jsp文件中却可以.

FreeMarker:是一款模板引擎:即基于模板和数据源生成输出文本(html网页,配置文件,电子邮件,源代码)的通用工具。它是一个 java 类库,最初用来在MVC模式的Web开发框架中生成HTML页面,它没有被绑定到Servlet或HTML或任意Web相关的东西上。也可以用于非Web应用环境中。FreeMarker 基于数据模型和模板来渲染,将业务逻辑和表现层分离。 JSP开发中,页面会有大量业务逻辑,不利于维护和阅读,使用FreeMarker可以避免这一问题。并且生成的是静态页面,对SEO友好,提高了访问速度和适合高并发量。

https://blog.csdn.net/DreamWeaver_zhou/article/details/78747813

至于用哪个要我自己都用过才能体会,都各自有优缺点,目前用的是jsp。

8.EL表达式是什么?常用的EL表达式有哪些?  

1.EL(Expression Language)表达式语言,用于简化JSP的输出,基本语法${表达式}

2.EL表达式内置四种作用域对象从小到大pageScope(从当前页面取值),requestScope(从当前请求中取值),sessionScope(从当前会话中取值),applicationScope(从当前应用获取全局属性值)

3.${}中可以进行相应的运算。${emp.salary+300},${1<=3&&2>4}

4.EL内置param对象来简化参数的输出,${param.参数名}

9.C标签又是什么?怎么写一个自定义的标签?自定义的标签通常有什么用处?  

C标签就是JSTL标签库,封装了jsp的通用核心功能。自定义标签在上面。

好处:简化jsp页面,提高代码的复用性;简洁可重用。

10.套页面和前后端分离的方式有什么区别,应该在哪种情况下选用哪种解决方式? 

前后端分离是现在流行的方式,降低前后端的耦合度,套页面前后端耦合度较高,数据和页面比较糅合。如果是小项目并且访问量不大的开发,可以用套页面,对于中大项目,高并发的项目肯定是需要前后端的分离。



返回列表 返回列表
评论

    分享到