Web : JSP - 14

JSP概述

Servlet是j2ee提供的动态资源开发技术,是以java的程序的形式进行开发,在java中书写HTML标签是一件十分头疼的事情,所以人们开发出了JSP,看起来像是HTML一样,但可以在其中写java代码,本质上是动态web资源。

JSP原理

JSP会在第一次被访问时被翻译成一个Servlet,访问jsp时本质上是这个翻译过来的Servlet在执行。

JSP基本语法

  • 模板元素

直接写在jsp页面中的html内容叫做模板元素

会在翻译过来的Servlet中被直接out.write输出到浏览器中

<%@ page import="java.util.Date" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>Title</title>

</head>

<body>

<%--这是一个测试页面--%>

<%for(int i=0;i<3;i++){%>

<font color='red'>

            <%=new Date().toLocaleString()%>

</font>

<%}%>

</body>

</html>

out.write("<html>\r\n");

out.write("<head>\r\n");

out.write("    <title>Title</title>\r\n");

out.write("</head>\r\n");

out.write("<body>\r\n");

for(int i=0;i<3;i++){

out.write("\t\t<font color='red'>\r\n");

out.print(new Date().toLocaleString());

out.write("\t    </font>\r\n");

}

out.write("</body>\r\n");

out.write("</html>\r\n");

  • 脚本表达式

<%= java表达式%>

通过脚本表达式可以在jsp页面中编写java表达式

会在翻译过来的Servlet中执行java表达式并将执行结果打印给浏览器

<%@ page import="java.util.Date" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>Title</title>

</head>

<body>

<%--这是一个测试页面--%>

<%for(int i=0;i<3;i++){%>

<font color='red'>

            <%=new Date().toLocaleString()%>

</font>

<%}%>

</body>

</html>

out.write("<html>\r\n");

out.write("<head>\r\n");

out.write("    <title>Title</title>\r\n");

out.write("</head>\r\n");

out.write("<body>\r\n");

for(int i=0;i<3;i++){

out.write("\t\t<font color='red'>\r\n");

out.print(new Date().toLocaleString());

out.write("\t    </font>\r\n");

}

out.write("</body>\r\n");

out.write("</html>\r\n");

  • 脚本片段

<% 若干java语句 %>

通过脚本片段可以在jsp页面中编写java语句

页面中可以有若干脚本片段

某个脚本片段java代码可以是不完整的,但整个jsp页面中的脚本片段拼在一起必须是完整的java代码。

在翻译过来的Servlet中,脚本片段被原样复制粘贴到对应位置

<%@ page import="java.util.Date" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>Title</title>

</head>

<body>

<%--这是一个测试页面--%>

<%for(int i=0;i<3;i++){%>

<font color='red'>

            <%=new Date().toLocaleString()%>

</font>

<%}%>

</body>

</html>

out.write("<html>\r\n");

out.write("<head>\r\n");

out.write("    <title>Title</title>\r\n");

out.write("</head>\r\n");

out.write("<body>\r\n");

for(int i=0;i<3;i++){

out.write("\t\t<font color='red'>\r\n");

out.print(new Date().toLocaleString());

out.write("\t    </font>\r\n");

}

out.write("</body>\r\n");

out.write("</html>\r\n");

  • jsp注释

<%--注释内容--%>

被jsp注释包裹的内容不会被翻译到servlet中

<%@ page import="java.util.Date" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>Title</title>

</head>

<body>

<%--这是一个测试页面--%>

<%for(int i=0;i<3;i++){%>

<font color='red'>

            <%=new Date().toLocaleString()%>

</font>

<%}%>

</body>

</html>

out.write("<html>\r\n");

out.write("<head>\r\n");

out.write("    <title>Title</title>\r\n");

out.write("</head>\r\n");

out.write("<body>\r\n");

for(int i=0;i<3;i++){

out.write("\t\t<font color='red'>\r\n");

out.print(new Date().toLocaleString());

out.write("\t    </font>\r\n");

}

out.write("</body>\r\n");

out.write("</html>\r\n");

JSP指令

jsp指令是用来配置jsp页面特性的标签。

jsp指令包括page指令、include指令、taglib指令

  • page指令

<%@ page …%>

用来通知翻译引擎,如何翻译当前的JSP

其中可以包含如下属性

[ language="java" ] 当前JSP使用的开发语言

[ extends="package.class" ] 当前jsp翻译成servlet后要继承的类,注意此值必须是一个servlet的子类,一般情况下不要改

[ import="{package.class | package.*}, ..." ] 导入需要使用到的包 java.lang.*;javax.servlet.*;javax.servlet.jsp.*;javax.servlet.http.*;

[ session="true | false" ] 用来指定当前页面是否使用session,如果设置为true,则翻译过来的servlet中将会有对session对象的引用,于是可以直接在jsp中使用session隐式对象。但是这将导致一旦访问jsp就会调用request.getSession()方法,可能导致不必要的空间浪费。如果确定jsp中不需要session可以设为false

[ buffer="none | 8kb | sizekb" ] out隐式对象所使用的缓冲区的大小

[ autoFlush="true | false" ] out隐式对象是否自动刷新缓冲区,默认为true,不需要更改

[ isThreadSafe="true | false" ] 翻译过来的servlet是否实现SingleThreadModel

[ errorPage="relative_url" ] 如果页面出错,将要跳转到的页面,除了在jsp中使用此属性指定错误页面外也可以在web.xml中配置整个web应用的错误页面,如果两个都设置则jsp中的此属性起作用

[ isErrorPage="true | false" ] 如果设置此属性为true,翻译过来的servlet中将含有Exception隐式对象,其中封装的就是上一个页面中抛出的异常对象

[ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] 和jsp乱码相关的指令,用来指定jsp输出时,设置的Content-Type响应头用来指定浏览器打开的编码

[ pageEncoding="characterSet | ISO-8859-1" ] 服务器翻译jsp时使用的编码集.如果向防止jsp乱码,应该保证文件的保存编码和jsp翻译成servlet用的编码以及输出到浏览器后浏览器打开的编码一致.此属性一旦设置好,翻译引擎会间接帮我们设置content-type属性.

[ isELIgnored="true | false" ] 当前页面是否使用el表达式,设置为false时表示启用el,j2ee4.0开始默认支持,j2ee4.0一下做开发时,如果要使用el表达式,需将此属性设置为fals

  • include指令

<%@ include file=""%>

用来实现页面包含

include指令实现的包含是静态包含,其他方式实现的包含都是动态包含.

静态包含是在jsp翻译成servlet过程中,多个jsp翻译成一个servlet,在源码级别实现了包含

动态包含是各自的jsp翻译成各自的servlet,在访问时,各自的Servlet执行产生各自的输出,将这些输出合成一个输出,是输出级别的包含

静态包含效率更高一些,推荐使用。

  • taglib指令

<%@ taglib uri="" prefix=""%>

用来引入标签库。

九大隐式对象

jsp翻译成Serlvet的过程中,自动创建的9个对象,可以在jsp页面中直接使用

page

this

当前servlet

request

HttpServletRequest

代表请求的对象

response

HttpServletResponse

代表响应的对象

config

ServletConfig

当前Servlet的配置对象

application

ServletContext

代表当前应用的对象

session

HttpSession

代表会话的对象

out

resopnse.getWriter()

代表输出流的对象

pageContext

pageContext

代表jsp页面环境

exception

exception

代表当前jsp页面抛出的异常对象

PageContext

pageContext是代表当前jsp页面运行环境的对象。

  • 作为入口对象可以获取其他八大隐式对象

getPage()方法返回page隐式对象

getRequest()方法返回request隐式对象

getResponse()方法返回response隐式对象

getServletConfig()方法返回config隐式对象

getServletContext()方法返回application隐式对象

getSession()方法返回session隐式对象

getOut()方法返回out隐式对象

getException()方法返回exception隐式对象

  • 作为入口对象操作四大作用域

getAttribute(String name,int scope)

setAttribute(String name, Object value,int scope)

removeAttribute(String name,int scope)

其中pageContext中代表域的常量:

PageContext.APPLICATION_SCOPE

PageContext.SESSION_SCOPE

PageContext.REQUEST_SCOPE

PageContext.PAGE_SCOPE

findAttribute(String name)

从四大作用域中按照由小到大的顺序搜寻指定名称的域属性,找到就返回,找不到返回null

  • PageContext是一个域对象

操作api

setAttribute(String name,Object obj)

向域中存入数据

getAttribute(String name)

从域中获取数据

removeAttribute(String name)

删除域中指定数据

getAttributeNames()

获取域中所有属性名组成的枚举

  • 特点

生命周期: 访问jsp开始时创建,访问jsp结束后销毁

作用范围:当前jsp页面范围

主要功能:在当前jsp页面内共享数据

  • 25
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值