<pre>
day10
上节内容回顾
1、jsp的入门
*在jsp里面如何嵌入java代码
**有三种 <%! %> <%= %> <% %>
*jsp就是servlet,最终也会被编译成servlet,放到tomcat的work目录里面
2、el入门
*获取域对象里面的值
*${域对象的名称}
3、cookie
*cookie分类
**有两种:会话级别的cookie和持久性的cookie(使用方法setMaxAge方法)
*创建cookie:new Cookie("","")
*把cookie回写到浏览器里面 response.addCookie(cookie);
*销毁持久性的cookie
第一:创建一个和要删除cookie相同名称的cookie,值""
第二:设置有效时长是0
第三:设置有效路径
第四:把cookie回写到浏览器内存
4、session
*session是服务器端技术,依赖于cookie。
*session的创建、销毁
**创建:执行request.getSession()
**销毁有三种
*tomcat里面进行配置、先编码再解码
**第三种:调用方法
*禁用cookie之后,使用session
**在地址后面加一个;jsessionid=id值
思维导图
1、jsp
(1)java server pages:java服务器端的页面,jsp运行在服务器(tomcat里面)
*之前学过servlet,sun公司开发用于动态网站的技术,还有一个jsp
**先有的servlet,因为servlet如果向页面输出内容太麻烦了,所以sun公司开发jsp可以方便向页面进行输出
(2)jsp就是servlet,jsp最终也会被编译成servlet,会放到tomcat的work目录里面
*jsp在什么时候编译成servlet:请求jsp时候编译成servlet
(3)jsp组成:html+java代码+jsp自身
(4)在jsp里面要嵌入java代码有三种方式
第一种:<%! %>,如果定义变量是成员变量
第二种:<%= %>,向页面输出,生成servlet在service方法里面out.print("hello" );
第三种:<% %>,写java代码,生成的servlet也在service方法里面
(4)jsp的注释
*jsp组成:html+java代码+jsp自身
**html的注释
**java的注释
**jsp自身的注释 <%-- jsp自身的注释 --%>
* 在jsp的源代码阶段:这三类注释都存在
* 在jsp编译成servlet之后:html注释和java注释存在,JSP注释会消失。
* jsp最终向页面输出之后:只是html注释存在
*在jsp里面如果嵌入java代码,不能使用html的注释,而要是jsp自身的注释
<%--
<%
for(inti=0;i<2;i++) {}
%>
--%>
(5)jsp的有三个指令
*jsp指令的语法:首先jsp里面的指令要写在jsp页面最上面(不包括include指令)
<%@ 指令的名称 属性的名称="属性的值"%>
属性名称写的时候严格区分大小写。
第一个:page指令,设置jsp页面的一些信息
<%@page 属性名称="属性的值"%>
*page指令里面的属性
**language属性:表示jsp支持的语言的类型,目前只支持java
**extends属性:表示jsp编译成servlet,继承的类,一般不需要修改,默认继承的类HttpJspBase
***原则:可以改变这个继承的类,但是这个类必须要是一个servlet
**session属性:表示在jsp里面是否可以直接使用session对象,属性的值是true和false
***在默认的情况下,session属性的值是true
=代码
<%
//request.getSession().setAttribute("aa","itheima");
session.setAttribute("aa","itcast");
%>
<%=session.getAttribute("aa")%>
**import属性:表示在jsp导入依赖的包
=代码(可以分别写,也可以写在一起)
与java不同,jsp快速导包不是ctrl+shift+o,而是将光标放在类名的后面,alt+/。
<%@page import="java.util.Date"%>
<%@page import="java.util.List,java.util.ArrayList"%>
**buffer:jsp输出的缓冲区的大小,默认的值 8kb
**autoFlush:jsp输出如果超出了缓冲区的大小,是否会正常输出
**errorPage属性:如果jsp运行的时候出现了异常,设置异常跳转到错误页面(虽然
页面的内容发生了变化,但是地址栏没有发生变化,说明跳转采用的
是转发机制。)
**isErrorPage属性:在错误页面里面,是否显示错误信息,默认false.
***一般用在程序员调试程序时候,但是如果系统要给客户,isErrorPage一定要设置成false
=当在错误页面里面把属性的值设置成true之后,才能在errorPage页面来使用
exception这个内置对象。
==编译的servlet里面生成了代码
java.lang.Throwable exception =org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
if (exception != null) {
response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
* contentType:设置打开jsp时候浏览器的编码
* pageEncoding:jsp编译成servlet,编译成servlet时候采用的编码
pageEncoding="utf-8",默认的编码是iso8859-1
*isELIgnored:jsp里面是否忽略el表示(jsp是否可以使用el表达式),默认值false,表示不忽略(可以使用)
**如果想要在jsp里面使用el表达式,需要把这个属性值设置成false。如果设置成true,会把el表达式当做普通文本输出
**重点掌握的属性: session 、import 、 errorPage 、 pageEncoding
第二个:include指令,用于包含页面的指令(静态包含)
*支持多层嵌套,这样除了最外层的JSP,其它的JSP页面都可以不用写html代码,
直接写内容即可。
*在一个jsp里面包含其他的jsp里面内容
*语法: <%@ include 属性="属性值"%>
= <%@ include file="head.jsp"%>
*注意一:当包含某个jsp页面时候,在包含的的页面里面不需要写html的代码了,只需要写包含的内容
*注意二:在include指令的file属性里面不能写参数,即加上?id=1等等内容。
*注意三:在include的file属性里面不能写变量
*注意四:在include的file属性里面路径不能加项目名。
*jsp最终要编译成servlet,有多个jsp页面,最终会编译成几个servlet?
*使用include指令包含多个页面,最终会编译成一个servlet
*静态包含相当于代码复制,把多个jsp里面的内容复制到一个jsp里面,生成一个servlet
第三个:taglib指令
*作用:经常和jstl标签库一起使用,替代页面中的<% %>
*语法:<%@ taglib uri="jstl标签库的路径"prefix="标签库的别名"%>
*掌握程度:
第一:知道jsp里面有三个指令以及这三个指令的名称
第二:三个指令分别可以做什么以及如何做
问题:jsp里面有哪些指令?
答:jsp里面有三个指令,这三个指令分别是 page、include和taglib
page指令可以设置页面的信息,里面重要的属性是session、import、errorPage、pageEncoding
include表示包含其他的jsp页面
taglib可以和jstl使用替代页面中<%%>
(6)jsp的内置对象
*什么是内置对象:在jsp里面可以直接使用的对象称为内置对象
*在jsp里面有九个内置对象
request:就是servlet里面HttpServletRequest对象,代表请求,域对象,获取提交的数据,获取客户机信息
response:就是servlet里面HttpServletResponse对象,代表响应,回写cookie,向页面输出
sesssion:就是servlet里面HttpSession对象,域对象
config:就是servlet里面ServletConfig对象,获取servlet名称,获取初始化参数
application:是servlet里面的ServletContext对象,域对象,获取全局初始化参数,读取web项目中文件
exception:代表异常对象
*如果想要使用,必须要把属性isErrorPage设置成ture才可以使用
java.lang.Throwable exception =org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
if (exception != null) {
response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
page:代表jsp编译成servlet,当前运行的servlet这个对象
out:向页面输出的对象
* out和response.getWriter()区别
**out使用的是JspWriter,response.getWriter()使用的是 PrintWriter
*out和response.getWriter()输出机制
**产生两个缓冲区out和response
***out不能直接向页面输出,把out里面的值放到response缓冲区里面,通过response向页面输出
pageContext(****)
第一:本身就是一个域对象
**pageContext只是在jsp里面可以使用,当前页面。
**设置值 setAttribute(String name, Object value)
**取值 getAttribute(String name)
=代码
<%
pageContext.setAttribute("msg","itcast100");
%>
<%=pageContext.getAttribute("msg") %>
第二:pageContext可以向域对象里面设置值
*servletContext(在jsp里面application)、session、request
(1)设置值的方法:setAttribute(String name, Object value, int scope)
第三个参数:表示是哪个域
*使用pageContext的常量表示不同的域
*如果是application,使用APPLICATION_SCOPE
*如果是session,使用SESSION_SCOPE
*如果是request,使用REQUEST_SCOPE
*如果是pageContext,使用PAGE_SCOPE
(2)取值的方法:getAttribute(String name,int scope)
第二个参数:表示是哪个域
*使用pageContext的常量表示不同的域
*如果是application,使用APPLICATION_SCOPE
*如果是session,使用SESSION_SCOPE
*如果是request,使用REQUEST_SCOPE
*如果是pageContext,使用PAGE_SCOPE
=代码
<%
pageContext.setAttribute("app","appvalue", pageContext.APPLICATION_SCOPE);
pageContext.setAttribute("sess","sessvalue",pageContext.SESSION_SCOPE);
pageContext.setAttribute("req","reqvalue", pageContext.REQUEST_SCOPE);
pageContext.setAttribute("page1","page1value", pageContext.PAGE_SCOPE);
%>
<%=pageContext.getAttribute("app",pageContext.APPLICATION_SCOPE) %>
<%=pageContext.getAttribute("sess",pageContext.SESSION_SCOPE) %>
<%=pageContext.getAttribute("req",pageContext.REQUEST_SCOPE) %>
<%=pageContext.getAttribute("page1",pageContext.PAGE_SCOPE) %>
(3)findAttribute(String name) 方法(注意这个方法是pageContext对象
所特有的方法)
*表示从域对象里面获取值,如果多个域对象里面的值相同的,得到域范
围小的里面的值《** 如果只设置 了application域的属性值,在360浏
览器中获取不到值!!****》
*四个域对象!!!!!!!!!!!!!!!!!!!!!!!!!
**pageContext:范围当前的页面有效(这个域对象只是在jsp里面使用)
**request:范围一次请求
**session:范围是一次会话
**application:范围是整个web项目
第三:pageContext可以获取其他八个内置对象
*只需要得到pageContext,就可以得到jsp里面的其他的八个内置对象
* <%
pageContext.getRequest();
pageContext.getResponse();
pageContext.getSession();
//....
%>
*掌握程度:九个内置对象是什么,九个内置对象分别可以做什么
==========================================================================================
上午内容的总结
1、jsp的三个指令
*page 、include、taglib
2、jsp的九个内置对象
request
response
session
config
application
exception
page
out
*out和response输出机制
pageContext
*第一:域对象,这个域对象只能在jsp里面使用
*第二:向其他域对象里面设置值
*第三:获取其他的八个内置对象
(7)jsp的动作标签
(代码位置:/day10/WebRoot/jsp)
*语法: <jsp:标签名称属性="属性值"></jsp:标签名称>
*在jsp里面可以实现的一些功能
*在jsp里面有六个动作标签
第一类:与javabean没有关系的动作标签(有三个)
**<jsp:forward></<jsp:forward>:实现在jsp里面转发的操作(注意路径不能有项目 名)
***<jsp:forward page="/jsp/hello.jsp" ></jsp:forward>
***类似于servlet里面执行request.getRequestDispatcher(...).forward(....);
** <jsp:include></jsp:include>: 表示包含页面(动态包含)
***有多个jsp,多个jsp会编译成几个servlet?
***有多个jsp会编译成多个servlet。
=代码 <jsp:include page="head.jsp"></jsp:include>
**已经有一个include标签的jsp页面,不能再被其它的jsp页面的jsp:forward、
jsp:include页面使用。
** <jsp:param></jsp:param>: 传递参数
***一般用在有路径的动作标签里面
***类似于get提交
****http://127.0.0.1/day10/login?id=1
=代码
<!-- 使用动作标签实现转发 -->
<!-- 类似于进行转发的操作,在地址后面添加参数hello.jsp?id11=zhangsan -->
<jsp:forwardpage="/jsp/hello.jsp">
<jsp:paramvalue="zhangsan" name="id11"></jsp:param>
</jsp:forward>
****标签中有中文提交的数据乱码。
第二类:与javabean有关系的动作标签(有三个)
**<jsp:useBean>: 表示设置要操作哪一个javabean
**<jsp:setProperty>: 向javabean里面设置值
**<jsp:getProperty>: 从javabean里面获取值
2、javabean(******)
(1)什么是javabean:就是一个java类,这个java类要遵循一定的书写规范
*书写规范
第一个规范:javabean里面需要有一个公开的没有参数的构造方法
第二个规范:javabean里面的属性私有的
第三个规范:javabean里面的属性
本文转自屠夫章哥 51CTO博客,原文链接:http://blog.51cto.com/4259297/1671474,如需转载请自行联系原作者