什么是JSP

JSP全名为Java Server Pages,java服务器页面。JSP是一种基于文本的程序,其特点就是HTML和Java代码共同存在

为什么需要JSP

JSP是为了简化Servlet的工作出现的替代品,Servlet输出HTML非常困难,JSP就是替代Servlet输出HTML的。

简单使用一下JSP

  • 在idea下生成一个JSP,我们来看一下JSP长什么样子
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>简单使用JSP</title> </head> <body> </body> </html>

  • 看起来就像一个HTML页面,前面也说了:JSP的特点就是HTML和Java代码共同存在
  • 我们向浏览器输出一句HelloWorld,至于<%%>这个东西,我先不解释!
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>简单使用JSP</title> </head> <body> <% String s = "HelloWorld"; out.println(s); %> </body> </html> 

JSP的工作原理

  • 在Tomcat博客中我提到过:Tomcat访问任何的资源都是在访问Servlet!,当然了,JSP也不例外!JSP本身就是一种Servlet。为什么我说JSP本身就是一种Servlet呢?其实JSP在第一次被访问的时候会被编译为HttpJspPage类(该类是HttpServlet的一个子类)
  • 刚才我简单使用了一下JSP,它被编译成了这么一个Servlet:
package org.apache.jsp;import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import java.util.Date; public final class _1_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory(); private static java.util.List<String> _jspx_dependants; private javax.el.ExpressionFactory _el_expressionfactory; private org.apache.tomcat.InstanceManager _jsp_instancemanager; public java.util.List<String> getDependants() { return _jspx_dependants; } public void _jspInit() { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig()); } public void _jspDestroy() { } public void _jspService(final HttpServletRequest request, final HttpServletResponse response) throws java.io.IOException, ServletException { final PageContext pageContext; HttpSession session = null; final ServletContext application; final ServletConfig config; JspWriter out = null; final Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { response.setContentType("text/html;charset=UTF-8"); 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; out.write("\r\n"); out.write("\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write(" <title>简单使用JSP</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n

JAVA知识积累 JSP第一篇【JSP介绍、工作原理、生命周期、语法、指令、行为】...相关推荐

  1. 【Spring第一篇】ClassPathXmlApplicationContext工作原理

    ClassPathXmlApplicationContext工作原理 创建一个ClassPathXmlApplicationContext类 package com.qx;import org.jso ...

  2. JAVA知识体系之多线程篇

    目录 1.线程概述 1.1 线程的定义 1.2 多线程的优势 1.2.1 更多的处理器核心 1.2.2 更快的响应时间 1.3 多线程的挑战 1.3.1 上下文切换 1.3.2 死锁 1.3.3 资源 ...

  3. JAVA知识体系之数据库篇——MySQL

    目录 1.一条查询语句的执行流程 1.1 MySQL基本架构 1.2 连接层 1.3 服务层 1.3.1 查询缓存 1.3.2 解析器(Parser) 词法解析 语法解析 1.3.3 预处理器(Pre ...

  4. Java小白入门系列 第一篇 写在前面

    2018年8月30日  22:00:17 郑州  多云 Sue Java小白入门系列 第一篇  写在前面 写在前面: 首先声明一下,本人也是正在学Java,并不是多么专业人士,只是最近受老师的启发,所 ...

  5. Redis入门第一篇【介绍、安装】

    tags: Redis title: Redis入门第一篇[介绍.安装] 为什么要用Redis 我对Redis的简单理解:Redis相信学JavaEE的同学都听过这个名词,它是一个缓存数据库. Red ...

  6. Base64系列第一篇 Base64介绍

    本文地址:http://blog.csdn.net/morewindows/article/details/11871429转载请标明出处,谢谢. 欢迎关注微博:http://weibo.com/Mo ...

  7. GraphQL实战-第一篇-GraphQL介绍

    GraphQL实战-第一篇-GraphQL介绍 GraphQL的前世今生 Facebook的业务线有移动端,PC端和其它端,不同的场景下对一个资源所需要的信息是不同的.如移动端需要User的a.b.c ...

  8. Java知识体系之JVM篇

    Java知识体系之JVM篇 目录 博客链接 Java虚拟机知识点总结 https://blog.csdn.net/qq_24095055/article/details/88574017 String ...

  9. 原理剖析(第 009 篇)ReentrantReadWriteLock工作原理分析

    2019独角兽企业重金招聘Python工程师标准>>> 原理剖析(第 009 篇)ReentrantReadWriteLock工作原理分析 一.大致介绍 1.在前面章节了解了AQS和 ...

  10. “约见”面试官系列之常见面试题之第八十八篇之什么是vue生命周期(建议收藏)

    我们知道vue是一个构建数据驱动的 web 界面的渐进式框架,那么vue生命周期是什么呢?本篇文章就给大家来介绍一下vue生命周期的内容,希望可以帮助到有需要的朋友. vue生命周期是什么? Vue生 ...

最新文章

  1. python获取机器唯一标识_开发中常用工具 - 获取设备的唯一标识、UDID、UUID、keychain保存UUID、判断网络...
  2. 又是一个程序员粗心的代码引起频繁FullGC的案例
  3. C语言socket()函数解析(创建套接字)af地址族,ip地址类型(Address Family)INET(Inetnet)PF(Protocol Family)
  4. MSSQL系统常用视图命令及其作用
  5. gitbook新版本 build命令导出的html不能跳转?
  6. Nginx安装手册(摘自入云龙老师教案,亲测可用)
  7. CleanMyMac for mac之偏好设置
  8. 小白浅论JAVA数组中“for加强版”
  9. scala学习-scala读取Hbase表中数据并且做join连接查询
  10. c#编写三角形面积公式_三角形的面积公式二叙
  11. http协议的状态码——400,401,403,404,500,502,503,301,302等常见网页错误代码
  12. 武汉科技大学计算机课程设置,武汉科技大学计算机控制与接口技术课程实施方案.docx...
  13. 人工智能、机器学习、深度学习、神经网络的区别
  14. apdu 移动sim_在Android中将APDU命令发送到USIM / SIM卡
  15. R语言也能玩ps?magick包你值得拥有
  16. 基于android的校园新闻app,移动端校园新闻APP的设计探析
  17. dbeave 安装驱动网络问题失败
  18. 亚马逊账号关联怎么办?多账号如何自查?
  19. [Leetcode] 810. Chalkboard XOR Game 解题报告
  20. 【Windows】右键菜单“新建”选项没有word和excel

热门文章

  1. xhtml文件的后缀名是什么?
  2. SQL数据库对象的修改
  3. IDEA查看Java源码
  4. Linux线程——线程创建和基本使用(多线程并发)
  5. 树状数组c语言模板,【树状数组】Cows (POJ2481) PASCAL 解题报告
  6. Centos 搭建activemq
  7. Mongodb的锁 原子性 隔离性 一致性
  8. 转:【Java集合源码剖析】LinkedHashmap源码剖析
  9. 在VS中编译C++静态库以及使用的方法
  10. 2015结束,2016开始