jsp

一.什么动态代理

JSP 服务器端页面技术

二.什么是jsp

 JSP:java server pages

 注意:JSP本质上就是一个servlet  

 jsp的组成: html代码+java代码+jsp特有的代码

一句话: jsp就是能写java代码的html页面

三.JSP的作用?(重点)

servlet要展示页面信息的时候会特别麻烦

jsp能更好的替代Servlet去展示信息

一句话: 用来接收servlet产生的数据(list,bean,数组),并且展示数据的(记住)

注意:jsp需要放在webcontent下面

四.如何使用JSP?

HttpJspBase--->httpServlet

jsp的执行原理(理解):

1.服务器收到请求,找到指定servlet执行(JspServlet)

2.servlet找到对应的jsp文件.将jsp文件变成java文件.并调用编译器编译成class文件,然后放到work目录下

3.编译后的class文件会被服务器当做Servlet执行,生成动态的内容,将动态的内容返回给服务器

4.服务器拿到生成的内容,组装成响应信息,返回给浏览器

5.浏览器收到响应,展示内容  

1.jsp特有的

    1 jsp的脚本(了解) <% %>  <%= %>  <%! %>---el,jstl

    2 jsp的注释  

    3 jsp的指令(重点)

    4 jsp的内置对象(面试题)

    5 jsp的域对象(4个域对象重点中的重点)

    6 jsp的动作标签(了解)

2.jsp的脚本(了解)

<%....%> java程序片段

  生成的servlet内容,在service方法里面有一份

<%=...%> 输出表达式

 生成的servlet内容,在service方法里面是响应输出 out.print();

<%!...%> 声明成员

 生成的servlet内容,在成员位置上

3.jsp的注释

       html的注释: <!-- -->

在源码和生成的servlet里都显示   

      

       java的注释: //  /* */  /** */

在源码不显示,在servlet里显示      

       

       jsp的注释:  <%--  --%>

在源码和生成的servlet里都不显示

4.jsp的指令

作用:声明jsp页面的一些属性

格式:<%@指令名 属性1="值1" 属性2="值2"  ....%>

指令的分类:

page:声明jsp页面的属性

include:包含(静态包含)

taglib:导入标签库(明天讲)   

注意:

jsp页面中可以使用多个指令,

指令可以出现多次,

位置任意,一般都在页面的上面

5.page指令

重要属性

import:导入jar包的   /alt+/  做导包和提示

contentType:设置响应流的编码(通知浏览器用什么编码打开),设置文件的mime类型

pageEncoding:设置页面的编码

contentType和pageEncoding的联系:

两者都出现的时候:各自使用各自的编码

两者只出现一个的时候:两个使用出现的编码

两者都不出现的时候:使用默认的编码 (iso-8859-1)

了解属性

language:声明当前jsp支持的脚本语言 目前只有 java

errorPage:当页面出现错误之后 跳转到指定的页面上(地址)

isErrorPage:当前是否是个错误页面(默认值是false)

当声明这是一个错误页面的时候,在页面中可以使用 exception这个内置对象

session:当前页面是否可以使用session内置对象             

6.include指令:静态包含

 格式:

<%@include file="文件地址" %>  多个共同的内容,可以抽取出来,在使用的时候

       使用静态包含就行了

注意:将被包含页面的内容复制到当前的jsp页面中,一起编译运行了,只生成一个java文件

7.taglib指令:导入标签库

  格式:

<%@taglib prefix="起别名" uri="名称空间" %>  

五.jsp的内置对象(9个)

jsp页面上可以直接使用的对象称之为内置对象

   

序号 内置对象  类型
1 exception Throwable异常信息的封装对象,一般不会有,isErrorPage="true"
2 request HttpServletRequest
3 session HTTPsession
4 response HttpServletResponse
5 config ServletConfig不用
6 application ServletContext
7 out

JspWriter            jsp的字符输出流 做响应体内容输出

PrintWriter          servlet的字符输出流 做响应体内容输出

8 page Object(代表的是当前页面对象)
9 pageContext

JSP最小的作用域,一般不使用这个作用域存储数据

六.pageContext对象

可以获取其他八大内置对象

举例子:当定义一个工具类的时候,这个工具类如果用到了很多内置对象

直接使用pageContext

 public void utils(pageContext con)

 {

exception

request

...

实现了功能

 }

可以从别的作用域中查找数据

pageContext.findAttribute(String name);   //获取对应的值

作用域的大小排列:

servletContext: 1

session:  2

request:  3

pagecontext: 4

先从最小的pageContext作用域中寻找,如果能找到,直接使用

找不到,继续找request,如果能找到,直接使用

找不到,继续找session,如果能找到,直接使用

找不到,继续找application,如果能找到,直接使用

最后都没找到,返回null

findAttribute

底层:

if(pageContext.getAttribute(name)!=null)

{

return pageContext.getAttribute(name)

}else if(request.getAttribute(name)!null)

{

return request.getAttribute(name)

}...

else

{

return null;

}

pageContext可以操作其他作用域(了解)

setAttribute()

getAttribute()

removeAttribute();

实例:

上下两句效果完全等价

session.setAttribute("msg2", "33333333333");

pageContext.setAttribute("msg2", "33333333333",pageContext.SESSION_SCOPE);

七.域对象总结

作用: 存储数据,在多个servlet/jsp中做数据的交互

Servlet中:  3个域对象

1.ServletContext对象:

    创建: 服务器启动的时候,就为放在它下面每一个项目各创建一个对应的servletContext对象

    销毁: 服务器正常关闭获取项目从服务器中移除的时候,servletContext对象销毁

    作用域: 整个项目中的所有serlvet/jsp都可以共享它里面的数据

2.HTTPServletRequest对象:

    创建: 浏览器请求服务器的时候,创建request对象

    销毁: 服务器给浏览器响应回去的时候,request对象销毁

    作用域: 一次请求,不管这个请求转发了多少次,只要没有响应,所有的servlet/jsp

            都可以获取request里面的数据

3.HTTPSession对象:

    创建: java认为第一次调用request.getSession()的时候,创建session对象

    销毁: 3种方式

  1: 手动销毁  void invalidate()

  2: 自动销毁  默认是离开电脑30分钟  可以去tomcat的web.xml下设置

  3: 服务器非正常关闭 (断电,terminate..)

   扩展: 服务器正常关闭,session不会销毁,只会带着它的数据序列化到磁盘上(钝化)

 当服务器启动的时候,session和session中的数据会从磁盘上序列化回内存(活化)     

    作用域:

     一次会话,只要浏览器不关闭,在servlet/jsp中获取到的session

     都是同一个session

4.jsp中:  4个域对象

ServletContext对象        同上

HTTPServletRequest对象    同上

HTTPSession对象           同上

jsp特有的域对象:

pageContext对象:

        作用域:当前页面

5 jsp的动作标签(了解)

<jsp:forward> 在jsp页面使用请求转发  

<jsp:forward page="...">

相当于<%request.getRequestDispatcher(..).forward(..)%>

<jsp:include> 动态包含

将被包含页面运行后的结果包含了进来

 

原文地址:https://www.cnblogs.com/xwb583312435/p/8709823.html