一、jsp入门简介
*jsp:java server page java服务器端的页面
-上一年公司提供用于开发动态网站的技术 servlet jsp
jsp最终也会编译成servlet,放到work目录下
-jsp包含:html+java代码+jsp自身指令
-在jsp里面如何嵌入java代码
<% %><%! %><%= %>
-jsp在第一次访问变成servlet
*题目
<%=x %>
<% x=5; %>
<% int x = 10; %>
<% this.x = 20; %>
<%=x %>
<%! int x = 0; %>
A.0 10 B.10 20 C.0 20 D.20 0
最终的结果是 0 10
* <%! int x = 0; %> <%//定义一个成员变量x 值是 0 %>
<%=x %> <%//把成员变量x的值 输出 0 %>
<% x=5; %> <%//把成员变量x赋值5 %>
<% int x = 10; %> <%//在service方法里面定义了一个变量 x 值 10 %>
<% this.x = 20; %> <%//把当前的成员变量x的值赋值20 %>
<%=x %> <%//把方法里面定义的变量x输出 %>
二、Jsp的注释
*jsp中java注释
<%
//单行注释
/**/多行注释
/***/文档注释
%>
*jsp中html注释
<!--jsp的注释-->
*jsp注释
<%--jsp的注释--%>
*这三类注释在那个阶段存在尼?
--在jsp源代码阶段,三类注释都存在
--在编译阶段时,jsp注释没了,其他两个存在
--在页面中显示时,html存在,其他两个都没了
三、Jsp的指令
*jsp的指令包含三个指令
*page:设置jsp页面的信息
<%@ page 属性="value"%>
-属性类型
**pageEncoding:jsp编译成servlet设置使用编码
**contentType:设置浏览器打开程序的编码。jsp页面必须设置响应的MIME(Multipurpose Internet Mail Extention)类型和JSP页面字符的编码,即ContentType属性值
--第一种属性值:"MIME"
--第二种属性值:"MIME类型;charset='utf-8'"
"text/html;charset='urf-8'"
**import:导入jar包
**extends:jsp编译成servlet会继承那个类,默认HttpJspBase
**errorPage:如果当前的jsp页面出现了异常,就到错误页面
**isErrorPage:在错误页面中,是否可以显示错误信息,(程序员使用,调试错误)。属性值:true/false,默认false
java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
if (exception != null) {
response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
*session:在jsp中是否可以使用session,值true/false,默认是true
*buffer:输出的缓冲区的大小 8kb
*autoFlush:超出缓冲区时候是否会正常输出
*language:jsp页面支持的语言,目前只支持java
*isElIgnored:是否忽略el表达式,默认false,若是true的话,el表达式会被当成文本输出
*include:(静态包含)
-jsp包含其他jsp页面
<%@ include file="*.jsp"%>
*在被包含的页面中,只需要保留被包含的内容就就可以了
-静态包含过程:相当于代码复制,把多个页面jsp页面最终会编译后成一个servlet
-注意:
在被包含的页面中,只需要保留包含的内容就可以了
在被包含的页面不能加参数(jsp名称后面不能加参数)
被包含的页面(jsp名称)不能通过变量传递
*taglib:
-引入标签库
可以替代jstl :<%%><%!%><%=%>
<%@ taglib uri="jstl路径" prefix="jstl名称"%>
*总结
-jsp三个指令及其作用,属性和属性值;
四、Jsp内置对象
*在jsp中可以直接使用的对象(九个)
-reqeest:HttpServletRequest
代表请求,可以获取提交的参数,域对象,设置值和取值
-response:HttpServletResponse
代表响应,向页面输出内容
-session:HttpSession
域对象,范围会话
-config:ServletConfig
获取servlet名称,获取局部初始化参数
-application:ServletContext
域对象,整个web项目,获取全局初始化参数
-exception:获取异常信息getMessage()方法
需要把错误页面属性 isErrorPage设置成true
-page:jsp编译成servlet,表示当前运行的servlet对象
-out:向页面输出内容
JspWrite out.write();
PrintWrite response.getWrite().write();
--上述两个输出的区别
* out和response.getWriter()使用的不是一个对象
** out使用的JspWriter
** response.getWriter()使用PrintWriter
*输出的机制
**首先产生两个缓冲区,一个是out缓冲区和response缓冲区
**out输出不会直接向页面输出,首先把内容先放到out缓冲区,把out缓冲区里面的内容放到response缓存区,
**最终通过response缓冲区向页面输出
-pageContext(***)
*pageContext也是域对象
-作用范围:当前的jsp页面
<!-- 向pageContext域里面设置值 -->
<%
pageContext.setAttribute("page1", "vlaue1");
%>
<!-- 使用传统方式获取值 -->
<%=pageContext.getAttribute("page1")%>
<hr>
<!-- 使用el表达式获取值 -->
${page1 }
*pageContext可以向其他域对象里面设置值
setAttribute(String name, Object value, int scope)
-第三个参数:作用域-用来关联名称/对象的作用域
--REQUEST_SCOPE
--RESPONSE_SCOPE
--SERVLETCONTEXT_SCOPE
--SESSION_SCOPE
....
<!-- -------------向四个域对象里面设置值------------------- -->
<%
pageContext.setAttribute("page2", "value2",pageContext.PAGE_SCOPE);
pageContext.setAttribute("page3", "value3",pageContext.APPLICATION_SCOPE);
pageContext.setAttribute("page4", "value4",pageContext.REQUEST_SCOPE);
pageContext.setAttribute("page5", "value5",pageContext.SESSION_SCOPE);
%>
*pageContext可以从其他的域对象里面获取值
<!-- ------------取域对象里面的值------------------------ -->
<%="PageContext:"+pageContext.getAttribute("page2",pageContext.PAGE_SCOPE) %><br>
<%="ServletContext:"+pageContext.getAttribute("page3",pageContext.APPLICATION_SCOPE) %><br>
<%="Request:"+pageContext.getAttribute("page4",pageContext.REQUEST_SCOPE) %><br>
<%="Session:"+pageContext.getAttribute("page5",pageContext.SESSION_SCOPE) %><br>
<!-- -----------------------使用el表达式取值-------------- -->
<hr>
${page2 }<br>
${page3 }<br>
${page4 }<br>
${page5 }<br>
-findAttribute(String name):获取域对象的值,当获取属性的名称在几个域对象名称相同时,获取到域对象范围最小的里面的值。
*pageContext可以获取其他的八个内置对象
*经常用在框架里面,只需要传递一个对象,通过它可以获取其他对象
<!-- 通过pageContext对象获取其他八个内置对象 -->
<%
pageContext.getRequest();
pageContext.getServletContext();
pageContext.getServletConfig();
%>
*四个域对象
pageContext:范围:jsp页面
Request:范围:一次请求
session:范围:一次会话
Application:范围:整个web
域对象的使用必须掌握