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. Comparator的compare方法如何定义升序降序

    最近做算法题用了Comparator接口下的compare方法,思考了一下升序和降序的规则是如何来的,现在做一个补充,方便以后回顾.  升序代码 public static void main(Str ...

  2. SpringMVC(11)表单标签

    本篇我们来学习Spring MVC表单标签的使用,借助于Spring MVC提供的表单标签可以让我们在视图上展示WebModel中的数据更加轻松. 一.首先我们先做一个简单了例子来对Spring MV ...

  3. <c:out>标签不能正确输出value中的值

    问题: 我打算在jsp中输出request中的值,它的key为username, <c:out value="${requestScope.username}"/> 但 ...

  4. Leetcode No.27 Remove Element(c++实现)

    1. 题目 1.1 英文题目 Given an integer array nums and an integer val, remove all occurrences of val in nums ...

  5. esp32 Guru Meditation 错误解决方案(转)

    Guru Meditation本节将对打印在 Guru Meditation Error: Core panic'ed后面括号中的致错原因进行逐一解释.IllegalInstruction此 CPU ...

  6. 谷粒商城--分布式基础篇(P1~P27)

    谷粒商城--分布式基础篇P1~P27 去年3月份谷粒商城分布式基础.进阶.高级刚出的时候就开始学了,但是中途因为一些事就中断了,结果一直到现在才有时间重新开始学,看到现在网上这么多人都学完了,确实感觉 ...

  7. 获取操作系统OS等相关信息

    问题一:Windows SDK 8.1版本中的VersionHelper.h文件当中没有IsWindows10ORGreater,所以当你用IsWindows8Point1ORGreater判断出版本 ...

  8. 从零搭建一个IdentityServer——资源与访问控制

    IdentityServer作为授权服务器它的最终目的是用于对资源进行管控,这里所说的资源有两种,其一是API资源,实际上也就是OIDC协议中客户端(RP)所需要访问的一系列受保护的资源(API),授 ...

  9. svo论文随手记

    论文链接:http://rpg.ifi.uzh.ch/docs/ICRA14_Forster.pdf 论文提出了一种半直接单目视觉里程计,在精确性.鲁棒性和速度方面都有较大的优势.将基于特征的方法(包 ...

  10. js树形数据结构的扁平化

    前面我们封装了一维数组(具备树形结构相关属性)处理成树形结构的方法:https://www.cnblogs.com/coder--wang/p/15013664.html 接下来我们来一波反向操作,封 ...