Java之JSP
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的更多相关文章
- java的JSP技术
java的JSP技术 [toc] 1.JSP简介 Jsp技术是用来开发java web的页面显示的,所有MVC模型里面的视图层,所以视图层的开发 jsp不是编程语言,三个英文是java server ...
- java之jsp页面语法
jsp页面相比静态页面html来说,就是多了一些脚本,利用这些脚本来动态地改变页面内容的显示. 1.JSP脚本写法 <% 这里写java代码; %> <%! JSP声明,用来声明变量 ...
- Java基础——JSP(一)
一.JSP的由来 在很多动态网页中,绝大多部分内容是不变的,只有局部内容需要动态产生和改变.例如, 一个新闻的浏览次数,只有这个次数是动态改变的,而Servlet程序返回客户端的代码全是java程序动 ...
- JAVA记录-JSP内容
JSP(JavaServer Pages )是什么? JavaServer Pages(JSP)是一种支持动态内容开发的网页技术它可以帮助开发人员通过利用特殊的JSP标签,其中大部分以<%开始并 ...
- Java 和 JSP 实现网站访问量统计 (刷新过滤)
java 和 JSP 实现的统计网站访问量,不需要数据库,将数据存储在 指定位置的 txt 文件中,代码块分为两部分 首先, java 部分: import java.io.File; import ...
- Java EE JSP内置对象及表达式语言
一.JSP内置对象 JSP根据Servlet API规范提供了一些内置对象,开发者不用事先声明就可使用标准变量来访问这些对象. JSP提供了9种内置对象: (一).request 简述: JSP编程中 ...
- 常见指令与功能介绍-java之JSP学习第二天(非原创)
文章大纲 一.JSP 指令二.JSP 动作元素三.JSP 隐式对象四.JSP 客户端请求五.JSP 服务器响应六.JSP HTTP 状态码七.JSP 表单处理八.JSP 过滤器九.JSP Cookie ...
- 杂项-Java:JSP
ylbtech-杂项-Java:JSP 1.返回顶部 1. JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Micros ...
- Java开源JSP标签库
01displytag 与Struts结合使用最出名的一个tag主要是显示表格数据很漂亮.完善. 02cewolf tag 用来在web上显示复杂图形报表的一个jsp tag. 03Loading T ...
- java:JSP(JSPWeb.xml的配置,动态和静态导入JSP文件,重定项和请求转发,使用JSP实现数据库的增删改查实例)
1.JSP的配置: <%@ page language="java" import="java.util.*" pageEncoding="UT ...
随机推荐
- Leetcode No.122 Best Time to Buy and Sell Stock II Easy(c++实现)
1. 题目 1.1 英文题目 You are given an array prices where prices[i] is the price of a given stock on the it ...
- (学习心路历程)Vue过渡/动画 VS. 过渡/动画
[此篇为本人的个人见解和哔哔赖赖,如果有观点不对的地方,还请大家指出来哇!!] 最近实习在做一个项目,里面应用的动画效果还蛮复杂的,因为本身对Vue框架比较熟悉,所以最终选择了Vue框架. 自己之前从 ...
- SpringBoot自动装配原理之Configuration以及@Bean注解的使用
Configuration以及Bean注解的使用 该知识点在Spring中应该学过,没有学过或者遗忘的的朋友需要预习或温习前置知识点.SpringBoot其实就是Spring的进一步简化,所以前置知识 ...
- GitBook在Windows上安装及使用
GitBook是基于Nodejs,使用Git/Github和Markdown制作电子书的命令行工具. 1.安装Nodejs 首先,安装Nodejs,官网地址:https://nodejs.org/en ...
- C语言的编译与链接
C语言源文件要经过编译.链接才能生成可执行程序:编译(Compile)会将源文件(.c文件)转换为目标文件.对于 VC/VS,目标文件后缀为.obj:对于GCC,目标文件后缀为.o.编译是针对单个源文 ...
- JPA用法中字段起名规范
前两天在学习Springboot使用JPA 来操作数据库时,碰到一个问题,最终发现了JPA写法中表字段名称要写规范. 记录下来提醒自己. CityEntity是一个City的实体类. 1 @Table ...
- android10Binder(五)java世界的binder:AndroidFramework
java世界的binder:AndroidFramework 目录 java世界的binder:AndroidFramework 一.前言 二.SystemServer进程的open.mmap 三.A ...
- Fastjson使用示例及常见问题(九)
一.介绍 1. 什么是fastjson? fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化 ...
- mysql为什么用b+树做索引
关键字就是key的意思 一.B-Tree的性质 1.定义任意非叶子结点最多只有M个儿子,且M>2: 2.根结点的儿子数为[2, M]: 3.除根结点以外的非叶子结点的儿子数为[M/2, M]: ...
- Adaptive AUTOSAR 学习笔记 10 - 执行管理
本系列学习笔记基于 AUTOSAR Adaptive Platform 官方文档 R20-11 版本 AUTOSAR_EXP_PlatformDesign.pdf 缩写 EM:Execution Ma ...