JSP技术概述

JSPJava Server Pages,是以Java语言为基础的动态网页开发技术

1.优点:解决了servlet不适合向外响应一个完整的页面,又解决了html无法展示动态数据的问题;

2.内部原理:JSP在第一次访问时,会被翻译成一个servlet,对JSP访问后看到的页面其实就是翻译后的servlet

jsp生命周期【jsp两次编译

jsp执行原理

当一个JSP页面第一次被访问的时候,JSP引擎将执行以下步骤:

1、将JSP页面翻译成一个Servlet,这个Servlet是一个java文件,同时是一个完整的java程序

2、JSP引擎调用java编译器对这个Servlet进行编译,得到可执行文件class

3、JSP引擎调用java虚拟机来解释执行class文件,生成向客户端发送的应答,然后发送给客户端

以上三个步骤仅仅在JSP页面第一次被访问时才会执行,以后的访问速度会因为class文件已经生成而大大提高。

JSP引擎街道一个客户端的访问请求时,首先判断请求的JSP页面是否比对应的Servlet新,如果新,对应的JSP需要重新编译。

3大页面指令

位置: 可以写在JSP页面的任意位置

格式: <%@ 指令名称 若干属性声明%>

page指令  --用来声明当前JSP页面的基本属性

include用于实现页面静态包含

taglib用于导入tld自定义标签库

JSP四大作用域

1、page,他只在当前页面有效,也就是用户请求的页面有效,当当前页面关闭或转到其他页面时,page对象将在响应回馈给客户端后释放

2、request,他在当前请求中有效,request可以通过setAttribute()方法实现页面中的信息传递,也可以通过forward()方法进行页面间的跳转,需要注意的是request是转发不是重定向,转发相对于浏览器来说是透明的,也就是无论页面如何跳转,地址栏上显示的依旧是最初的地址

3、session,他在当前回话中有效。当一个台电脑上的同一浏览器对服务器进行多次访问时,在这多次访问之间传递的信息就是session作用域的范围。它从浏览器发出第一个HTTP请求即可认为会话开始,但是会话结束的时间是不确定的,因为在浏览器关闭时并不会通知服务器,一般Tomcat置的默认时间为120分钟,也可以通过setMaxInactiveInterval(int)方法进行设置,或是通过invalidate()方法强制结束当前会话

4、application,他在所有的应用程序中都有效,也就是当服务器开始到服务器结束这段时间,application作用域中存储的数据都是有效的,同样可以通过setAttribute赋值和getAttribute取值。

jsp六大动作

  • jsp:include 在页面被请求的时候引入一个文件

  • jsp:useBean 寻找或者实例化一个JavaBean

  • jsp:setProperty 设置JavaBean的属性

  • jsp:getProperty 输出某个JavaBean的属性

  • jsp:forward 把请求转到一个新的页面

  • jsp:plugin 根据浏览器类型为Java插件生成OBJECT或EMBED标记。

动态包含

可以包含静态也可以包含动态<jsp:include>

请求转发

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

操作javabean

<jsp:useBean>标签表示用来在JSP页面中创建一个bean实例并指定它的名字以及作用范围。

  • class指定Bean的完整包名,会在指定的scope中进行查找,如果有则重用,如果没有则自动创建

  • type指定将引用该对象变量的类型,会在指定的scope中进行查找,如果有则重用,如果没有则异常InstantiationException

应用applet

<jsp:plugin>标签表示执行一个applet或Bean,有可能的话还要下载一个Java插件用于执行它。

地址参数

<jsp:include page="ff3.jsp">
    <jsp:param name="username" value="bbbc"/>   相当于想request的parameter中添加数据
    <jsp:param name="password" value="11111"/>
</jsp:include>

<jsp:forward page="ff3.jsp">
    <jsp:param name="username" value="bbbc"/>
    <jsp:param name="password" value="11111"/>
</jsp:forward>

jsp九大默认对象

1、request

HttpServletRequest接口类型,用于封装用户请求信息

<body>
<%
    Enumeration<String> enumeration=request.getHeaderNames();
    while(enumeration.hasMoreElements()){
        String name=enumeration.nextElement();
        String value=request.getHeader(name);  //getDateHeader  getIntHeader
        out.println(name+"--->"+value+"<br/>");
    }
%>
<hr/>
<%
    Enumeration<String> enumeration1=request.getParameterNames();
    while(enumeration1.hasMoreElements()){
        String name=enumeration1.nextElement();
        //String value=request.getParameter(name);
        String[] values=request.getParameterValues(name);
        out.print(name+"-->"+ Arrays.toString(values));
    }
%>
<hr/>
<%
    Enumeration<String> enumeration2=request.getAttributeNames();
    while(enumeration2.hasMoreElements()){
        String name=enumeration2.nextElement();
        Object value=request.getAttribute(name);
        out.println(name+"-->"+value);
    }
%>

2、response

HttpServletResponse接口类型,用于封装服务器的响应信息

  response.setContentType("text/html;charset=UTF-8"); // MIMIE  @page contentType="text/html;charset=utf-8"
  response.setHeader("cache-control","no-cache");//避免客户端缓存的解决方案
  //response.setStatus(404);  //设置响应状态码 1xx 2xx 3xx 4xx 5xx
  //response.sendError(500,"报错信息");  设置报错状态
  //response.sendRedirect("http://www.baidu.com");重定向
  PrintStream pw=response.getWriter();
  ServletOutputStream oos=response.getOutputStream();

3、config

ServletConfig接口类型,用于封装当前页面的配置信息 web.xml

<%
  Enumeration<String> enumeration=config.getInitParameterNames();
  while(enumeration.hasMoreElements()){
    String name=enumeration.nextElement();
    String value=config.getInitParameter(name);
    out.println(name+"::"+value +"<br/>");
  }
%>

4、page

Object类型,用于指代当前jsp页面对象,相当于this,但是注意是Object类型

<%
    this.aaa();  //但是如果使用page.aaa()则语法报错
%>
  • equals

  • toString

  • hashcode

  • getClass

  • wait

  • notify/notifyAll

5、out

JspWriter类型,是服务器向客户端输出信息的字符流,也可以通过response进行获取(PrintWriter)

  • print(object)

  • println(object) 不等价于在html显示中的换行

  • close()

  • flush()

  • getBufferSize() / getRemaining()

6、exception

Throwable类型,用于封装异常信息

使用的前提:当前页面必须设置<%@ page isErrorPage=”true”%>才能使用,否则报错

7、session

HttpSession接口类型,用于实现服务器端跟踪用户,一个用户对应一个session对象

  • 获取session对象 request.getSession() / getSession(boolean)

  • 常用方法

    • setAttribute(String,Object)

    • getAttribute(String):Object

    • removeAttribute(String)

    • getAttributeNames():Enumeration

8、application

ServletContext接口类型,是当前应用的上下文对象,可以实现跨用户数据共享

  • setAttribute(String,Object)

  • getAttribute(String):Object

  • removeAttribute(String)

  • getAttributeNames():Enumeration

9、pageContext

pageContext对象是javax.servlet.jsp.PageContext类的实例对象,用来代表整个JSP页面。它代表页面上下文,该对象主要用于访问 JSP 之间的共享数据,使用pageContext可以访问page、request、session、application范围的变量。JSP页面中只需将pageContext对象传递给某个Java类的实例对象,在该Java对象中就可以访问和调用其他隐式对象的功能了。

  • JspWriter getOut(); //返回当前客户端响应被使用的JspWriter流(out)

  • HttpSession getSession(); //返回当前页面中HttpSession对象(session)

  • Object getPage(); //返回当前页面的Object对象(Object)

  • ServeletRequest getRequest(); //返回当前页面的ServletRequest对象(request)

  • ServeletResponse getResponse(); //返回当前页面的ServletResponse对象(response)

  • getException()返回exception隐式对象

  • getServletConfig()返回config隐式对象

  • getServletContext()返回application隐式对象

  • void setAttribute(String name,Object attribute); //设置属性及属性值

  • void getAttribute(String name,int scope); //在指定范围内取属性的值

  • int getAttributeScope(String name); //返回某属性的作用范围

  • void forward(String relativeUrlPath); //使当前页面重导到另一页面

  • void include(String relativeUrlPath); //在当前位置包含另一文件

Servlet和JSP的区别

jsp经编译后就变成了Servlet。JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类。Servlet中的内置对象都是必须通过HttpServletRequest对象、HttpServletResponse对象以及HttpServlet对象得到.Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值