发表于: 2017-08-18 20:19:43

2 1217


今天做的事:

今天完成task4的所有要求,不过tiles框架应该还有待加强

昨天的简易版贴过了,今天把正式版贴一下

tiles配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">

<tiles-definitions>
   <definition name="base.definition" >
       <put-attribute name="title" value=""/>
       <put-attribute name="header" value=""/>
       <put-attribute name="menu" value=""/>
       <put-attribute name="body" value=""/>
       <put-attribute name="footer" value=""/>

   </definition>

   <definition name="10" extends="base.definition" template="/WEB-INF/jsp/cs10base.jsp">
       <put-attribute name="title" value="IIIIIIIII~Index"/>
       <put-attribute name="header" value="/WEB-INF/jsp/cs10_header.jsp"/>
       <put-attribute name="body" value="/WEB-INF/jsp/cs10_body.jsp"/>
       <put-attribute name="footer" value="/WEB-INF/jsp/cs10_footer.jsp"/>
   </definition>

   <definition name="11" extends="base.definition" template="/WEB-INF/jsp/cs11base.jsp">
       <put-attribute name="title" value="职业不?"/>
       <put-attribute name="header" value="/WEB-INF/jsp/cs11_header.jsp"/>
       <put-attribute name="body" value="/WEB-INF/jsp/cs11_body.jsp"/>
       <put-attribute name="footer" value="/WEB-INF/jsp/cs11_footer.jsp"/>
   </definition>

</tiles-definitions>

因为感觉这两个页面复用顶部和底部太丑,所以就没设置复用,只不过用了下布局


然后主页面省去大量代码,大部分都打碎抽离了

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@page language="java" contentType="text/html;charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib uri="/tags" prefix="date"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   <meta charset="utf-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <title><tiles:insertAttribute name="title" ignore="true"/> </title>
   <link href="${pageContext.request.contextPath}/cs10/bootstrap.min.css" rel="stylesheet" type="text/css">
   <link href="${pageContext.request.contextPath}/../bootstrap-3.3.5-dist/css/bootstrap.css">
   <link href="${pageContext.request.contextPath}/cs10/Untitled-3.css" rel="stylesheet" type="text/css">
   <link href="${pageContext.request.contextPath}/cs10/Untitled-1base.css" rel="stylesheet" type="text/css">

</head>

<body>
<tiles:insertAttribute name="header"/>
<hr>
<div style= "width:180px;height:20px;margin:0 auto;border:1px solid;">
   <date:date value="${date}"/>
</div>
<hr>
<tiles:insertAttribute name="body"/>

<tiles:insertAttribute name="footer"/>
</body>
<script src="${pageContext.request.contextPath}/cs10/jquery.min.js"></script>
<script  src="${pageContext.request.contextPath}/cs10/bootstrap.min.js"></script>
</html>


这里看到调用的资源前都用了绝对路径

${pageContext.request.contextPath}

这样在服务器上跑才不会找不到资源,我开始就没加,所以页面乱的一p


然后就不贴大段代码了,太占页面


另外一个知识就是Tag标签

先上理论

一个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


再说说tld是啥

扩展名为tld的文件是存放标签名字和类的映射用的

标签库,他把页面标签和后面的Java类影射起来.减少了页面中的代码。使页面清晰。其实标签最后还是被解释成后台的Java代码。

原理是,在用户在jsp页面中使用标签时,系统首先会先到xml文件中的 <taglib>标签中的《taglib-uri》和《taglib-location》这两对标签找到相对应的扩展名为tld文件,然后在 tld文件中的映射再找到相对应的taglib类。


然后上实例

相关jar包暂时不清楚,但是之前的tiles框架依赖的jar包就够了

dateTag.tld

<?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>com.ptteng.Tag.DateTag</tag-class>
       <body-content>JSP</body-content>
       <attribute>
           <name>value</name>
           <required>true</required>
           <rtexprvalue>true</rtexprvalue>
       </attribute>
   </tag>
</taglib>

配置

在web.xml中配置

<jsp-config>
 <taglib>
   <taglib-uri>/tags</taglib-uri>
   <taglib-location>/tld/dateTag.tld</taglib-location>
 </taglib>
</jsp-config>

然后把相关的类写一下

package com.ptteng.Tag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
* Created by Administrator on 2017/08/18.
*/
public class DateTag extends TagSupport {

private String value;
   
   @Override
   public int doStartTag() throws JspException {
String vv = "" + value;
       long time = Long.valueOf(vv);
       Calendar c = Calendar.getInstance();
       c.setTimeInMillis(time);
       SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       String s = dateFormat.format(c.getTime());
       try{
pageContext.getOut().write(s);
       }catch (IOException e){
e.printStackTrace();
       }

return super.doStartTag();
   }

public void setValue(String value){
this.value = value;
   }

}


最后在jsp页面进行配置

<div style= "width:180px;height:20px;margin:0 auto;border:1px solid;">
   <date:date value="${date}"/>
</div>

记得在文件头声明

<%@taglib uri="/tags" prefix="date"%>


这样tag标签的配置也完成了,参考链接:http://blog.csdn.net/tayanxunhua/article/details/20488457


令,今天又学会了一个IDEA的快捷键:Ctrl+Shift+r:替换(可整个项目进行替换,类似Word文档的替换)

还有linux操作系统的自动补全键:Tab,之前都没用过。


还有mysql的一个报错:

Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

其实是因为连接池的关系

简单说,连接池一直在等着被使用,但是没人用,然后mysql就给关了,但是连接池又调用了,所以就报错了。

解决办法,修改等待时间

#vim /etc/my.cnf


[mysqld] wait_timeout=604800


然后时间这么久,就没啥问题了

参考链接:http://blog.csdn.net/cynhafa/article/details/19676865


深度思考:

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

一张表:

隐含对象类型作用域
requestjavax.servlet.http.HttpServletRequestrequest
responsejavax.servlet.http.HttpServletResponsepage
pageContextjavax.servlet.jsp.PageContextpage
sessionjavax.servlet.http.HttpSessionsession
applicationjavax.servlet.ServletContextapplication
outjavax.servlet.jsp.JspWriterpage
configjavax.servlet.ServletConfigpage
pagejava.lang.Objectpage
exceptionjava.lang.Throwablepage


这块没深入了解,文字性的东西容易忘,还是需要使用,但是最近没用过,以后用到再深入了解


3.熟练使用c标签,el表达式。

答:简单使用<c:forEach>和<c:if>这两个标签没问题,但是其他标签没用过

el表达式使用的频率不高不低,简单使用没问题,但是稍微深入一点可能就会有点困难


4.为什么要使用tiles框架?

答:页面复用,减少代码量,简化开发


明天计划:开始任务五


问题:解决


收获:任务四完工;tag标签;一些杂七杂八的。


进度:开始时间:2017.08.12

    预计demo:2017.08.18

    是否有延期风险:延期一天,被tiles框架卡住了一天

    禅道链接:http://task.ptteng.com/zentao/project-task-285-unclosed.html



返回列表 返回列表
评论

    分享到