JavaEE10_JSP

2021/6/14 14:21:15

本文主要是介绍JavaEE10_JSP,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • JSP概念
  • JSP原理
  • JSP指令
    • 1. page指令
    • 2. nclude指令
    • 3. taglib指定
  • JSP的脚本和注释
    • 1. JSP的脚本
    • 2. JSP的注释
      • 2.1 jsp标签(动作)
        • 2.1.1 静态包含
        • 2.1.2 动态包含
        • 2.1.3 静态包含和动态包含图解
  • jsp内置/隐式对象(9个)
    • 1.out对象
    • 2. pageContext对象

JSP概念

Java Server Pages: java服务器端页面
可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码,用于简化书写。

JSP原理

JSP本质上就是一个Servlet。
JSP在第一次被访问时会被Web容器翻译成servlet,在执行。
过程:第一次访问---->login.jsp---->login_jsp.java—>login_jsp.class—>编译运行。

JSP原理图解
在这里插入图片描述

JSP指令

jsp的指令是指导jsp翻译和运行的命令,jsp包括三大指令:

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

1. page指令

属性最多的一个指令(实际开发中page指令默认),根据不同的属性,指导整个页面特性。
常用属性如下:

language:jsp脚本中可以嵌入的语言种类。
pageEncoding:当前jsp文件的本身编码---内部可以包含contentType。
contentType:response.setContentType(text/html;charset=UTF-8)。有2个功效。
	1. 设置响应体的mime类型以及字符集。
	2. 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
session:是否jsp在翻译时自动创建session。
import:导入java的包。
errorPage:当前页面发生异常后,会自动跳转到指定的错误页面。
isErrorPage:标识当前也是是否是错误页面。
	true:是,可以使用内置对象exception。
	false:否。默认值。不可以使用内置对象exception。
buffer:设置缓冲区大小,就是out把把该jsp页面进行输出,设置out缓冲区的大小默认是8kb。	   

如果jsp页面出错不配置errorPage属性会出现错误页面,那样给用户感觉不是很友好,应该配置一个友好的错误页面。

<%@ page contentType="text/html;charset=UTF-8"  language="java" buffer="16kb"%>
<html>
<head>
    <title>JSP指令</title>
</head>
<body>
    <%
        int i = 3/0;
    %>
</body>
</html>

出错页面
在这里插入图片描述

配置import、errorPage、isErrorPage属性index.jsp演示

<%--导包--%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" errorPage="500.jsp" language="java" buffer="16kb"%>

<html>
<head>
    <title>JSP指令</title>
</head>
<body>
    <%
        List<String> list = new ArrayList<String>();
        int i = 0;
    %>
</body>
</html>

index.jsp页面出现错误就会跳转到下面友好的500.jsp页面

<%@ page import="java.util.concurrent.Executors" %>
<%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" language="java" %>
<html>
<head>
    <title>error</title>
</head>
<body>
    <h1>服务器正忙......</h1>
    <%
        String message = exception.getMessage();
        System.out.println(message);
    %>
</body>
</html>

2. nclude指令

页面包含(静态包含)指令,可以将一个jsp页面包含到另一个jsp页面中,如果有一部分代码是大部分页面都有的,可以提取出来。然后使用nclude指令引入提取的页面。
格式:<%@ include file=“被包含的文件地址”%>

top.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>顶层内容</title>
</head>
<body>
    <hr>
    <h1>顶层内容</h1>
</body>
</html>

botton.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>底层内容</title>
</head>
<body>
    <hr>
    <h1>底层内容</h1>
</body>
</html>

content.jsp

<html>
<%@ include file="top.jsp"%>
<head>
    <title>中间内容</title>
</head>

<body>
    <h1>中间内容</h1>
</body>
<%@ include file="botton.jsp"%>
</html>

访问content.jsp
在这里插入图片描述

3. taglib指定

导入资源 <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
prefix:前缀,自定义的
jstl标签库的jar包

jstl.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--导入jstl标签--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title></title>
</head>
<body>
    <c:if test=""></c:if>
</body>
</html>

JSP的脚本和注释

1. JSP的脚本

JSP定义Java代码的方式:

1、<%java代码%> --- 内部的java代码翻译到service方法的内部
2、<%!java代码%> --- 会被翻译成servlet的成员的内容
3、<%=java变量或表达式> --- 会被翻译成service方法内部out.print()

JSP的脚本定义一个jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--定义在service方法内部--%>
    <%
        int x = 5;
        System.out.println("hello,jsp.");
    %>
    <%--定义在servlet成员位置--%>
    <%!
        int x = 10;
    %>
    <%--变量和表达式--%>
    <%=x%><br>
    <%--如果不写在<%%> 会作为文件输出 --%>
    System.out.println("hello,jsp.");
    <h1>hello,jsp.</h1>
</body>
</html>

访问该jsp
在这里插入图片描述

上面JSP翻译成serlvet,我只复制了和上面<%%>有关的部分

public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase{

		int x = 10;//<%! %>
			
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {
 		
 		int x = 5;<% %>
        System.out.println("hello,jsp.");
        out.print(x);<%= %>
        out.write("<br>\r\n");
        out.write("    System.out.println(\"hello,jsp.\");\r\n");
        out.write("    <h1>hello,jsp.</h1>\r\n");
}

2. JSP的注释

1、Html注释:<!--注释内容--> --- 可见范围 jsp源码、翻译后的servlet、页面显示html源码。
2、java注释://单行注释  /*多行注释*/ --- 可见范围 jsp 源码翻译后的servlet。
3、jsp注释:<%--注释内容--%> --- 可见范围jsp源码可见。

2.1 jsp标签(动作)

1、页面包含(动态包含):<jsp:include page="被包含的页面"/>
2、请求转发:<jsp:forward page="要转发的资源" />,其实和实际和servlet中的转发是一样的。

2.1.1 静态包含

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

<head>
    <title></title>
</head>
<body>
    <%@ include file="top.jsp"%>
    <hr>
    <h1>主题内容</h1>
</body>
</html>

静态包含的页面top.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>标题栏</title>
</head>
<body>
    <h1>标题栏</h1>
</body>
</html>

静态包含生成的java文件
在这里插入图片描述

2.1.2 动态包含

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>动态包含</title>
</head>
<body>

    <hr>
    <h1>动态包含</h1>
    <hr>
    <jsp:include page="botton.jsp"></jsp:include>
</body>
</html>

动态包含的页面botton.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>底部内容</title>
</head>
<body>
    <h1>底部内容</h1>
</body>
</html>

动态生成的java文件
在这里插入图片描述

2.1.3 静态包含和动态包含图解

在这里插入图片描述

jsp内置/隐式对象(9个)

变量名真实类型描述
pageContextjavax.servlet.jsp.PageContext当前页面共享数据,还可以获取其他八个内置对象。(JSP的页面容器)
requestjavax.servlet.http.HttpServletRequest一次请求访问的多个资源(转发)。
sessionjavax.servlet.http.HttpSession一次会话的多个请求间。(用来保存用户的信息)
applicationjavax.servlet.ServletContext所有用户间共享数据。
responsejavax.servlet.http.HttpServletResponse服务器向客户端的回应信息。
outjavax.servlet.jsp.JspWriter用于页面输出。
configjavax.servlet.ServletConfigServlet的配置对象。
pagejava.lang.Object当前页面(Servlet)的对象 this。
exceptionjava.lang.Throwable表示JSP页面所发生的异常,在错误页中才起作用。

1.out对象

out的类型:JspWriter
out作用就是想客户端输出内容----out.write()
out缓冲区默认8kb 可以设置成0 代表关闭out缓冲区 内容直接写到respons缓冲器

out缓冲区图解
在这里插入图片描述

2. pageContext对象

1.pageContext是一个域对象

setAttribute(String name,Object obj)
getAttribute(String name)
removeAttrbute(String name)

2.pageContext可以向指定的其他域中存取数据

setAttribute(String name,Object obj,int scope)
getAttribute(String name,int scope)
removeAttrbute(String name,int scope)

3.findAttribute(String name)

findAttribute(String name)方法依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不在向后寻找。

4.四大作用域的总结

page域:当前jsp页面范围
request域:一次请求
session域:一次会话
application域:整个web应用

5.可以获得其他8大隐式对象
例如:

pageContext.getRequest()
pageContext.getSession()


这篇关于JavaEE10_JSP的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程