黑马程序员技术交流社区
标题:
[石家庄校区]JSP的使用
[打印本页]
作者:
水煮牛蛙
时间:
2018-5-27 16:08
标题:
[石家庄校区]JSP的使用
本帖最后由 小石姐姐 于 2018-5-30 15:25 编辑
JSP的使用
1.什么是JSP :
Java Server Pages(Java服务器端页面).JSP = Java代码 + HTML的元素 + JSP内置东西
2.SUN公司为什么推出JSP动态网页开发技术:
* SUN公司推出的Servlet技术进行动态网页开发.发现Servlet自身有不足没有办法与ASP,PHP技术竞争.想在动态网页中输出表单.在Servlet中获得PrintWriter out = response.getWriter();
* out.println(“<form action=’’ method=’’>”);
* out.println(“</form>”);
* SUN又推出了动态的网页开发技术就是JSP.
3.JSP的执行过程:
* JSP会被翻译成Servlet,编译成class进行执行的.
4.JSP的嵌入Java代码:JSP的脚本元素
* <%! %> :翻译成类中的成员部分. 定义变量,定义方法,定义类.
Servlet是线程不安全的,尽量少在类中定义成员属性!!
* <% java代码 %> :翻译成类的service方法内部的内容. 定义变量,定义类,直接写代码块.
* <%= %> :翻译成service方法内部的out.print();获取变量的值
5.将eclipse中的jsp文件模板中的编码改为utf-8
window->JSP Files ->Encoding:改为utf-8
6.【JSP的注释】
* HTML的注释 :<!-- 注释 -->
* Java代码的注释 :// 单行注释 /*多行注释*/ /** 文档注释 */ (java注释
* JSP的注释 :<%-- JSP的注释 --%> 只存在与jsp代码中,翻译成servlet后注释就没有了
***
结论 : 什么样的代码用什么样的代码
7.【JSP的指令】
7.1指令的语法: (3个指令)
<%@ 指令名称 属性名称=”属性值” 属性名称=”属性值” ...%>
* JSP中有三个指令:page指令, include指令, taglib指令.
7.1.1.JSP中page指令:<%@ page %> -- 设置JSP页面的属性.(下面为page的属性)
* page指令在jsp 文件的顶行处,自动生成就行
下面这些属性都是用于在 page标签中设置JSP属性用的:
全局错误页面的的使用: error-page 重点掌握
* language :JSP脚本中使用的语言.现在只能写java.
* contentType :设置浏览器打开这个JSP的时候采用的默认的字符集的编码.
* pageEncoding :设置文件保存到本地硬盘,以及生成Servlet后,Servlet保存到硬盘上的编码.
* import :在JSP中引入类对象.但是import可以出现多次.(其它属性只能出现一次)
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
* extends :设置JSP翻译成Servlet后继承的类,默认值:org.apache.jasper.runtime.HttpJspBase,这个值要想修改,这个类必须是HttpServlet的子类(这个值一般不改)
* autoFlush :设置JSP的缓存自动刷出.true:自动刷出.
* buffer :设置JSP的缓冲区的大小,默认8kb.
* session :设置在JSP中是否可以直接使用session对象.默认值是true.(不需要request.getSession);
* isELIgnored :设置在JSP中是否忽略EL表达式.默认值是false不忽略.
例: ${ name } false时可以在页面显示name的值,true 会显示name这个字符串;
//下边这两个属性:是配合使用的在主页面中 设置errorPage="/如果出错要去跳转的页面的路径" (该路径为服务器端路径,不需要写工程名)
//当页面出错时就会跳转到设置的页面,在错误页面中设置 isErrorPage="true" 就会在该错误页面显示时,将错误信息显示出来,为false时
//不显示,只显示页面中的普通内容(详见JSP演示)
* errorPage :设置错误友好页面的提示.
* isErrorPage :通过这个设置显示JSP的错误信息.
8.设置全局错误友好界面(重点)
在企业中一般使用下边的这种设置,不适用errorPage/isErrorPage
* 设置全局的错误友好页面:创建与错误信息对应html页面,
当浏览器发生错误时就会将页面跳转到预先设定好的页面,
这样就不会在错误页面直接显示错误信息增加网页的友好性
* 在web.xml中设置:
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
7.2JSP中的include指令:指示JSP包含其他的页面. include :静态包含
* 静态包含格式:
<%@ include file="logo.jsp" %>
<%@ include file="menu.jsp" %>
<h1>BODY部分</h1>
<%@ include file="footer.jsp" %>
* 动态包含格式:
<jsp:include page=”被包含页面路径”></jsp:include> :用于页面的包含.(动态包含)
* 被包含的页面不需要写结构体,只写page指令 和 要引用的代码
7.3JSP中的taglib指令:指示JSP引入标签库.
<%@ taglib uri="标签的URI的路径" prefix="标签的别名" %>
例:
8.【JSP的内置对象(*****)】: 面试题
* 写在jsp的java代码中
* JSP的内置对象:在JSP中可以直接使用的对象.
(* JSP中有9大内置对象:
[ * request HttpServletRequest getParameter(),setAttribute(String name,Object value);
* response HttpServletResponse setHeader(String name,String value);getOutputStream();getWriter();
* session HttpSession setAttribute();getAttribute();
* application ServletContext setAttribute();getAttribute();
* page Object toString();wait();
* pageContext PageContext setAttribute();getAttribute();
pageContext 为Jsp的域对象 ;写一些jsp的插件时会使用
* config ServletConfig getServletName();getServletContext();
* out JspWriter write(),print();
* exception Throwable getMessage(),getCause(); 设置isErrorPage=”true”
]
* page内置对象 :真实对象是Object,就是JSP翻译成Servlet后的类的引用.
* out内置对象 :
8.1.out和response.getWriter是不是同一个对象?区别是什么?
结果:
* 不是 , out真实对象JspWriter ,response获得Writer是PrintWriter.
* JspWriter缓冲区的内容最终也是由response响应输出到页面,
因此JspWriter和response同时输出内容到页面时,
response的内容会显示在JspWriter的内容前边;
8.2.pageContext内置对象:
* pageContext 为Jsp的域对象 :写一些jsp的插件时会使用
#功能:
(* 获得其他的8个内置对象 :编写通用性代码或者框架的时候.
(* 向JSP的四个域中存取数据 :
((*JSP的四个域范围:
* PageScope :当前页面中有效. pageContext PageContext
* RequestScope :一次请求范围. request HttpServletRequest
* SessionScope :一次会话范围. session HttpSession
* ApplicationScope :应用范围 application ServletContext
(*pagegContext:只能在当前页面使用,其它页面无法获取
* 这三个域 :一般在jsp中取出数据,很少在jsp中又存储又取出
*Request
*session
*application
* 三个域获取值的方法获取值: getAttribute(String)
9.【JSP的动作标签】列出6个.(其实有很多,在jsp页面写一个jsp: 就会提示出很多动作标签)
9.1.标签的作用:简化代码.(简化 <% %> 百分号尖括号)
1. <jsp:forward /> :用于页面的转发.
例:/*
<jsp:forward page="/demo1-jsp/demo3-object/demo3.jsp"></jsp:forward>
*/
2.<jsp:include page=””></jsp:include> :用于动态包含
3.<jsp:param /> :用于带有路径的标签下,传递参数.(一般用来传参)
4.<jsp:useBean /> :用于在JSP中使用JavaBean.
5.<jsp:setProperty /> :用于在JSP中向JavaBean设置属性的.
6.<jsp:getProperty /> :用于在JSP中获得JavaBean的属性.
10.*****静态包含和动态包含的区别?(<%@ include%>和<jsp:include>)----面试
教学答案:
* 静态包含:相当于源代码的拷贝,只会翻译成一个Java类,有一个执行结果
* 动态包含:各自分别去翻译,各自执行,最终包含的是执行的结果
网络答案:
1、<%@include file="xxx.jsp"%>为jsp中的编译指令,其文件的包含是发生在jsp向servlet转换的时期,
而<jsp:include page="xxx.jsp">是jsp中的动作指令,其文件的包含是发生在编译时期,
也就是将java文件编译为class文件的时期
2、使用静态包含只会产生一个class文件,而使用动态包含会产生多个class文件
3、使用静态包含,包含页面和被包含页面的request对象为同一对象,
因为静态包含只是将被包含的页面的内容复制到包含的页面中去;
而动态包含包含页面和被包含页面不是同一个页面,被包含的页面的request对象可
以取到的参数范围要相对大些,不仅可以取到传递到包含页面的参数,
同样也能取得在包含页面向下传递的参数
11.<jsp:useBean id="user" class="com.demo1.domain.User" scope="page"></jsp:useBean>
scope属性的各个设置值的意义和作用:
(1)page表示将JavaBean实例对象存储在PageContext对象中,作用范围是当前JSP页面有效。
(2)request表示将JavaBean实例对象存储在ServletRequest对象中,存储在request对象中的JavaBean对象可以被属于同一个请求的所有Servlet和JSP页面访问。
(3)session表示将JavaBean实例对象存储在HttpSession对象中,存储在HttpSession对象中的JavaBean对象可以被属于同一个会话的所有Servlet和JSP页面访问,此设置要求当前JSP页面支持Session,即没有将page指令的session属性设置为false。也就是对一个特定用户有效,一个http会话。
(4)application表示将JavaBean实例对象存储在ServletContext对象中,存储在ServletContext对象中的JavaBean对象可以被同一个Web应用程序中的所有Servlet和JSP页面访问。也就是所有用户都可以使用。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2