javaWeb项目之JSP学习笔记----2,JSP基本原理

基于JSP+servlet+MYSQL的Javaweb项目 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、项目介绍二、样品实例1.市场活动界面2.线索界面三、代码1.pom文件2.web.xml文件3.市场活动1.Controller2.Service实现类3.dao.xml4.线索1.Controller2.Service3.dao5.Tran1.jsp文件6.listener总结 前言 CRM项目是寒假在家跟着视频做的一个项目,这个项目可以巩固之前Java基础以及javaweb的一些知识.途中也遇到了各种各样的问题,可以提 阅读详情

JSP 基本原理

1.jsp文件必需在jsp服务器内运行。

2.jsp文件必须生成servlet才能执行。

3.每个jsp页面的第一个访问者速度很慢,因为必须等待jsp编译成servlet。

4.jsp页面的访问者无需安装任何客户端,甚至不需要可以运行的Java的运行环境,因为jsp页面输送到客户端的是标准的HTML页面。

 

  在MyEclipse中创建一个【JSPLearning】的web项目,在【WebRoot】下创建一个“1.jsp”

  

  可以看到头部分内容是比较多的,这原因其实和Servlet一样,都是由于MyEclipse创建JSP也是依靠模板来创建的(当然我们可以改模板代码使我们的JSP更加简洁):

  

我们在<body>标签中输入如下代码:

复制代码

1  <body>
2          <%
3              Date date = new Date();
4              out.write(date.toLocaleString());
5           %>
6   </body>

复制代码

 

然后通过浏览器来浏览我们这个JSP,就可以看到当前时间:

  

  写JSP的一大便捷之处在于如果该JSP不在【WEB-INF】文件下,那么每次修改代码只需保存即可在浏览器上观察,不需要像Servlet一样要重新部署。

我们看到上面JSP例子,不仅包含了HTML标签语言,同时融入了JAVA代码。

 

  我们知道浏览器在访问JSP时能将JSP解释并将内容显示在浏览器上,JSP中有HTML的部分不用说,这浏览器肯定知道,但是我们上面的例子中JSP内还有Java部分,那么浏览器又不是JVM,怎么能执行这部分代码呢?

  这就要说明一点了,其实浏览器访问JSP只是一个假象,真正的还是去访问Servlet。只是Servlet将JSP文件进行了翻译转换,即将JSP又变成了Servlet,然后输出给浏览器的就是这翻译转换后的Servlet。

  那翻译转换后的Servlet在哪里呢?我们并没有看到在自己的web工程中有多出来的Servlet。其实这个Servlet就在Tomcat的【work】目录下。【work】目录是Tomcat的工作目录,也是Tomcat将JSP转换为class文件的工作目录。转换的工作原理是当浏览器访问某个JSP页面时,Tomcat会在【work】目录下把这个JSP页面转换成 .java文件(例如index.jsp会被转换成index_jsp.java,如果以数字开头,最前面还会有一下划线,例如: _1_jsp.java),而后编译为 .class文件,最后Tomcat容器通过ClassLoader类将这个转换后的 .class类装载进内存,响应客户端的工作。

  当第一次有人来访问时,Tomcat需要将JSP转换成Servlet,访问可能会比较慢,但是一旦编译成Servlet后,除非JSP再次修改,否则之后再有用户访问就可以直接访问该Servlet,所以之后访问速度快。如果清空了【work】目录中的内容,那么所有的过程都会重新来过。

  Tomcat会定时扫描容器内的JSP文件,当发现某个JSP进行了修改之后,Tomcat会重新编译转换这个JSP成Servlet。但是Tomcat对JSP的扫描是定时的,即不是实时的,所有并不是修改完后就立即生效(如上面所说的虽然修改JSP并不需要重新部署,但是有可能会发生访问时还未修改)。所以有时候为了能立刻生效,很多老前辈会建议在修改JSP后立即清除【work】目录里的内容。

  (另外,Tomcat容器中,对于转换后的Java文件(例如index_jsp.java)的编译最大只支持64K,所以在其他服务器容器中的JSP移植到Tomcat容器中时会发生大JSP文件无法编译的情况。所以建议把JSP中的业务逻辑写入单独的类,在JSP中通过调用这个类的静态方法来执行,并将JSP中的JS,CSS等放入单独的JS文件或CSS文件依靠链接来加入样式等。)

 

  上面说了这么多,我们来探究下Tomcat的【work】目录,我们会发现在这个目录下还有【Catalina】文件夹,还有【localhost】文件夹(如果我们有其他虚拟主机,那么也在【Catalina】下建立其他虚拟主机的目录来存放JSP转换后的class文件):

  

这时候我们也看到了刚才刚建的web工程,接着我们继续点击进去(你会发现目录相当的多 T_T):

  

进到【JSP】目录下,我们就可以看到刚才从1.JSP转换过来的 _1_jsp.java文件和 _1_jsp.class文件了(数字开头,所以前面有一个下划线)。

  我们点击 _1_jsp.java文件,看一看里面的内容:

  

我们的 _1_jsp作为我们1.JSP所定义的类,继承了一个名为HttpJspBase这个类,而HttpJspBase类是可以从Tomcat的源码中(因为包中有apache)根据这个类的包名找到:

  

在这个类中继承了HttpServlet!所以这必须是一个Servlet :

  

  所以我们访问JSP,其实并不是真正在访问JSP,而是访问将JSP转换后的Servlet。在这个Servlet中,我们使用请求对象,将所需要的数据通过流的形式写回客户端,这点跟之前Servlet的学习到的是一样的。我们可以再看看那个浏览器访问的JSP页面,查看其码源:

  

  我们看到其码源已经像是正常的HTML页面,因为只有这样浏览器才能解释和显示,同时在原来JSP写Java代码的地方直接变成了我们Java运行后的结果,这是为什么呢?

  当知道JSP要转成Servlet,然后又Servlet来处理浏览器的请求,那根据之前学习的Servlet可以知道,这个请求是在Servlet中的service()方法中执行的,我们来看一看 _1_jsp 中的service()方法:

  

  

  我们可以看到,在这个service方法中,确实有接收请求对象和响应对象为参数,同时在方法的内部,通过IO流对象将一些HTML代码通过write()方法写出到浏览器,并且也将在JSP中写的Java代码原封不动的搬移到这个Servlet中,这就是为什么可以在JSP中写Java代码,因为最后Java代码都会交给Servlet,剩下的就跟之前Servlet的学习没啥区别了,通过流写给响应对象,再将响应对象交给浏览器显示。

  这里你可能会注意到我们在JSP编写是对Date对象是通过传统Java创建对象的方式来实现实例对象,而后面我们直接通过“out”这个对象来调用方法,那么这个“out”指的是哪个对象?还有别的什么对象可以直接调用吗?

  我们已经知道了JSP最终是要转换为Servlet的,而Servlet就是一个Java代码的类,那么在JSP中写的Java代码会原封不动的搬移到Servlet上,那么某些某名出现在JSP上的对象肯定就是在Servlet上已经被定义过的,我们再次看看上面刚才的截图,可以看到“out”这个对象是JSPWriter的实例(截图中out还未获得引用,但是后面的代码会使out对象获得引用,具体请看JSP转换后的JAVA源码),通过JSP的API手册:

  

  JspWriter是继承Writer的一个类。如果还记得通过响应对象Response.getWriter()方法获得的PrintWriter其实也是Writer下的一个类,所以JSP使用的字符流和Servlet能获取到的字符流其实都一个意思。

  综上,正是因为在转换的Servlet中会自动帮我们定义了JspWriter类的一个实例对象:out,所以我们能在JSP中直接使用这个对象,当然通过上诉截图我们还可以直接使用别的已经定义好的对象,比在JSP中使用“application”代表这个web的Context对象,用“page”代表了JSP对于的这个Servlet,用“session”代表这个web应用中的Session对象 等等,所以这些都是可以直接在JSP中使用,并代表某个类的对象的:

  

  简单说来,只要是在JSP转换后的Servlet中的_jspService()方法中定义过的变量,在JSP页面编写代码时都可以直接使用。

 

  在本篇博客的最后,我们来最后说明一点,不管是JSP还是Servlet,虽然都可以用于开发动态web工程,但由于这两个技术的各自特点:

  · 使用JSP即用Java代码产生动态数据,又做浏览器界面显示会导致页面难以维护。

  · 使用Servlet即处理数据,又在里面嵌套HTML代码用于界面显示,同样导致程序可读性差,难以维护,就如同上面的转换后的Servlet中各种out输出HTML代码。

  · 因此最好的方法就是根据这两门技术的特点,让它们各自负责各的,Servlet只负责响应请求并处理数据,并把数据通过转发(forward()方法)带给JSP,由JSP来显示,其实就是丢给转换后自动产生的Servlet来显示,让它来帮我们通过各种out来输出HTML代码。

Servlet与JSP-JavaWeb项目食用指南 本项目是基于Servlet+JSP+DataBase实现的一个商品管理系统,主要目的是学习JavaWeb入门的知识:Servlet、JSP以及EL表达式、Ajax和JSON。完成这个项目主要还是巩固练习JavaWeb的基础知识,为后面的JavaEE框架的学习做铺垫。所以以本人的学习经验来看,这是一个很好的上手Web的练习项目 阅读详情

相关推荐

学习笔记【Day 20】鸿蒙PC应用在SD WAN MSTP场景用CodeArts test工具测试过程

多生成树协议(MSTP)作为二层网络高可靠、无环路的核心技术,其在鸿蒙 PC 上的兼容性与稳定性测试尤为重要。本文结合华为云 CodeArts TestPlan 全流程测试管理平台,详细拆解鸿蒙 PC 端 MSTP 功能的测试设计、环境搭建、执行验证。1.测试左移,保障迭代效率CodeArts TestPlan 将 MSTP 测试从后期集成阶段 “左移” 至开发早期,通过可复用用例库与自动化脚本,支持每次代码提交后的快速回归测试,避免网络功能稳定性因迭代被破坏。2.平台化工具破解复杂场景测试难题。

aiyijianghe的博客 1058

JSP基本原理实战

一创建jspPrinciple项目 二项目结构如下 D:\Program\Tomcat8\webapps\jspPrinciple>tree /f 卷 Program 的文件夹 PATH 列表 卷序列号为 2E2F-D762 D:. │ first.jsp │ test.jsp │ └─WEB-INF web.xml 三代码 1first.jsp &...

实践求真知 371

【STC8A8K64S4A12开发板】—学习PWM脉冲宽度调制

版权声明:本文为博主原创文章,转载请附上原文出处链接。 文章目录前言一、硬件设计1.PWM脉冲宽度调制介绍2.STC8A8K64S4A12系列单片机PWM介绍3.PWM配置步骤二、软件设计1.PWM寄存器汇集2.寄存器解析2.1.PWM配置寄存器PWMCFG2.2.PWM控制寄存器PWMCR2.3.PWM中断标志寄存器2.4.PWM外部异常控制寄存器2.5.PWM时钟选择寄存器2.6.PWM触发ADC计数器寄存器2.7.PWM2翻转寄存器2.8.PWMn控制寄存器2.9.PWMn电平保持控制寄存器3.PW

qq_36139768的博客 5216

JavaWeb专栏之(三):Eclipse创建JavaWeb项目

JavaWeb专栏之(三):Eclipse创建JavaWeb项目 前言: 关注:《遇见小Du说》微信公众号,分享更多Java知识,不负每一次相遇。更多内容请访问:www.dushunchang.top 在上一篇文章中,小Du猿带大家使用Idea创建JavaWeb项目,相比之下Idea作为当前非常主流的开发IDE,深受Java后端程序员使用。市面上约75%开发者使用Idea,一代开发神器Eclipse就此没落。小Du猿第一次使用的开发IDE就是Eclipse,也算是我的启蒙神器。今天就带了使

小Du猿的博客 23万+

shopro 商城,2025年新申请的微信支付提示失败,支付提示 Get Wechat Public Cert Error 问题的修复办法

shopro 商城,最近新申请的微信支付商户 支付提示 Get Wechat Public Cert Error 问题的修复办法

行走的卡路里 1245

糖果【贪心】

【问题描述】 有N(1≤N <100,000)N(1≤N~<100,000)N(1≤N <100,000)种不同类型的糖果,每种糖果数量无限多。第i种糖果每颗的价格是Pi(1≤Pi≤1018),有Ci(1≤Ci≤1018)P_i(1≤P_i≤10^{18}),有C_i (1≤C_i≤10^{18)}Pi​(1≤Pi​≤1018),有Ci​(1≤Ci​≤1018)头牛想吃这种糖果。 FarmerJohnFarmer JohnFarmerJohn拥有金钱BBB元(1≤B≤1

算法小猪的博客 795

使用IDEA2022.2.2 创建JavaWeb项目 使用JSP实现登录功能

在百度搜索框中输入“电脑背景图片”——单击下方“图片”按钮——选择心仪图片——单击下载按钮。4,输入images,创建目录,用于存放后续需要使用到的图片。1,在webapp目录上右击——new——directory。1,右击webapp包——new——jsp/jspx。2,单击运行按钮,试运行一下项目,是否可以正常跑起。2,输入css,创建目录,存放每个页面的外部样式表。2,输入login,选择CSS file,按回车。2,在命名文本框中输入,login,按回车。3,输入js,创建目录,存放js代码文件。

梁辰兴的博客 1954

通过JLink下载实现工控MCU批量烧录实战案例

利用JLink下载工具实现高效稳定的工控MCU批量烧录,提升产线效率。案例详细解析了脚本配置与自动化流程,突出jlink下载的可靠性和可扩展性,适用于大规模嵌入式部署场景。

weixin_30205153的博客 812

IDEA搭建JavaWeb项目,JDBC和Servlet-JSP技术实现注册功能

本篇主要讲怎么使用IDEA搭建JavaWeb项目,并且使用JDBC和JSP-Servlet实现一个简单的注册功能。这里以idea2021.3.2版本为例。idea是不可以直接创建一个JavaWeb项目的,我们需要新建一个普通的java项目,然后手动修改。 "> (1). 建表,根据业务需求,我们需要在数据建设一个存储用户信息的数据表 (2). 编写实体类 (3). 编写dao接口 (4). 编写daoimpl实现类 (5). 编写servlet (6). 修改web.xml文件配置ser

Java学习博客 6163

风光储并网对电力系统稳定性影响的仿真研究

本文研究了风光储并网对电力系统稳定性的影响,基于MATLAB/Simulink平台搭建了IEEE 9节点测试系统的风光储并网模型。研究对比了光储、风储和风光储三种并网配置在多种干扰下的稳定性表现。结果表明:光储系统对频率变化最敏感,风储系统具有更强的功率波动适应能力,而风光储联合系统通过互补效应展现出最佳综合稳定性。储能系统在所有配置中均显著改善了频率恢复性能,验证了其在新能源并网中的关键支撑作用。研究为高比例可再生能源电力系统的稳定运行提供了仿真依据和技术参考。

huanghm88的专栏 153

水声信号处理开源算法库最新进展

欢迎关注本专栏,一起探索新世界大家好,我是ZhuChunSHU。985院校硕士毕业,现担任算法研究员一职,热衷于深度学习算法研究与应用。曾获得阿里云天池比赛第三名,CCE比赛第五名,科大讯飞Q比赛第六名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法行业就业。希望和大家一起成长进步。今天继续我们的专栏分享!!!!!!!!!!!!!!!!!!!!水声信号处理是海洋科学与工程领域的核心组成部分,对于水下通信、目标探测、海洋环境监测以及生物声学研究至关重要。

u012133341的博客 1254

eclipse新建javaweb项目——javaweb系列(一)

eclipse新建javaweb项目——javaweb系列(一)

qq_23858785的博客 1万+

ContextCapture系列教程(三):大疆精灵4RTK版无人机POS数据提取、处理(处理后勉强达到免相控要求)

大疆精灵 Phantom 4 RTK于2018年发布,是大疆为高精度建图与精准飞行设计的行业级无人机,在精灵4无人机外形的基础上,机身增加了RTK模块,可以实现高精度 RTK 定位导航,相机与 RTK 系统采用微秒级时间同步,可以通过app 进行航线规划飞行

pausau的博客 1万+

javaWeb毕业项目、大作业等学习项目汇总目录

你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,或者没有积分想获取项目,欢迎指教: 企鹅:869192208 文章目录前言:JavaWeb(Servlet+jsp)基础项目JavaWeb进阶项目(SSH/SSM)SSH项目SSM项目 前言: 为了方便各位朋友能快速找到自己需要的项目,特将博客中发布过的项目,整理成目录,方便大家查阅。以下项目从 javaweb 基础项目到 SSH 和 SSM 进阶项目,再到后面会更新 springboot 项目,感谢大家的支持,希望分享的项目在你学.

心猿码意 3万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

2023最新版IDEA 创建javaweb项目(图文详细)

该教学主要针对各位刚刚接触javaweb开发的小伙伴,各位学习java的朋友也难免会经历这个阶段,都要从最基础的servlet项目做起,它是 Java 进军 web 开发的第一款技术,也是完全基于Java实现,闲来无事写出本篇文章在此记录一下。Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

weixin_46721191的博客 3万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

JavaWeb基础专项复习2——JSP文件

JavaWeb早期JavaWeb中期:servlet,在servlet中需要写大量的JavaWeb后期JSP,只需要在html中直接添加动态信息,即java代码片段就可以了。服务器会把所有的<html>语句转换成response.getWriter().println(“<html>”);html + java代码 + JSP动态标签 = jsp (JSP 是在传统的网页 HTML 文件中插入 Java 代码和 JSP 标签,从而形成 JSP 文件,后缀名为.jsp。

2301_78566776的博客 1421

JavaWeb项目 jsp页面无法加载样式问题

记录困扰我多天的一个关于Java web 项目问题 项目之前完美运行,不知道添加了什么,运行之后无法加载样式 查过过滤器 发现 也没有拦截 也放行了 重启电脑 重启eclipse 卸载tomcat重装都没有解决 换电脑完美运行 原因 jsp页面是由html改的 原表头 <%@ page language="java" contentType="text/html; charset=UTF...

weixin_41345933的博客 1万+

基于 servlet+jsp+mysql 的 javaWeb 个人博客

你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,欢迎指教: 企鹅:869192208 一、 开发背景 软件名称:基于 servlet+jsp+mysql 的 javaWeb 个人博客 使用对象:学习或了解过 java 基础课程,开始接触 javaWeb 的学生和软件爱好者 其他相关:基于 jsp+servlet+mysql 开发旅游推介网站和后台管理系统 二、 需求分析...

心猿码意 8044

【JavaWeb】JSP详解

JSP = Java Server Page = html + Java代码 + JSP动态标签通常在前台开发人员给出静态页面后,后台开发人员只需在静态页面中添加动态信息即可,而不用再使用Servlet一行一行的去输出了内置对象是在JSP页面中无需创建就可以直接使用的变量。在JSP中一共有9个这样的对象page(当前JSP的真身类型)out最为常用的方法是print(),即向页面输出。它与response.getWriter()基本相同config。

2302_78914800的博客 1010

Eclipse创建javaWeb项目工程

首先,想作为一个较为标准的程序员,应该把自己的开发工具eclipse设置成与公司中大多数程序员的设置一样,比如说工作的字符编码为UTF-8,字体大小等等。 在刚下载好的eclipse中刚进去是没有Tomcat的,首先运行javaWeb项目一定是要Tomcat服务器。进入Eclipse,先把一些基本的设置设置好,然后就配置Tomcat,基本的配置,比如修改eclipse的字体大小,...

andunxu1008的博客 2837

【JavaWeb】之JSP

JavaWeb基础JSP相关知识详细介绍~

小新要变强的博客 2966

手把手用jsp+servlet实现一个javaweb登录小项目

手把手用jsp+servlet实现一个javaweb登录小项目 环境: JDK1.8 Tomcat7.0.5 成品展示 一.创建用Idea创建JavaWeb项目 创建成功的目录 二.导入所需Jar包 找到本地jsp和servlet的jar包,为方便大家提供jar包给大家下载 https://pan.去掉baidu.com/s/1SpvEM-3y_joDtxwkMx-5Cw 提取码...

weixin_43898629的博客 1774

javaweb项目教程

手把手搭建一个完整的javaweb项目 原文:https://blog.youkuaiyun.com/qq_23994787/article/details/73612870 本案例使用Servlet+jsp制作,用MyEclipse和Mysql数据库进行搭建,详细介绍了搭建过程及知识点。   下载地址:http://download.youkuaiyun.com/detail/qq_23994787/99048...

qq_35807964的博客 2万+

javaWeb学习笔记2

GET 请求方式 和 POST请求方式 区别主要在于获取请求参数的方式不一样(String getQueryString()、BufferedReader getReader()),是否可以提供一种统一获取请求参数的方式,从而统一doGet和 doPost方法内的代码?Request 首先通过不同的请求方式解析参数之后,再都使用Map集合存储请求数据的参数。3.复杂度高:运行需要依赖于各种环境,JRE,JSP容器,JavaEE.,这样太耗费资源了,性能很低,因此需要把以下共享的代码块调出来。

weixin_47175003的博客 1133

eclipse创建第一个JSP项目

eclipse创建第一个JSP项目 前言 ​ 本文的内容由四个部分组成,分别为①Tomcat的安装与配置,②创建第一个JSP项目,③打包JSP项目到Tomcat服务器上并在浏览器中运行,④eclipse的一些java Web的一些设置。 1、Tomcat安装与配置 ​ 到Tomcat官网下载Tomcat相应的版本,目前最新的版本为10,但我用的最新的是Tomcat9,下载方法如下图所示: ​ 下载完成后解压,将下载好的Tomcat配置到eclipse中,首先打开eclipse**->wind

偉ing的博客 4671
上一篇: javaWeb项目说明
下一篇: Tomcat的安装及其使用指南
iamlinuxasd
博客等级 码龄10年 4粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值