JSP为什么会出现?出现的原因?

  ①因为在开发web网站时候,返现servlet做界面比较麻烦,于是出现了jsp。

  运行在服务端(Java server pages)基于servlet,对servlet进行包装。综合技术。

  原理:

  jsp其实是一种特殊的Servlet

    • 当jsp页面第一次被访问时,服务器会把jsp编译成java文件
    • 然后再把java编译成.class
    • 然后创建该类对象
    • 最后调用它的service()方法
    • 第二次请求同一jsp时,直接调用service()方法。

  组成:

  • sp = html + java脚本 + jsp标签(指令)
  • jsp中可直接使用的对象一共有9个,被称之为9大内置对象

  3种java脚本:

  <%! %>里声明的变量和方法都是作为类的属性和方法存在的 

<%! String name = "zjc"; %>
<%! public void show() {
System.out.print(name);
}%>

  <% %>里声明的变量则是作为_jspService这个方法的内部属性

  

<%if (count > 0){%>
<jsp:include page="test.jsp"></jsp:include>
<%}%>

  

  <%=…%>:用于输出,用于输出一条表达式(或变量)的结果。 

  

<div id="divtop">
<jsp:include page="<%=port.getF_link().trim() %>">
<jsp:param name="id" value="<%=id %>" />
<jsp:param name="skinid" value="<%=skinidStr %>"/>
<jsp:param name="width" value="<%=widthStr %>"/>
</jsp:include>
</div>

  

  jsp三大指令

  <%@ %>:这表示指令,主要用来提供整个jsp页面相关的信息,并且用来设定jsp页面的相关属性,例如网页的编码格式、语法、信息等。目前有三种指令:page、include、taglib。page指令是最复杂的jsp指令,它的主要功能为设定整个jsp页面的的属性和相关功能。include指令表示在jsp编译时引入一个文件包,这个引入过程是静态的,而引入的文件可以是jsp页面、html页面、文本文件或是一段java程序。taglib能让用户自定义新的标签。

  一:page指令:
  

1.指定页面编码.例:
 

 <%@ page language="java" contentType="text/html;charset=gbk" pageEncoding="gbk" %>
 

 2.导入包,例: https://blog.csdn.net/yeiweilan/article/details/69948491
 

 <%@ page import="java.util.*,java.text.*" %>.
 

 二:include 指令
 

 静态包含(统一编译):<%@ include file="included.jsp"%>
 

 三:taglib

  JSP 九大内置對象及四個作用域

  

  

舍弃原因:

1.无法做到真正的动静分离:动态资源和静态资源全部耦合在一起,服务器压力大,因为服务器会收到各种http请求,例如css的http请求,js的,图片的,动态代码的等等。一旦服务器出现状况,前后台一起玩完,用户体验极差。

2.出错率较高(因为页面中经常会出现大量的js代码),修改问题时需要双方协同开发,效率低下。

3.jsp必须要在支持java的web服务器里运行(例如tomcat等),无法使用nginx等(nginx据说单实例http并发高达5w,这个优势要用上),性能提不上来。

4.第一次请求jsp,必须要在web服务器中编译成servlet,第一次运行会较慢。

5.每次请求jsp都是访问servlet再用输出流输出的html页面,效率没有直接使用html高。

6.jsp内有较多标签和表达式,前端工程师在修改页面时会捉襟见肘,遇到很多痛点。

7.如果jsp中的内容很多,页面响应会很慢,因为是同步加载。

最新文章

  1. java合并pdf
  2. PHP四个阶段目标以及第一阶段学习内容
  3. 【仿真】Lattice_Diamond_调用Modelsim_仿真
  4. RIDE安装遇到的问题及解决方法
  5. Jenkins配置MSBuild时使用环境变量
  6. C++ Qt 框架静态编译 操作记录
  7. HNU 12845 Ballot Analyzing Device
  8. 【转】Android的材料设计兼容库(Design Support Library)
  9. Java自带的keytool命令
  10. Steady Cow Assignment
  11. 【转】VS2010中文注释带红色下划线的解决方法
  12. 项目管理:关于SVN的实践
  13. Codeforces Round #366 (Div. 2)_B. Spider Man
  14. 关于[JAVA] Apache FTPClient.listFiles()操作“卡死”问题的分析和解决
  15. react 基础
  16. dat.gui stats.js 通用参数配置及图像统计工具
  17. CENTOS 6.6初始化SHELL脚本
  18. 【转】C#异步的世界【下】
  19. windows : Jmeter自动化测试-eclipse+maven+jmeter
  20. [转帖]USB-C和Thunderbolt 3连接线你搞懂了吗?---没搞明白.

热门文章

  1. 【DNN 系列】 下载安装
  2. Python有了asyncio和aiohttp在爬虫这类型IO任务中多线程/多进程还有存在的必要吗?
  3. Spring SpEL in JSP and Assign SpEL value to Java variable in JSP
  4. App开发Native.js入门指南
  5. jquery validate验证规则重用
  6. POJ-1001 Exponentiation 高精度算法
  7. malloc()和free()的原理及实现
  8. android自己定义刷新类控件
  9. Servlet深入学习,规范,理解和实现(中)——深入理解Tomcat(一)
  10. rman数据库恢复;关键/非重要文件、影像副本、控制文件、还原点、非归档、增量、新数据库、灾难性回复