Jsp和Servlet有什么区别?

文章目录

  • 什么是Servlet?
  • 为什么要用到Servlet?
  • 什么是JSP
  • 为什么需要JSP
  • JSP的工作原理

什么是Servlet?

Servlet其实就是一个遵循Servlet开发的java类。Servlet是由服务器调用的,运行在服务器端。

为什么要用到Servlet?

我们编写java程序想要在网上实现 聊天、发帖、这样一些的交互功能,普通的java技术是非常难完成的。sun公司就提供了Servlet这种技术供我们使用。

什么是JSP

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

为什么需要JSP

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

JSP的工作原理

  • 在Tomcat博客中我提到过:Tomcat访问任何的资源都是在访问Servlet!,当然了,JSP也不例外!JSP本身就是一种Servlet。为什么我说JSP本身就是一种Servlet呢?其实JSP在第一次被访问的时候会被编译为HttpJspPage类(该类是HttpServlet的一个子类)
  • 刚才我简单使用了一下JSP,它被编译成了这么一个Servlet:
作者:Java3y
链接:https://www.zhihu.com/question/37962386/answer/673299207
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。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.HttpJspBaseimplements 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");String s = "HelloWorda";out.println(s);out.write("\r\n");out.write("</body>\r\n");out.write("</html>\r\n");} catch (Throwable t) {if (!(t instanceof SkipPageException)){out = _jspx_out;if (out != null && out.getBufferSize() != 0)try { out.clearBuffer(); } catch (java.io.IOException e) {}if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);}} finally {_jspxFactory.releasePageContext(_jspx_page_context);}}
}
  • 编译过程是这样子的:浏览器第一次请求1.jsp时,Tomcat会将1.jsp转化成1_jsp.java这么一个类,并将该文件编译成class文件。编译完毕后再运行class文件来响应浏览器的请求。
  • 以后访问1.jsp就不再重新编译jsp文件了,直接调用class文件来响应浏览器。当然了,如果Tomcat检测到JSP页面改动了的话,会重新编译的。
  • 既然JSP是一个Servlet,那JSP页面中的HTML排版标签是怎么样被发送到浏览器的?我们来看下上面1_jsp.java的源码就知道了。原来就是用write()出去的罢了。说到底,JSP就是封装了Servlet的java程序罢了。
      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");
  • 有人可能也会问:JSP页面的代码服务器是怎么执行的?再看回1_jsp.java文件,java代码就直接在类中的service()中。
    String s = "HelloWorda";out.println(s);
  • JSP比Servlet更方便更简单的一个重要原因就是:内置了9个对象!内置对象有:out、session、response、request、config、page、application、pageContext、exception,这几个内置对象不在这里讲。现在先知道一下即可!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hdfs java api 权限_HDFS Java API 详解

Hadoop版本&#xff1a; Hadoop 2.6.0连接HDFSString URL"hdfs://hadoop001:9000";Configuration conf new Configuration();conf.set("fs.defaultFS", URL);FileSystem fs FileSystem.get(conf);上传文件到HDFS//获取本地文件的输入流FileInputStream …

Tomcat就是这么简单

什么是Tomcat Tomcat简单的说就是一个运行JAVA的网络服务器&#xff0c;底层是Socket的一个程序&#xff0c;它也是JSP和Serlvet的一个容器。 为什么我们需要用到Tomcat 如果你学过html&#xff0c;css&#xff0c;你会知道你写的页面只能自己访问&#xff0c;别人不能远程访…

java if两个条件_java(3) if结构

一、基本if结构1、流程图1)输入输出2)判断和分支3) 流程线1.1 简单的if条件判断if(表达式){//表达式为true&#xff0c;执行&#xff5b;&#xff5d;中的代码}示例1&#xff1a;如果张三的Java成绩大于98分&#xff0c;那么老师奖励他一个MP4。1 public classPractice1 {2 pu…

Servlet第一篇【介绍Servlet、HTTP协议、WEB目录结构、编写入门Servlet程序、Servlet生命周期】

什么是Servlet&#xff1f; Servlet其实就是一个遵循Servlet开发的java类。Servlet是由服务器调用的&#xff0c;运行在服务器端。 为什么要用到Servlet&#xff1f; 我们编写java程序想要在网上实现 聊天、发帖、这样一些的交互功能&#xff0c;普通的java技术是非常难完成…

java kafka 分区_Java kafka如何实现自定义分区类和拦截器

生产者发送到对应的分区有以下几种方式&#xff1a;(1)指定了patition&#xff0c;则直接使用&#xff1b;(可以查阅对应的java api, 有多种参数)(2)未指定patition但指定key&#xff0c;通过对key的value进行hash出一个patition&#xff1b;(3)patition和key都未指定&#xff…

Servlet第三篇【request和response简介、response的常见应用】

response、request对象 Tomcat收到客户端的http请求&#xff0c;会针对每一次请求&#xff0c;分别创建一个代表请求的request对象、和代表响应的response对象 既然request对象代表http请求&#xff0c;那么我们获取浏览器提交过来的数据&#xff0c;找request对象即可。respon…

strip string java_Java StringUtils.strip方法代码示例

import org.apache.commons.lang.StringUtils; //导入方法依赖的package包/类public static void copyResourceFolder(String resourceFolder, String destDir)throws IOException {final File jarFile new File(Util.class.getProtectionDomain().getCodeSource().getLocatio…

spring三种注入方式

设置Spring的作用域 或者使用枚举值设置 单例和多里使用场景 自动注入 Primary 一个接口有多个实现被spring管理吗&#xff0c;在依赖注入式&#xff0c;spring会不知道注入哪个实现类就会抛出NoUniqueBeanDefinitionException异常 使用Primary 来告诉Spring 注入哪个实现…

java虚拟机1.7_《Java虚拟机原理》7.1 精选 —— 总览

1.一个程序在 JVM 中运行的完整流程java程序执行流程.JPG说明&#xff1a;① 类加载器把字节码加载到方法区② 方法区的字节码被 JVM new&#xff0c;在堆内存中生成字节码对象③ 字节码对象被 GC 的要求有&#xff1a;该类没有在其他任何地方被引用&#xff1b;该类的所有的实…

Servlet第四篇【request对象常用方法、应用】

什么是HttpServletRequest HttpServletRequest对象代表客户端的请求&#xff0c;当客户端通过HTTP协议访问服务器时&#xff0c;HTTP请求头中的所有信息都封装在这个对象中&#xff0c;开发人员通过这个对象的方法&#xff0c;可以获得客户这些信息。 简单来说&#xff0c;要…

java 设置控制台标题_修改Tomcat控制台标题以及标题乱码处理

双击“startup.bat”启动Tomcat&#xff0c;控制台默认标题是Tomcat&#xff0c;如下图&#xff1a;修改标题很容易&#xff0c;编辑catalina.bat这个文件(跟startup.bat在同级目录下)&#xff0c;编辑的时候建议使用notepad、editplus之类的工具。然后找到如下代码片段(大约在…

Servlet第五篇【介绍会话技术、Cookie的API、详解、应用】

什么是会话技术 基本概念: 指用户开一个浏览器&#xff0c;访问一个网站,只要不关闭该浏览器&#xff0c;不管该用户点击多少个超链接&#xff0c;访问多少资源&#xff0c;直到用户关闭浏览器&#xff0c;整个这个过程我们称为一次会话. 为什么我们要使用会话技术&#xff1…

mysql 视图sql_SQL的视图

1、什么是视图视图是虚拟的表&#xff0c;是一个存储的查询&#xff0c;虽然不需要实际的物理存储&#xff0c;但是也被看作是一个数据库对象&#xff1b;它与包含数据的表不一样&#xff0c;它不包含任何列或数据&#xff0c;它只是包含使用时动态检索数据的查询&#xff0c;并…

Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】

什么是Session Session 是另一种记录浏览器状态的机制。不同的是Cookie保存在浏览器中&#xff0c;Session保存在服务器中。用户使用浏览器访问服务器的时候&#xff0c;服务器把用户的信息以某种的形式记录在服务器&#xff0c;这就是Session 如果说Cookie是检查用户身上的”…

java 异步阻塞_大白话搞懂什么是同步/异步/阻塞/非阻塞

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼前言在最近的一些面试中&#xff0c;跟应聘者聊了比较多关于“同步/异步&#xff0c;阻塞/非阻塞”相关的话题&#xff0c;发现大家对于这些概念的理解都比较模糊&#xff0c;甚至有的同学会反问“他们不就是同一个东西吗&#xff…

python 3.9.0a0_Python 3.9.0 稳定版发布

IT之家10月6日消息据网友投递&#xff0c;Python 3.9.0 稳定版(Python 3.9.0 final)昨日正式发布&#xff0c;它包含许多新功能和优化&#xff0c;禁止在Windows 7上安装&#xff0c;且默认提供64位安装程序。IT之家了解到&#xff0c;Python 3.9.0 alpha 1首个迭代版本于2019 …

Tomcat+Servlet面试题都在这里

下面是我整理下来的Servlet知识点: 图上的知识点都可以在我其他的文章内找到相应内容。 Tomcat常见面试题 Tomcat的缺省端口是多少&#xff0c;怎么修改 找到Tomcat目录下的conf文件夹进入conf文件夹里面找到server.xml文件打开server.xml文件在server.xml文件里面找到下列…

java sdk下载_Java Sdk下载 | 保利威帮助中心

播放界面开发前准备1.小程序微信开发者后台设置-开发设置-服务器域名中配置 [request合法域名]开始开发1.获取频道直播播放地址index.wxmlindex.js选项说明uid类型&#xff1a;String说明&#xff1a;直播账户idvid类型&#xff1a;String说明&#xff1a;直播频道idvideoConte…

mysql union 与 union all 语法及用法

1.mysql union 语法 mysql union 用于把来自多个select 语句的结果组合到一个结果集合中。语法为&#xff1a; select column,......from table1union [all]select column,...... from table2...在多个select 语句中&#xff0c;对应的列应该具有相同的字段属性&#xff0c…

java反射 获取方法参数名_java 反射借助 asm 获取参数名称最优雅简单的方式

背景说明最近写反射相关的代码&#xff0c;想获取对应的参数名称&#xff0c;却发现没有特别好的方式。jdk7 及其以前&#xff0c;是无法通过反射获取参数名称的。jdk8 可以获取&#xff0c;但是要求指定 -parameter 启动参数&#xff0c;限制较多。期间尝试过类似于 Mybatis 使…