JavaWeb——jsp原理
一、引言
一句话:jsp本质就是一个servlet。
程序员在开发过程中,发现Servlet做界面非常不方便,所以产生了jsp技术。JSP其实是对Servlet进行了包装而已。
jsp + Java类(service、javabean)+ servlet,就会构成mvc的开发模式,mvc模式是目前软件公司中相当通用的开发模式。
二、JSP
JSP工作原理:
当客户端浏览器向服务器请求一个 JSP 页面时,服务器收到该请求后,首先检查所请求的这个JSP 文件内容 ( 代码 ) 是否已经被更新,或者是否是 JSP 文件创建后的第一次被访问:
1. 如果是,那么,这个 JSP 文件就会在服务器端的 JSP 引擎作用下转化为一个 Servlet 类的 Java 源代码文件,这个 Servlet 类会在 Java 编译器的作用下被编译成一个字节码文件,并装载到 jvm 解释执行。剩下的就等同于 Servlet 的处理过程了。
2. 如果被请求的 JSP 文件内容 ( 代码 ) 没有被修改,那么它的处理过程也等同于一个 Servlet 的处理过程。即直接由服务器检索出与之对应的 Servlet 实例来处理。
需要注意的是,JSP 文件不是在服务器启动的时候转换成 Servlet 类的。而是在被客户端访问的时候才可能发生转换的 ( 如 JSP 文件内容没有被更新等,就不再发生 Servlet 转换 )。就 Tomcat 而言,打开目录 %Tomcat%/work/%您的工程文件目录%,然后会看到里面有 3个子目录:org/apache/jsp,若没有这 3 个目录,说明项目的 JSP 文件还没有被访问过,打开进到 jsp 目录下,会看到一些 *_jsp.java 和 *_jsp.class 文件,这就是 JSP 文件被转换成Servlet 类的源文件和字节码文件了。
jsp文件
<%@page import="java.util.Date"%>
<%@page language="java" pageEncoding="UTF-8"%>
<!-- lanuage表示嵌在JSP的的片段语言是什么,pageEncoding表示本页面的编码方式是什么 --><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>showTime</title><!-- 控制让浏览器不要缓存 --><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <!-- keywords是让搜索引擎看的 --> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"></head><body><% // 在<% 之间可以写我们的Java代码,就和我们在Java文件中写Java代码是一样的// 为什么可以直接使用out对象,因为out是jsp的内置对象// 内置对象就是不需要我们创建就能使用的对象,jsp有9大内置对象out.println("当前时间是:"+new Date().toLocaleString());%></body>
</html>
对应转换的servlet类中_jspService方法
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)throws java.io.IOException, javax.servlet.ServletException {final java.lang.String _jspx_method = request.getMethod();
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
return;
}final javax.servlet.jsp.PageContext pageContext;javax.servlet.http.HttpSession session = null;final javax.servlet.ServletContext application;final javax.servlet.ServletConfig config;javax.servlet.jsp.JspWriter out = null;final java.lang.Object page = this;javax.servlet.jsp.JspWriter _jspx_out = null;javax.servlet.jsp.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("<!-- lanuage表示嵌在JSP的的片段语言是什么,pageEncoding表示本页面的编码方式是什么 -->\r\n");out.write("\r\n");out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");out.write("<html>\r\n");out.write(" <head>\r\n");out.write(" <title>showTime</title>\r\n");out.write(" <!-- 控制让浏览器不要缓存 -->\r\n");out.write("\t<meta http-equiv=\"pragma\" content=\"no-cache\">\r\n");out.write("\t<meta http-equiv=\"cache-control\" content=\"no-cache\">\r\n");out.write("\t<meta http-equiv=\"expires\" content=\"0\"> \r\n");out.write("\t<!-- keywords是让搜索引擎看的 --> \r\n");out.write("\t<meta http-equiv=\"keywords\" content=\"keyword1,keyword2,keyword3\">\r\n");out.write("\t<meta http-equiv=\"description\" content=\"This is my page\">\r\n");out.write(" </head>\r\n");out.write(" <body>\r\n");out.write(" ");// 在<% 之间可以写我们的Java代码,就和我们在Java文件中写Java代码是一样的// 为什么可以直接使用out对象,因为out是jsp的内置对象// 内置对象就是不需要我们创建就能使用的对象,jsp有9大内置对象out.println("当前时间是:"+new Date().toLocaleString());out.write("\r\n");out.write(" </body>\r\n");out.write("</html>\r\n");} catch (java.lang.Throwable t) {if (!(t instanceof javax.servlet.jsp.SkipPageException)){out = _jspx_out;if (out != null && out.getBufferSize() != 0)try {if (response.isCommitted()) {out.flush();} else {out.clearBuffer();}} catch (java.io.IOException e) {}if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);else throw new ServletException(t);}} finally {_jspxFactory.releasePageContext(_jspx_page_context);}}
三、总结
- JSP历史与作用
- JSP工作原理
- JSP与对应servlet类分析
JavaWeb——jsp原理相关推荐
- javaweb学习总结(十四)——JSP原理
一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...
- javaweb学习总结(十四):JSP原理
一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...
- javaweb实训第三天下午——Web基础-Servlet交互JSP原理及运用
1.课程介绍 Servlet三大职责: (掌握) Servlet重定向和请求转发: (掌握) JSP介绍: (了解) JSP语法: (掌握) JSP三大指令: (掌握)) JSP九大内置对象: (了解 ...
- JavaWeb的JSP原理,详细解析(建议收藏)
JSP 什么时jsp Java Servlet Pages:Java服务器页面,也和Servlet一样,用于动态Web技术! 最大的特点: 写JSP就像在写HTML 区别 HTML只给用户提供静态的数 ...
- JavaWeb之JSP原理
1.为什么需要JSP? 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变.如果使用Servlet程序来输出只有局部内容需要改动的网页,其中所有的静态内容也需要程序员用jav ...
- Java-Web JSP、Cookie和Session域对象
一.JSP入门 1.什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态资源.它与html页面的作用是相同的,显示数据和获取数据. 2.JSP的组成 JSP = h ...
- web.xml、JSP原理、指令
web应用和web.xml JSP(java server page)本质是servlet,因为JSP最终要编译成servlet才能运行. Tomcat的webapps路径下的web项目中的WEB-I ...
- 基于javaweb+jsp的医院住院管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)
基于javaweb+jsp的医院住院管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap) JavaWeb JavaBean JSP MVC ...
- 基于javaweb+jsp的设备维修管理系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot)
基于javaweb+jsp的设备维修管理系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot) JavaWeb JavaBean JSP MVC ...
最新文章
- Lync server 2013 之office web apps server 搭建步骤
- Java 8 开发的 4 大顶级技巧,你都知道吗 ?
- Visual Basic 2005 - 如何将色彩字符串转换成 Color 结构
- ibm服务器imm管理方式简介
- 【Python】青少年蓝桥杯_每日一题_8.27_因数个数
- JavaScriptWindow使用对象
- jzoj6451-[2020.01.19NOIP提高组]不幸运数字【记忆化搜索,数位dp,高精度】
- mysql 连续签到天数_签到功能实现,没有你想的那么复杂(一)
- 常见的股票技术因子学习以及计算
- 不同网段的PC与交换机的原理
- IOS开发网络篇之──ASIHTTPRequest详解
- python爬虫淘宝评论图片_淘宝上的图片是怎么被爬取的
- 【福利】论机房如何关闭方正软件保护卡
- 周爱民:详解架构的核心原则
- 自从我使用HiFlow场景连接器后,在也不用担心成为“落汤鸡”了
- 安装ps时无法验证订阅状态_如何解决:Office 无法验证此应用程序的许可证
- 语言-汉语-官话-中原官话-兖菏片:兖菏片
- android 1.5 app,萌新编程app
- html实现下拉跳转
- overflow的用法(auto)
热门文章
- java中有哪几种访问修饰符_Java语言中有4种访问修饰符
- java方法中与参数怎么调用,java中怎么从一个方法中调用另一个方法中的参数?(以及如何提取数字)...
- 盒子阴影(HTML、CSS)
- 表单标签 input
- input file 上传图片判断图片的宽高尺寸
- mfc之CPtrArray数组
- ubuntu解决安装Scrapy库时报x86_64-linux-gnu-gcc错误
- python如何运行一个python程序_python如何运行?第一个python小程序示范
- 为springboot项目添加springboot-admin监控
- FreeRTOS之Tracealyzer for FreeRTOS(FreeRTOS+Trace) 详解(源码解析+移植)