发表于: 2018-01-22 09:33:53
1 606
今天完成的事情
1.使用tiles完成页面复用。
昨天虽然说可以完美显示所有页面,但是并没有用到tiles的复用,于是今天鼓捣了一波,总的来说还是很顺利的,说一下碰到的问题吧:
因为今天用到的是复用,所以页面出现了一些问题。分析如下:
昨天仅仅是简单的切割和拼合,所有的部件都是原网页的部件,所以拼接的时候呈现的没有任何毛病,而今天复用的时候a页面继承了b页面的结构,导致拼接出现了问题:原有的一些部件的结构也发生了改变。而拼接的部分只有body这块儿,于是开始观察body.jsp页面的代码,发现我截取的body体有毛病,没写body标签和html标签,于是加上这些东西,再次问,页面都正常访问。
过程也比较简单,就不上图了。
2.接下来就是用tag标签处理时间转换
把教程发出来:https://www.cnblogs.com/gmq-sh/p/5528989.html
就照着这个教程一步步走下来就ok了,整个过程也比较简单,添加jar包依赖,表头引用tag标签
web-inf目录下新建tld文件夹,在其内新建datetag.tld:
<?xml version="1.0" encoding= "UTF-8"?>
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>date</short-name>
<tag>
<name>date</name>
<tag-class>com.ptteng.util.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>/WEB-INF/tld/datetag.tld</taglib-location>
</taglib>
</jsp-config>
就ok了。
3.接下来部署项目到服务器,已经成功部署。用的脚本:
接下来就是提交任务四了。
简书链接:
https://www.jianshu.com/p/bc8191b843af
4.上传任务代码,提交任务四。
5.深度思考
(1)什么是jsp:
JSP(Java Server Page)看这个意思就知道是Java服务端的页面,所以它是动态的,它是需要经过JDK编译后把内容发给客户端去显 示,我们都知道,Java文件编译后会产生一个class文件,最终执行的就是这个class文件,JSP也一样,它也要编译成class文件!JSP不 止要编译,它还得要转译,首先把JSP转译成一个Servlet文件,然后在编译成class文件。当用户访问JSP时就执行了class文件。那么html呢?
HTML(Hypertext Markup Language)文本标记语言,它是静态页面,和JavaScript一样解释性语言,为什么说是解释性 语言呢?因为,只要你有一个浏览器那么它就可以正常显示出来,而不需要指定的编译工具,只需在TXT文档中写上HTML标记就OK。
我还用记事本写了一个外链。。感觉很有趣。
两者的区别:
1.最简单的区别就是,HTML能直接打开,jsp只能发布到Tomact等服务器上才能打开 。
2.定义上HTML页面是静态页面可以直接运行,JSP页面是动态页它运行时需要转换成servlet。
3.他们的表头不同,这个是JSP的头“ <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>”在表头中有编码格式和倒入包等。
4.也是很好区分的在jsp中用<%%>就可以写Java代码了,而html没有<%%>
(2)什么是c标签,c标签在任务中也用过几次,用过if和foreach:
http://blog.csdn.net/chabale/article/details/9406437
感觉上这个c标签蕾西于引入jar包来进行一些其他扩展的操作。
它是JSTL中的核心库,为日常任务提供通用支持,如显示和设置变量、重复使用一组项目、测试条件和其他操作(如导入和重定向Web内容)。Core标签按功能可分为4种类型:
变量维护
流程控制
Url管理
其他
就说一下用到的吧:c:if 和c:foreach
<c:if>:与Java语言中的if语句的使用方法一样,但不能实现else的功能。
<c:if>标签有两种语法形式,是以有无标记体来区分的。
无标签体:
<c:if test="测试条件" var="变量名" [scope="作用域"]/>
有标签体:
<c:if test="测试条件" var="变量名" [scope="作用域"]>
标签体
</c:if>
带标记体的<c:if>
<c:if test="${user.visitCount!=0}">欢迎光临</c:if>
然后是c:foreach
<c:forEach>:用于遍历一个对象集合。
<c:forEach var="变量名" items="集合" varStatus="遍历状态名"
begin="begin" end="end" step="step" >
标签体
</c:forEach>
(3)el表达式
http://blog.csdn.net/qwerasdf123/article/details/4189889
用到最多的就是这个pageContext:
pageContext
pageContext取得其他有关用户要求或页面的详细信息。
${pageContext.request.queryString} 取得请求的参数字符串
${pageContext.request.requestURL} 取得请求的URL,但不包括请求之参数字符串
${pageContext.request.contextPath} 服务的web application 的名称
${pageContext.request.method} 取得HTTP 的方法(GET、POST)
${pageContext.servletContext.serverInfo} 取得主机端的服务信息 ${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser} 取得用户名称
${pageContext.request.remoteAddr } 取得用户的IP 地址
${pageContext.session.new} 判断session 是否为新的
${pageContext.session.id} 取得session 的ID
还有这个用的也比较多,取变量值。
当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。
例如:
${user.My-Name}应当改为${user["My-Name"] }
但是我没有用[ ] 。。。
至此的话,任务四是结束了。
6.一波小知识:
各服务器静态资源默认 Servlet的名字是不一样的。
具体区别如下。
Tomcat, Jetty, JBoss, and GlassFish 默认 Servlet的名字 -- "default"
Google App Engine 默认 Servlet的名字 -- "_ah_default"
Resin 默认 Servlet的名字 -- "resin-file"
WebLogic 默认 Servlet的名字 -- "FileServlet"
WebSphere 默认 Servlet的名字 -- "SimpleFileServlet"
这也算容器之间的不同。
6.开始学习session和cookie:
https://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html
当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来。当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者,送出特定的网页内容给你。 Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cookie来辨认使用者,以方便送出使用者量身定做的内容,像是 Web 接口的免费 email 网站,都要用到 Cookie。
cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的。
cookie的生命周期可以设置,并不设置的话只在浏览器会话期间保持,关闭浏览器就没了。
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。
那么session和cookie的区别是:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
在这里总结一下,两者都是一个信号,告诉服务器加载对应的信息。只不过信号的保存位置不一样,而且因为文职各有利弊。
7.接下来是任务五的准备工作,涉及到账号密码,首先得有个登录页面,于是写一个登录页面,结合之前的欢迎界面,不过我做的是跳转,也可以直接指定登录界面是欢迎界面:
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
我做的是欢迎界面跳转到登录页面,下面是登录页面的jsp:
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!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">
<title>老哥,登录澳门赌场吧!</title>
</head>
<body>
<h1 style="text-align: center;">澳门赌场用户登录</h1>
<center>
<form action="${pageContext.request.contextPath}/index" method="GET">
用户名:<input type="text" name="username"/><br/>
密 码:<input type="text" name="password"/><br/>
<input type="submit" value="进入澳门赌场"/><br/>
</form>
</center>
</body>
</html>
呈现方式就不传了,简陋的一比,而且无条件跳转。页面间的跳转也不写了,比较简单。
8.接触到token:
Token
token的意思是“令牌”,是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库,那么流程是这样的:
基于 Token 的身份验证
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
- (1)客户端使用用户名跟密码请求登录
- (2)服务端收到请求,去验证用户名与密码
- (3)验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
- (4)客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
- (5)客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
- (6)服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
今天的收获
今天知道了session和cookie的区别,html和jsp的区别,知道了des算法,知道了什么是token
今天遇到的问题
DES算法是真的神奇,比较难掌握
明天计划的事情
推进任务五
评论