1、完成用户的一次性登陆(含验证码)
2、防止表单重复提交:MD5、Base64编码
二、Session对象的状态转换(生命周期)
1、修改HttpSession对象的默认失效时间30分钟
web.xml
<session-config>
<session-timeout>1</session-timeout><!--失效时间,单位是分钟-->
</session-config>
三、浏览器IE,在什么情况下会开启一次新的会话。
1、IE7(含)-:
开启一个新的浏览器进程,就是一次新会话。
2、IE8(含)+:
开启一个新的浏览器进程,并没有开始新会话。(文件菜单、开始新会话)
新开启一个Tab页,与原有页面属于同一次会话。
通过一个页面的超链接(target="_blank"),与原有页面属于同一次会话。
四、客户端禁用cookie后,会话数据的保存问题
1、对于使用http://localhost来访问网站,即使客户端禁用了cookie,但是无效。
2、解决办法:URL重写。
http://192.168.1.250:8080/day07/servlet/RegistServlet
---->
http://192.168.1.250:8080/day07/servlet/RegistServlet;JSESSIONID=2983749832743298
String url = HttpServletResponse.encodeURL(/blog_article/String url/index.html)
特点:如果服务器知道客户端没有禁用cookie,那么该方法将不会重写URL。
五、JSP概述及最佳实践
1、更改MyEclipse生成的JSP模板。模板文件与Servlet.java(Servlet模板文件)很近。
2、学好JSP的关键:JSP就是Servlet。一定要记住JSP中的东东会出现在Servlet的什么地方?
3、最佳实践:利用Servlet作为控制器;JSP用于页面显示。
六、JSP语法
1、模板元素:JSP页面中的HTML内容。
2、JSP中的脚本表达式:
作用:输出内容到页面上。
语法:<%=java表达式%>
“java表达式”会原封不动的出现在JSP对应的Servlet的service方法中的out.println(java表达式);参数中
java表达式后面不能有分号。
3、JSP脚本片段
作用:在JSP中嵌入多行java代码。
语法:
<%
多行java代码
%>
多行java代码,会原封不动地出现在对应Serlvet的service方法中。
4、JSP声明
作用:定义成员。
语法:<%! 你的成员%>
声明代码会出现在对应的类中。
5、JSP中注释
语法:<%--这是注释--%>
七、JSP的指令:3个
1、作用:给JSP引擎用的(Tomcat)。不产生任何输出。
2、语法:<%@ 指令名称 指令属性1="值1" ...%>
a、page指令
属性:
language:指示使用脚本语言。默认是java,目前只支持java。
extends:指示JSP对应的Servlet的父类是谁。不要修改。
*import:导入JSP中的java脚本中用到的类。
*session:指示当前页面支不支持会话(拿不到HttpSession对象的引用session)。默认值是true。
可选值true|false.
buffer:字符输出流的缓存。默认值是8Kb。可选值none|8Kb|sizeKb
autoFlush:自动刷新缓存。
isThreadSafe:指示JSP对应的Servlet是否实现SingleThreadModel这个废物。false是实现,
true是不安全的。默认是true。
*errorPage:(转发技术)
指示提示错误的页面的路径。如果以"/"开头表示绝对路径。
配置全局错误提示页面:
web.xml
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
*isErrorPage:指示是否产生exception对象的引用。true|false.默认值是false
*contentType:response.setContentType("text/html;charset=UTF-8");
*pageEncoding:指示翻译JSP时查的码表。
pageEncoding有2个作用:第一告知引擎查哪个码表读JSP文件进行翻译;
第二,以指定的编码输出字符,并通知客户端以什么编码显示
*isELIgnored:是否忽略EL表达式。默认值是false。可选值是true\false
b、include指令:(能用静态不用动态)
属性:file,目标资源的路径。如果以"/"开头表示绝对路径。
静态包含:include指令就是静态包含。
动态包含:<jsp:include page=""/>
c、taglib指令
作用:引入外部的标签
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
像span label 等元素 都是行内元素,仅用height和width控制高宽往往达不到想要的效果,一般都要加上display:block;(独占一行) 或是display:inline-block;(仍为块级元素)
块元素和行内元素也不是一成不变的,只要给块元素定义display:inline,块元素就成了内嵌元素,同样地,给内嵌元素定义了display:block就成了块元素了
下面我们举例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
*{
margin: 0 auto;
text-align:center
}
div,span{border:1px solid #00f;margin:2; line-height:50px;}
</style>
</head>
<body>
<div>块元素和行内元素也不是一成不变的,只要给块元素定义display:inline,块元素就成了内嵌元素,同样地,给内嵌元素定义了display:block就成了块元素了</div>
<div>div1</div><div>div2</div>
<span>span1</span><span>span2</span>
<br>
<div style="display:inline">div3</div>
<div style="display:inline">div4</div>
<span style="display:block">span3</span>
<span style="display:block">span4</span>
</body>
</html>
选择字体
font-family: "Times New Roman", Times, serif;
注意:字体名称中包含多个单词要用("")括起来。
字体颜色
color:#cccccc(16进制)
color: rgb(0%, 100%, 0%) 或者 color: rbg(0, 255, 0)
rgb颜色,百分数表示0-255的一个数
修改字号
font-size
font-szie后面可接keywords(关键字) px 百分比 em
px:即像素值,最为常用,默认文本的像素值为16px;
keywords: 总共有7个关键字,分别为 xx-large, x-large, large, medium, small x-small, xx-small。但是关键字不精确,而且也缺乏灵活性,因此较少使用。
百分比:由于字号是一种可以继承的属性,因此使用百分比有时要通过计算。比如: 浏览器一般默认的字号都为16px,那么你将一个元素的字号设置为100%,那么这个元素的字号就为16px,也就是说100%对应16px,这是一个基准。因此,如果要将该元素的字号变为32px,那么,用百分比表示就是200%,即16 * 2。接下来,我们来看,如果有下面的结构:
<span>文本</span> <!--字号为75%-->
</p>
由于span标签会继承p标签的字号20px,因此,此时span的字号计算公式为20 * 0.75(也就是75%) = 15px。类似的结构可以层层嵌套,只要计算一下就可以了。
em: 表示一个大写M的高度。但是他的作用与百分比很相近,1em = 100%, .75em = 75%, 2em = 200%。
格式化词语和字母
斜体化 font-style
italic(斜体) normal(正常) oblique(和italic一样)
粗体 font-weight
你可以选择100-900之间的整百数(900超粗,100不可见),但是由于浏览器支持的原因,用的很少。一般normal(正常) bold(粗体)
大写化
text-transform
uppercase(大写) lowercase(小写) capitalize(首字母大写) none(不进行大小写)
该属性可以被继承
小型大写字母
font-variant: small-cap;
文本修饰
text-decoration
underline line-through overline none
字母间距和字间距
letter-spacing word-spacing
对于这些属性,可以使用文本尺寸(px em 百分比) 正值代表扩大,负值为缩小。
行高
line-height
px em 百分比 缩放因子
要理解行高,首先要理解一些概念,可以参考这篇文章和里面的链接文章《深入理解css中的行高》
使用行高时要注意一些问题:
1 图片会将整行的行框撑开,但是却并不改变实际的行高
2 em和百分比是相对于文本的字号来计算的,比如文本字号为12px,而行高被设置为150%(1.5em),那么行高为12 * 1.5
3 行高可以被继承,但是em和百分比继承的是计算值,而缩放因子继承的是本身。比如p标签的行高被设置为150%,里面文本字号为10px,那么p里面所有标签都将继承15px的行高,而不是150%;但是缩放因子不同,如果p的缩放因子被设置为2,文本字号为10px,那么p里面所有后代标签都将继承2这个值,而不是20px的行高
垂直对齐
vertical-align
baseline:基线对齐
top:顶端对齐
middle:中线对齐
bottom:底端对齐
text-top:文本顶端对齐
text-bottom:文本底端对齐
sub:下标
super:上标
em 百分比
具体可以参考《垂直对齐:vertical-align属性》这篇文章
使用垂直对齐要注意:
1 浏览器的默认对齐方式为基线对齐,但是对于图片没有基线,故图片的底端会和基线对齐
2 em和百分比值是相对于行高值来计算的,用来改变元素基线的高度,可正可负,正数是元素的基线升高,负数使元素的基线下降
3 设置处置对齐可影响行框高
4 这个属性只是用与行内元素,表单元素,以及图片,表格单元格
文本对齐
text-align
left right center justify(两端对齐)
文本缩进
text-indent
px em 百分比
使用文本缩进要注意:
1 px是精确值