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. Centos中安装Node.Js

    NodeJs安装有好几种方式: 第一种: 最简单的是用yum命令,可惜我现在用的时候 发现 镜像中没有nodejs:所以这种方式放弃: 第二种:去官网下载源码,然后自己编译:编译过程中可能会出现问题, ...

  2. IDEA+Hadoop2.10.1+Zookeeper3.4.10+Hbase 2.3.5 操作JavaAPI

    在此之前要配置好三节点的hadoop集群,zookeeper集群,并启动它们,然后再配置好HBase环境 本文只是HBase2.3.5API操作作相应说明,如果前面环境还没有配置好,可以翻看我之前的博 ...

  3. Android Binder 进程间通讯机制梳理

    什么是 Binder ? Binder是Android系统中进程间通讯(IPC)的一种方式,也是Android系统中最重要的特性之一.Binder的设计采用了面向对象的思想,在Binder通信模型的四 ...

  4. tr 字符转换命令

    tr:可以用来删除一段信息当中的文字,或者是进行文字信息的替换 语法:tr [parameter] set1 ...参数: -d:删除信息当中的set1这个字符 -s:替换掉重复的字符 举例: 将la ...

  5. 基于Flink构建全场景实时数仓

    目录: 一. 实时计算初期 二. 实时数仓建设 三. Lambda架构的实时数仓 四. Kappa架构的实时数仓 五. 流批结合的实时数仓 实时计算初期 虽然实时计算在最近几年才火起来,但是在早期也有 ...

  6. Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)

    selenium操作chrome浏览器需要有ChromeDriver驱动来协助.webdriver中关浏览器关闭有两个方法,一个叫quit,一个叫close. 1 /** 2 * Close the ...

  7. 没事就要多做多练,Shell脚本循环例题做一做

    Shell脚本循环例题                 一.示例1                 二.示例2                 三.示例3                 四.示例4 ...

  8. SELECT SQL

    替换换行符: update qgnews set article_url=REPLACE(article_url,char(10),'') 替换回车符: update qgnews set artic ...

  9. c语言:scanf()高级应用

    1) 指定读取长度 还记得在 printf() 中可以指定最小输出宽度吗?就是在格式控制符的中间加上一个数字,例如,%10d表示输出的整数至少占用 10 个字符的位置: 如果整数的宽度不足 10,那么 ...

  10. python sqlite3 类

    import sys import os import sqlite3 ##sys.path.append(os.path.abspath(os.path.dirname(__file__) + '/ ...