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个)
变量名 | 真实类型 | 描述 |
---|---|---|
pageContext | javax.servlet.jsp.PageContext | 当前页面共享数据,还可以获取其他八个内置对象。(JSP的页面容器) |
request | javax.servlet.http.HttpServletRequest | 一次请求访问的多个资源(转发)。 |
session | javax.servlet.http.HttpSession | 一次会话的多个请求间。(用来保存用户的信息) |
application | javax.servlet.ServletContext | 所有用户间共享数据。 |
response | javax.servlet.http.HttpServletResponse | 服务器向客户端的回应信息。 |
out | javax.servlet.jsp.JspWriter | 用于页面输出。 |
config | javax.servlet.ServletConfig | Servlet的配置对象。 |
page | java.lang.Object | 当前页面(Servlet)的对象 this。 |
exception | java.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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?