发表于: 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
一张表:
隐含对象 | 类型 | 作用域 |
---|---|---|
request | javax.servlet.http.HttpServletRequest | request |
response | javax.servlet.http.HttpServletResponse | page |
pageContext | javax.servlet.jsp.PageContext | page |
session | javax.servlet.http.HttpSession | session |
application | javax.servlet.ServletContext | application |
out | javax.servlet.jsp.JspWriter | page |
config | javax.servlet.ServletConfig | page |
page | java.lang.Object | page |
exception | java.lang.Throwable | page |
这块没深入了解,文字性的东西容易忘,还是需要使用,但是最近没用过,以后用到再深入了解
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
评论