java Web之JSP

今天把jsp总结一下首先:

一、什么是JSP?

1.jsp(java server pages)是java web服务端的动态资源。它与HTML页面的作用是相同的,显示数据和获取数据的。
2.jsp就是在html的基础上添加java脚本,构成jsp页面。

3.jsp其实就是一个Servlet;·

二、jsp的作用?

 jsp的作用:
  * Servlet:
    > 缺点:不适合设置html响应体,需要大量的response.getWriter().print("<html>")
    > 优点:动态资源,可以编程。
  * html:
    > 缺点:html是静态页面,不能包含动态信息
    > 优点:不用为输出html标签而发愁
  * jsp(java server pages):
    > 优点:在原有html的基础上添加java脚本,构成jsp页面。

三、jsp和servlet的分工

 * JSP:
    > 作为请求发起页面,例如显示表单、超链接。
    > 作为请求结束页面,例如显示数据。
  * Servlet:
    > 作为请求中处理数据的环节。

四、jsp的原理

 * jsp其实是一种特殊的Servlet
  > 当jsp页面第一次被访问时,服务器会把jsp编译成java文件(这个java其实是一个servlet类)
  > 然后再把java编译成.class
  > 然后创建该类对象
  > 最后调用它的service()方法
  > 第二次请求同一个jsp时,直接调用service()方法。
 * 在tomcat的work目录下可以找到jsp对应的.java源代码。
 * 查看jsp对应java文件:
  > java脚本
  > html

五、JSP的九大内置对象

一、在JSP中无需创建就可以使用的9个对象,它们是:

1.out(JspWriter):等同与response.getWriter(),用来向客户端发送文本数据;
2.config(ServletConfig):对应“真身”中的ServletConfig;
3.page(当前JSP的真身类型):当前JSP页面的“this”,即当前对象;
4.pageContext(PageContext):页面上下文对象,它是最后一个没讲的域对象;
5.exception(Throwable):只有在错误页面中可以使用这个对象;
6.request(HttpServletRequest):即HttpServletRequest类的对象;
7.response(HttpServletResponse):即HttpServletResponse类的对象;
8.application(ServletContext):即ServletContext类的对象;
9.session(HttpSession):即HttpSession类的对象,不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session=”false”%>,说明这个页面不能使用session。


在这9个对象中有很多是极少会被使用的,例如:config、page、exception基本不会使用。
在这9个对象中有两个对象不是每个JSP页面都可以使用的:exception、session。
在这9个对象中有很多前面已经学过的对象:out、request、response、application、session、config。
二、page对象和page域的区别:
(1)page对象和page域是两个概念
(2)page对象指的是Object中的this对象(当前对象)
(3)page域指的是pageContext的范围(即PAGE_SCOPE)

 六、JSP的三大指令

JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的。
JSP中有三大指令:page、include、taglib,最为常用,最为复杂的就是page指令了。

1.page指令:

1.page指令是最为常用的指定,也是属性最多的属性!
2.一个页面可以写0~N个page指令。不是非得放在第一行
3.page指令没有必须属性,都是可选属性。例如<%@page %>,没有给出任何属性也是可以的!
4.在JSP页面中,任何指令都可以重复出现!
<%@ page language=”java”%>
<%@ page import=”java.util.*”%>
<%@ page pageEncoding=”utf-8”%>
这也是可以的!


2.include指令:

1.与RequestDispatcher的include()方法的功能相似!
2.<%@include%> 它是在jsp编译成java文件时完成的!他们共同生成一个java(就是一个servlet)文件,然后再生成一个class!
3.RequestDispatcher的include()是一个方法,包含和被包含的是两个servlet,即两个.class!他们只是把响应的内容在运行时合并了!
4.作用:把页面分解了,使用包含的方式组合在一起,这样一个页面中不变的部分,就是一个独立jsp,而我们只需要处理变化的页面。
5.include的目的就是可重用。

1.include指令表示静态包含!即目的是把多个JSP合并成一个JSP文件!
2.include指令只有一个属性:file,指定要包含的页面,例如:<%@include file=”b.jsp”%>。
3.静态包含:当hel.jsp页面包含了 lo.jsp页面后,在编译hel.jsp页面时,需要把hel.jsp和lo.jsp页面合并成一个文件,然后再编译成Servlet(Java文件)。

4.很明显,在ol.jsp中在使用username变量,而这个变量在hel.jsp中定义的,所以只有这两个JSP文件合并后才能使用。通过include指定完成对它们的合并!


3.taglib指令:

在JSP页面中使用第三方的标签库时,需要使用taglib指令来“导包”。例如:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
其中prefix表示标签的前缀,这个名称可以随便起。uri是由第三方标签库定义的,所以你需要知道第三方定义的uri。
下面在使用这个标签就得以c这个前缀开头,例如:
<c:text>


七、四大作用域

从小到大的顺序:
1.pageContext:一个jsp页面,这个域是在当前jsp页面和jsp页面中使用的标签之间共享数据!
2.request:一个请求链
3.session:整个会话(一个会话只有一个用户)
4.application(ServletContext):整个应用程序


1.pageContext对象:

pageContext也是域对象,它的范围是当前页面。它的范围也是四个域对象中最小的!
void setAttribute(String name, Object value);
Object getAttrbiute(String name, Object value);
void removeAttribute(String name, Object value);


2.代理其他域对象的功能

1.可以使用pageContext来代理其它3个域对象的功能,也就是说可以使用pageContext向request、session、application对象中存取数据,例如:
 pageContext.setAttribute("x", "X");
 pageContext.setAttribute("x", "XX",PageContext.REQUEST_SCOPE);
 pageContext.setAttribute("x","XXX",PageContext.SESSION_SCOPE);
 pageContext.setAttribute("x","XXXX",PageContext.APPLICATION_SCPE);
2.void setAttribute(String name, Object value, int scope):在指定范围中添加数据;
3.Object getAttribute(String name, int scope):获取指定范围的数据;
4.void removeAttribute(String name, int scope):移除指定范围的数据;
5.Object findAttribute(String name):依次在page、request、session、application范围查找名称为name的数据,如果找到就停止查找。这说明在这个范围内有相同名称的数据,那么page范围的优先级最高!


3.获取其他内置对象:

一个pageContext对象等于所有内置对象,即1个当9个。这是因为可以使用pageContext对象获取其它8个内置对象:
(1)JspWriter getOut():获取out内置对象;
(2)ServletConfig getServletConfig():获取config内置对象;
(3)Object getPage():获取page内置对象;
(4)ServletRequest getRequest():获取request内置对象;
(5)ServletResponse getResponse():获取response内置对象;
(6)HttpSession getSession():获取session内置对象;
(7)ServletContext getServletContext():获取application内置对象;
(8)Exception getException():获取exception内置对象;




猜你喜欢

转载自blog.csdn.net/qq_34939308/article/details/78956198