JSP

JSP简介

JSP指的是 JavaServerPages ,Java服务器端页面,也和Servlet一样,用来开发动态web

JSP页面中可以嵌入java代码为用户提供动态数据

JSP原理

JSP是如何执行的?浏览器在访问java资源其实访问的都是Servlet

JSP最终也会被转换为一个java类,JSP一般会继承HttpJspBase而HttpJspBase继承了HttpServlet,所以Jsp本质上也是个Servlet

public void _jspInit() {}			//初始化

public void _jspDestroy() {}	//销毁

public void _jspService(HttpServletRequest request, HttpServletResponse response)		//响应

在IDEA中的tomcat的index_jsp.java文件内中大致有如下内容

1、判断请求

if (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
final java.lang.String _jspx_method = request.getMethod();
if ("OPTIONS".equals(_jspx_method)) {
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
return;
}
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)) {
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET, POST or HEAD. Jasper also permits OPTIONS");
return;
}

2、初始化9个内置对象

final javax.servlet.jsp.PageContext pageContext;		//页面上下文
javax.servlet.http.HttpSession session = null; //session
final javax.servlet.ServletContext application; //applicationcontext
final javax.servlet.ServletConfig config; //config
javax.servlet.jsp.JspWriter out = null; //out
final java.lang.Object page = this; //当前页面
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
HttpServletRequest request //请求
HttpServletResponse response //响应

3、输出页面前增加的代码

对内置类对象赋值。以下对象可以在jsp页面内直接使用

response.setContentType("text/html");							//设置contentype
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;

在jsp文件中<% %>内可以写java代码,在<% %> java代码会原封不动的输出,如果是html代码会被out.write("html代码")这种形式进行输出最终一起构造成了jsp页面。

其实JSP中的内容大致就是java代码,内置了9个对象方便我们调用,然后加上out.write()中输出html代码,两者合在一起构造一个jsp文件,并且可以实现动态的与服务器端进行交互。

JSP基础语法

1、JSP表达式

<%= 变量或表达式%>当然这里也可以用EL表达式${变量或表达式}将其值取出。

<%--JSP表达式
作用:用来讲程序的输出,输出到客户端页面上
<%= 变量或表达式%>
--%>
<%= new java.util.Date() %>

2、JSP脚本片段

<% 脚本片段 %>

<%--JSP脚本片段--%>
<%
int sum = 0;
for (int i = 0; i < 100; i++) {
sum = sum+i;
}
out.println("<h3>sum=" + sum + "</h3>");
%>

3、在代码中嵌入html元素

<%--在代码中嵌入html元素--%>
<%
for (int i = 0; i < 5; i++) { %>
<h3>Hello,JSP <%=i%></h3>
<%
}
%>

JSP声明 <%! >

<%!
static {
System.out.println("静态代码块");
} private String globalVal = "Zh1z3ven"; public void zh1z3ven(){
System.out.println("进入了方法" + globalVal);
}
%>

JSP声明会被编译到JSP生成饿Java类中。而上面其他三种会被生成到_jspService()方法中。

JSP指令 <%@ %>

JSP常用指令:如上图 基本就三个

<%@ page errorPage="/error/500.jsp" %>		//指向自定义的报错页面
<%@ page isErrorPage="true" %> //是否为错误页面
<%@ include file="common/header.jsp"%> //在该位置包含jsp文件
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> //导入JSTL核心标签库

自定义错误页面

<%@ page errorPage="/error/500.jsp" %>		//指向自定义的报错页面
<%@ page isErrorPage="true" %> //是否为错误页面

Web.xml

<error-page>
<error-code>500</error-code>
<location>/error/500.jsp</location>
</error-page>

包含文件

指令形式:

<%@ include file="common/header.jsp"%>		//在该位置包含jsp文件

jsp标签形式:

<jsp:include page="common/footer.jsp"></jsp:include>

test01.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page errorPage="/error/500.jsp" %>
<%@ include file="common/header.jsp"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
out.println("<h1>" + "我是主体内容" + "</h1>");
%>
<%@ include file="common/footer.jsp"%>
</body>
</html>

jsp标签形式和jsp指令形式去做包含是有区别的。jsp指令形式会将要包含的内容用out.print()或者out.write()与当前页面合二为一。而jsp标签形式是直接拿到这个jsp文件,在html标签处去拼接页面。一般会用jsp标签形式

9大内置对象

  • PageContext 存东西
  • Request 存东西
  • Response
  • Session 存东西
  • Application 【ServletContext】 存东西
  • config 【ServletConfig】
  • out
  • page
  • Exception

存储属性

<%--内置对象--%>
<%-- 4个存东西的对象--%>
<% pageContext.setAttribute("name1", "Zh1z3ven1"); //保存的数据在一个页面中有效
request.setAttribute("name2", "Zh1z3ven2"); //保存的数据在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3", "Zh1z3ven3"); //保存的数据在一次会话中有效,从打开浏览器到关闭
application.setAttribute("name4", "Zh1z3ven4"); //保存的数据在服务器中有效,服务器崩了才丢数据
%>

其中 pagecontext的作用域是在当前页面上下文,request的作用域是一次请求中,后面的session和application算是最大的了

作用域从低到高:pageContext ==> request ==> session ==> application

比如在另一个jsp页面 就取不到pageContext和request设置的setAttribute。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body> <%--内置对象--%>
<%-- 4个存东西的对象--%>
<% pageContext.setAttribute("name1", "Zh1z3ven1"); //保存的数据在一个页面中有效
request.setAttribute("name2", "Zh1z3ven2"); //保存的数据在一次请求中有效,请求转发会携带这个数据
session.setAttribute("name3", "Zh1z3ven3"); //保存的数据在一次会话中有效,从打开浏览器到关闭
application.setAttribute("name4", "Zh1z3ven4"); //保存的数据在服务器中有效,服务器崩了才丢数据
%> <%
//通过find寻找到Attribute
String name1 = (String) pageContext.findAttribute("name1");
String name2 = (String) pageContext.findAttribute("name2");
String name3 = (String) pageContext.findAttribute("name3");
String name4 = (String) pageContext.findAttribute("name4");
String name5 = (String) pageContext.findAttribute("name5"); //不存在
%> <%--EL表达式输出 ${}}--%>
<h1>取出的值为:</h1>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
<h3>${name5}</h3> </body>
</html>

Java之JSP的更多相关文章

  1. java的JSP技术

    java的JSP技术 [toc] 1.JSP简介 Jsp技术是用来开发java web的页面显示的,所有MVC模型里面的视图层,所以视图层的开发 jsp不是编程语言,三个英文是java server ...

  2. java之jsp页面语法

    jsp页面相比静态页面html来说,就是多了一些脚本,利用这些脚本来动态地改变页面内容的显示. 1.JSP脚本写法 <% 这里写java代码; %> <%! JSP声明,用来声明变量 ...

  3. Java基础——JSP(一)

    一.JSP的由来 在很多动态网页中,绝大多部分内容是不变的,只有局部内容需要动态产生和改变.例如, 一个新闻的浏览次数,只有这个次数是动态改变的,而Servlet程序返回客户端的代码全是java程序动 ...

  4. JAVA记录-JSP内容

    JSP(JavaServer Pages )是什么? JavaServer Pages(JSP)是一种支持动态内容开发的网页技术它可以帮助开发人员通过利用特殊的JSP标签,其中大部分以<%开始并 ...

  5. Java 和 JSP 实现网站访问量统计 (刷新过滤)

    java 和 JSP 实现的统计网站访问量,不需要数据库,将数据存储在 指定位置的 txt 文件中,代码块分为两部分 首先, java 部分: import java.io.File; import ...

  6. Java EE JSP内置对象及表达式语言

    一.JSP内置对象 JSP根据Servlet API规范提供了一些内置对象,开发者不用事先声明就可使用标准变量来访问这些对象. JSP提供了9种内置对象: (一).request 简述: JSP编程中 ...

  7. 常见指令与功能介绍-java之JSP学习第二天(非原创)

    文章大纲 一.JSP 指令二.JSP 动作元素三.JSP 隐式对象四.JSP 客户端请求五.JSP 服务器响应六.JSP HTTP 状态码七.JSP 表单处理八.JSP 过滤器九.JSP Cookie ...

  8. 杂项-Java:JSP

    ylbtech-杂项-Java:JSP 1.返回顶部 1. JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Micros ...

  9. Java开源JSP标签库

    01displytag 与Struts结合使用最出名的一个tag主要是显示表格数据很漂亮.完善. 02cewolf tag 用来在web上显示复杂图形报表的一个jsp tag. 03Loading T ...

  10. java:JSP(JSPWeb.xml的配置,动态和静态导入JSP文件,重定项和请求转发,使用JSP实现数据库的增删改查实例)

    1.JSP的配置: <%@ page language="java" import="java.util.*" pageEncoding="UT ...

随机推荐

  1. 我通过调试ConcurrentLinkedQueue发现一个IDEA的小虫子(bug), vscode复现, eclipse毫无问题

    前言: 本渣渣想分析分析Doug Lea大佬对高并发代码编写思路, 于是找到了我们今天的小主角ConcurrentLinkedQueue进行鞭打, 说实话草稿我都打好了, 就差临门一脚, 给踢折了 直 ...

  2. PL/SQL语法

    PL/SQL语法 由于pl/sql是编译后执行的,而sql语句是未经编译的,因此pl/sql语句在执行速度上更快,同时也减少了客户机和服务器的传输. 基本结构 DECLARE 声明变量.常量.用户定义 ...

  3. mongodb数据的导出导入

    1.[导出]mongoexport -h (主机名) -d (库) -c (集合名) -o (路径) -u (账号) -p (密码)示例:mongoexport -h localhost -d jav ...

  4. HMM实现中文分词

    链接:https://pan.baidu.com/s/1uBjLC61xm4tQ9raDa_M1wQ  提取码:f7l1 推荐:https://blog.csdn.net/longgb123/arti ...

  5. 使用Hugo框架搭建博客的过程 - 主题配置

    前言 博客部署完成后,恭喜你可以发表第一篇:Hello world!但是LoveIt这么好用的主题,不配置一番可惜了. 基本功能配置 主题配置最好参考已有的配置,比如LoveIt作者写的介绍,还有主题 ...

  6. Django基础012--接口开发

    全局参数(get,post,put,delete) 接口:/api/parameter GET:获取全局参数的所有数据 POST:创建全局参数 PUT:更新全局参数 DELETE:删除全局参数 1.创 ...

  7. 00JAVA语法基础_六位验证码 01

    在网上看了许多的源程序,涉及到的东西也不太一样,多了图形处理的,由于还没理解太明白,只是做了控制台. package Six_Code; import java.util.Random; import ...

  8. Pytorch系列:(七)模型初始化

    为什么要进行初始化 首先假设有一个两层全连接网络,第一层的第一个节点值为 \(H_{11}= \sum_{i=0}^n X_i*W_{1i}\), 这个时候,方差为 \(D(H_{11}) = \su ...

  9. java高级编程笔记(四)

    java的Object类: 1.Object 类位于 java.lang 包中,编译时会自动导入:Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法. 2.Object ...

  10. Python自动化测试面试题-编程篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...