JavaWeb,JSP理论概述,基本原理学习笔记(eclipse+Tomcat)_jsp与tomcat实现javaweb的原理-程序员宅基地

技术标签: JAVA  TOMCAT  WEB  JSP  动态网页  

引言

JSP其实在大学已经开始学了一部分了,安装了Myeclipse和Resin用resin搭载服务器,光安装配置就弄了好长时间,之后的课程更是复杂。虽然老师教的很耐心,但是自己上手操作就一头雾水。刚好在猿道也开始学习JSP了,要利用好这个机会,好好补补课,期末考试绩点就靠猿道了。

 

JSP概述

Java Server Page

通俗来说,JSP是使用Java语言完成互联网的网页(动态网页)

 

动态网页/静态网页(HTML)

两种说法:

1、页面的效果动态。(JavaScript+CSS,HTML5,Flash......)

2、页面的内容动态。(JSP)

 

常见的动态网页技术:

Sun公司/Oracle公司,Java语言方向:JSP(JavaServerPage)

Microsoft公司,C#语言方向:ASP(ActiveServerPage)

民间组织/技术论坛:PHP(PersonHomePage/Hypertext Preprocessor)

 

动态网页一定是运行在服务器上的。不同的动态网页技术,采用的是不用的服务器,我们也叫做Web容器

 

Web容器是干什么的?

用来管理和维护Web应用程序的一套软件。

 

Web应用程序时什么?

通俗的说,Web应用程序时一组动态网页以及相关资源组成的

 

Web容器也叫作Web服务器或者服务端(Web应用程序通常不是放在我们自己的电脑上的,需要通过网络才可以访问)

在学习的饿时候,可以在自己的电脑上安装一套Web容器(常见的Web容器:Tomcat/Apache/IIS/WebLogic/JBoss/GlassFish)

服务端Server/客户端Client

常见的客户端:各种浏览器(IE/Netscape/FireFox/Chrome/Opera...)

 

浏览器browser分成两大块:

原生浏览器(IE(Edge)/FireFox/Chrome/Opera/Safari)

二次开发的浏览器:360,QQ,遨游,等...

 

C/S和B/S

      C/S叫作客户端/服务器模式

      B/S叫作浏览器/服务器模式

 

CS好还是BS好?

CS:运行速度快,图形效果好。维护麻烦,需要频繁更新,占用的客户端资源较多。

C/S结构的程序,通常叫作富客户端,功能是放在客户端中的。

程序的安全性较低,维护升级不便。随客户端安装大量相关资源,空间占用个较大

 

BS:无需安装客户端,也无需更新。受网络的制约。

B/S结构的程序。通常叫作瘦客户端,功能(业务规则)是放在服务端中的。

程序的安全性相对较高。功能增加的时候,客户端无需更新。

 

根据不同的业务场景,选择程序的模式。

JSP属于BS模式

 

环境变量配置CMD命令:

      set JAVA_HOME=%CD%

      set PATH=%JAVA_HOME%\bin;

      set CATALINA_HOME=%CD%

      set PATH=%CATALINA_HOME%\bin;

      startup

      shutdown

 

Tomcat的两种工作模式:进程模式、服务模式

Tomcat如果以服务的方式运行(windows系统的专利)

首先要检查Tomcat是否支持服务方式运行,需要有tomcat.exe和service.bat

安装服务:service install / service install Tomcat

查询服务是否安装:sc query Tomcat8

启动服务:net start Tomcat8

查询端口打开情况:netstat -an / netstat -abn

停止服务:net stop Tomcat8

删除服务:service remove \ service remove Tomat

 

Tomcat的目录结构

bin:存放的是Tomcat启动的必须文件,主要是由*.jar/*.xml/*.bat/*.sh/*.tag.gz组成

conf:存放tomcat的配置文件

lib:存放的是Tomcat服务器运行时需要用到的第三方类库,这一个文件夹的类库,是Tomcat服务器本身和其管理的所有的Web应有程序都能够使用的。例如"mysql-jdbc-connection.jar"

logs:存放的是Tomcat运行时产生的日志

temp:存放的是Tomcat运行时产生的临时文件(文件可以删除)

webapps:存放的是Tomcat所管理的Web应用程序

work:存放的是Web应用程序产生的临时文件(文件可以删除)

 

Web应用程序的目录结构

重要!!!Web应用程序需要部署到Tomcat的webapps文件夹中。

WEB-INF\lib:保存的是Web应用程序需要使用的第三方类库文件(通常会将驱动类这类的jar包存放在这里)这一个文件夹中的类库,只有本Web应用程序可以访问

WEB-INF\classes:保存的是Web应用程序中的Java程序的*.class文件

WEB-INF\web.xml:Web应用程序部署描述符文件,在后续的课程中,我们有很多地方需要使用到

其他的Web资源文件,例如*.html、*.jsp、*.jpg、*.js、*.css……都可以直接放在Web应用程序的根文件夹中。也可以自己单独创建其他的文件夹

 

不显示进程名

netstat -an

显示进程名

netstat -abn

直接双击文件打开(本地访问)

file://D:\JavaEE\apache-tomcat-8.0.44\webapps\FirstWeb\first.html

本地访问使用的是“\”反斜杠

通过网页地址的方式打开(远程访问)

http://localhost:8080/FirstWeb/first.html

远程访问使用的是“/”斜杠

JSP动态页面只支持远程访问方式!!!

1、使用纯手工方式创建Web应用。

2、使用eclipse for Web工具创建Web应用。

页面文件,存放的目录名,默认情况下叫做“WebContent”,该文件夹中保存所有的资源文件。

所谓的资源文件,包括如下内容:

静态页面:*.html、*.htm

动态页面:*.jsp

样式表:*.css

脚本文件:*.js

图片:*.jpg、*.png、*.gif、*.bmp

动画:*.flv、*.swf

音频:*.mp3、*.flac、*.ape、*.wav

视频:*.mp4、*.mpeg、*.mpg、*.mov

二进制文件:*.exe、*.bin

压缩文件:*.zip、*.rar、*.tar.gz

文档:*.txt、*.doc、*.pdf、*.ppt、*.xls

WebContent这个文件夹,通常我们也叫做资源文件夹,或者Web应用程序根目录。

允许有子文件夹存在。

特别注意,有几类文件不存在资源文件夹中!!!

*.jar、*.class、*.java、*.xml

IDE工具中的Tomcat和手工运行的Tomcat不是一个回事。

采用IDE工具开发Wen应用程序,编写完代码以后,需要做一件重要的事情:部署!!!

项目中,所有文件编码,尽可能统一!!!

JSP是什么??

JSP由7种元素组成的(七种武器)

      1、HTML,包括HTML标记、CSS样式表、JavaScript脚本等等……

      2、注释:

            HTML注释:<!-- -->在网页源码中是可以看见的

            HTML,Web容器不忽略,将注释信息输出到页面中,但是浏览器会忽略这些注释信息,

            所以在页面源码中可以看到,但页面内容中不可见。

            HTML注释不可以注释JSP代码

            JSP注释:<%-- --%>在网页源码中是不可见的

            JSP注释,Web容器就忽略了。所以在最终的页面源码中不可见

            JSP注释可以注释JSP代码

      3、代码段/小脚本/ScriptLet:<% Java代码; %>注意,代码段中Java代码结尾一定要有“;”

            代码段中只能有Java的调用语句,不能有定义语句!!!

      4、表达式:<%=Java表达式 %>注意,表达式中Java代码结尾一定不能有“;”

      5、声明:<%! Java代码; %>

            声明中只能由定义语句,而不能有调用语句!!!

      6、指令:<%@ 指令名 指令的属性列表 %>

            作用:指示Web容器处理JSP文件的时候的一些设置

           page指令

                 language属性:指定JSP页面的处理语言。取值只能写"Java",默认值也是Java

                  contentType属性:指定JSP页面内容的字符编码,指定给浏览器看的,值:"text/html; charset=UTF-8"

                  pageEncoding属性:指定JSP页面文件的字符编码,指定给编辑器看的,值:"UTF-8"

                 import属性:指定JSP文件导入非java.lang包以外的其他类,值"java.util.*"

                  isELIgnored属性:指定JSP是否跳过处理EL表达式

                 errorPage属性:指定JSP页面是否是错误处理页面

            include指令

                  file属性:指定包含的文件位置

            taglib指令

            指令一般在页面最前面,只有include指令可以放其他位置

      7、动作:<jsp:动作名称 动作属性列表></jsp:动作名称>

            主要作用是:封装数据,完成页面的跳转

 

            jsp:param(获取一个数据)

            jsp:params(获取一组数据)

            这两个动作的功能,从请求的查询字符串中获取数据

            被EL表达式替代

 

            jsp:attribute

            这个动作的功能,从作用域范围中获取数据

            JSTL和EL都可以替代

 

            jsp:useBean

            jsp:setProperty

            jsp:getProperty

            这三个动作的功能,用于封装数据成对象

            使用EL替代

 

            jsp:forward(目前还勉强有用)页面的转发

            jsp:fallback

            jsp:include(目前还勉强有用)页面的包含

            使用EL替代

           

           

            目前来说,JSP的标准动作不再使用

                  原因:1、有替代技术。2、JSP标准动作在MVC设计模式中不符合设计模式的思想

           

常见的浏览器错误代码:

      500:服务器内部错误(通常是Web应用程序产生了 编译异常)

      404:服务器找不到相关资源(文件未找到)

      403:访问被拒绝(通常是没有相关资源的访问权限)

 

JSP的工作原理

      1、编写JSP页面源码

            使用eclipse完成

      2、将(*.jsp)页面源码转义成(*.java)Java源码

            tomcat完成(web容器)

      3、将(*.java)Java源码编译成(*.class)Java的字节码

            tomcat完成(web容器)

      4、通过虚拟机执行(*.class)Java字节码,将执行的结果处理成(*.html)页面源码

            tomcat完成(web容器)

      5、将最终的HTML页面源码发送给浏览器

            tomcat完成(web容器)

      6、浏览器解析HTML,以图形化的方式展示页面

            浏览器完成

 

JSP九大内置对象

      第一类:与输入输出有关的

            request请求对象

            response响应对象

            out输出对象

      第二类:与作用于范围有关的

            pageContext页面作用域

            request请求作用域

            session会话作用域

            application应用作用域

      第三类:与配置有关的

            config配置对象

            page页面本身的对象

      第四类:与异常有关的

            exception异常对象

主要是研究隐式对象的方法。

 

研究API的方法

1、提供什么样的类(包括类、抽象类、接口,放在什么包里,层次关系,这个类提供什么方法,完成什么功能)

2、关注方法(方法有什么参数,包括参数的个数,参数的数据类型,参数的排列顺序,返回什么结果,结果的数据类型,完成什么功能)

3、关注常量(静态常量,枚举类型)

4、关注注解

5、关注异常(异常的名字)

 

html表单在jsp中的一些补充知识

查询字符串的格式:?参数的名称=参数的值&参数的名称=参数的值

在查询字符串中,表单元素的name属性,成为了查询字符串的参数的名字,

表单元素的value属性,将成为查询字符串的参数值

在表单提交的时候,可以采用两种提交方式:分别是get/post

只有当表单采用get方式请求的时候,表单的内容才会以查询字符串的形式传递

当表单采用post方式请求的时候,表单内容将会被封装

 

url的组成

http  ://  localhost          :  8080   /  JavaWeb_smith / wx / wx.jsp

协议 ://  主机名,IP,域名 :  端口号 / Web应用名/资源路径 / 资源名称

 

隐式对象的常用方法:

(见https://blog.csdn.net/weixin_42588379/article/details/84557164

 

乱码问题

详情移步:

https://blog.csdn.net/weixin_42588379/article/details/84638890

 

JSP中的会话跟踪:

原因:本质上是因为Http协议先天的原因。

HTTP协议是一种无状态通讯协议!

导致多个页面之间无法直接传递数据

JSP页面间传递信息的几种方式:

        //方法一:URL重写

        //通过查询字符串传递参数

        //这种方式很麻烦,不适合于传递带有编码格式的数据

        //但是可以很方便地传递数字数据

        //发送页面

        String url="success.jsp?uName="+uName;

        String newUrl=response.encodeRedirectURL(url);

        response.sendRedirect(newUrl);

        //接收页面

        String uName=request.getParameter("uName");

        byte[] b=uName.getBytes("iso-8859-1");

        String uNickNew=new String(b,"utf-8");//修改编码
        

        //方法二:作用域(强烈建议采用)

        //发送页面

        request.setCharacterEncoding("utf-8");

        response.setCharacterEncoding("utf-8");

        response.setContentType("text/html;charset=utf-8");

        //以上代码不能处理get请求中的数据的

        request.setAttribute("niChen",uName);

        request.getRequestDispatcher("success.jsp").forward(request,response);

        //接收页面

        String uName=(String)request.getAttribute("niChen");

 

        //方法三:Cookie(很少用)

        //Cookie是保存在客户端浏览器的临时文件夹中的。造成安全隐患

        //Cookie内容本身就是文本信息。另外,浏览器在读取Cookie的时候不做任何认证工作。

        //还有一个不适用Cookie的理由。Cookie是可以被浏览器禁用的

 

        //方法四:隐藏表单域(有局限性,必须有表单)

        <input type="hidden" value="2" name="hide">//发送页面

        String hide=request.getParameter("hide");''接收页面

 

EL表达式

叫作表达式语言

在JSP的基础上升级一种表达式的语言格式,

所以EL表达式不同于Java语言,也不同于JSP标签

EL的语法规则很简单:${表达式}

 

EL表达式是提供一种更简便的操作查询字符串和作用域范围中数据的一种方式

EL表达式的局限,只能读,不能写

 

JSP表达式和EL表达式的异同

都可读取数据(查询字符串或者作用域范围)

区别在于,JSP表达式读取失败,将输出"null"

EL表达式读取失败,则输出""

 

EL表达式主要完成两个工作:计算和输出

EL表达式主要是为了替代JSP表达式的。

原因:

1、容易造成<xxxx<%%>/>语法,容易产生歧义。

2、JSP表达式语法要求严格。EL表达式更加智能化,更加简洁

3、从作用域范围拿数据,无需指定作用域范围

例:

<h2>EL操纵作用域范围${data}</h2>

<h2>JSP操作作用域范围<%=session.getAttribute("data") %></h2>

 

EL表达式的语法规则有两种:

1、类似于对象的属性:${对象.属性}

2、类似于数组的访问方式:${对象["属性"]}

 

EL表达式中的内置对象(隐式对象)

param,paramValues封装的是查询字符串的数据

pageScope,requestScope,sessionScope,applicationScope封装的是四大作用域范围

initParam封装的是初始化参数

head,headValues,pageContext,cookie

EL最大的优势,可以操作JavaBean

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42588379/article/details/84073536

智能推荐

IIS写入漏洞利用工具解析_iis短域名-程序员宅基地

文章浏览阅读1k次。概述通过学习文档内容,熟悉并掌握 IIS 写入漏洞利用工具的利用方法,了解具体的功能内容,亲自实践操作,并根据课程需求完成相关任务。工具功能说明IIS 写入漏洞利用工具是由桂林老兵写的一款漏洞利用工具,专门针对 IIS 写入漏洞。接下来我们具体介绍一下相关的使用。1.第一部分数据包格式该功能模块默认的数据包传输方法有 7 种,分别是:OPTIONS 返回服务器的各种信息PUT 生成上传文件数据包的。POST 用来提交表单MOVE 是改名数据包。COPY 是复制数据包。DELETE_iis短域名

Pocket——Web3生态是变革区块链技术的中流砥柱-程序员宅基地

文章浏览阅读3k次。在过去的一年中,加密经济经历了新一轮波动,DeFi生态领域的应用是快速发展的代表之一。在DeFi顶级风口下,NFT火爆出圈,不断获得全球范围各层组织对NFT的认可,但NFT从本质上来看依旧处于fomo阶段,何时稳定发展依旧要看市场反馈。与此同时,元宇宙概念在2021年下半年火爆起来,元宇宙作为新型虚实相融的互联网应用和社会形态,通过沉浸式的体验,让虚拟进一步接近现实。但元宇宙能否成功搭建新型数字社会体系,依然处于概念发展阶段。而不论是DeFi生态,亦或是NFT及元宇宙生态,都离不开区块链底层技术的支

vue2/vue3 阻止控制台报错 并用普通方式将报错信息打印在控制台上_vue屏蔽报错-程序员宅基地

文章浏览阅读3.6k次,点赞5次,收藏9次。主要的代码就是 VueApp获取挂载元素 然后改写errorHandler 系统报错 和 warnHandler 系统警告方法。可以看到 控制台并没有报错 只是输出了报错信息 这样的字符串 我们也可以直接传给服务器 存储报错信息。也是在vue节点中 重写errorHandler和 warnHandler 方法。只用console输出一下 警告或报错提示 便结束方法。vue3 在 main.js中编写代码。vue2 在 main.js中编写代码。..._vue屏蔽报错

webpack学习笔记_hp webpack-程序员宅基地

文章浏览阅读972次,点赞18次,收藏3次。最近在巩固之前学过的知识,便想先从webpack开始,也是重新巩固学习,因为是蛮久之前学的所以一些新版本也还不够了解,希望得到一些大佬的指导让自己进步快一些,这里先提前谢谢各位老师了!_hp webpack

nps内网穿透在Windows系统下的搭建_nps windows搭建-程序员宅基地

文章浏览阅读1.8w次,点赞5次,收藏28次。本文主要讲解并记录了一次nps的实际应用,主要完成了在Windows系统下内网穿透的nps解决方案。主要用于将无公网IP的个人电脑,借助服务器的公网IP和相应端口映射到公网,使个人电脑能被外网访问。_nps windows搭建

常用的一些 CSS 技巧三-程序员宅基地

文章浏览阅读108次。你可以看看其他常用的 CSS 技巧:常用的一些 CSS 技巧一常用的一些 CSS 技巧二 — 选择器(伪类与伪元素)以下整理了 30 seconds of code 的一些简短 CSS 代码段。Offscreen在 DOM 中在视觉上和位置上完全隐藏元素,同时仍允许对其进行访问。注意:这为 display: none(屏幕阅读器无法读取)和 visibility: hidden(占..._30 seconds of code css

随便推点

uniapp swiper Tab选项卡切换高度自适应问题_uniapp 页面tab 切换一瞬间没有内容 会缩小页面高度-程序员宅基地

文章浏览阅读3.4k次。uniapp swiper Tab选项卡切换高度自适应问题uniapp swiper Tab选项卡切换高度自适应问题swiper需要指定固定高度,但数据是动态加载的,所以高度需要自适应。基本思路:就是获取展示内容的高度 赋值给swiper。但是中间有好多坑,淌过了在这里分享一下思路,经验不足,有改进的地方欢迎多多指点<wuc-tab :tab-list="tabList3" :tab..._uniapp 页面tab 切换一瞬间没有内容 会缩小页面高度

pyecharts可视化模型——在重整理已经整理完了没时间发_pyechart可视化-程序员宅基地

文章浏览阅读141次。当数据分析遇上数据可视化时,pyecharts 诞生了。柱状图from pyecharts.charts import Barfrom pyecharts import options#要处理的数据province = ["湖北","北京","新疆","山东","安徽","云南","上海","光荣"]data1 = [10000,5000,5500,4100,6000,4213,50012,9999]data2 = [1200,50,60,20,30,40,100,3000]#创建_pyechart可视化

Python3列表、元组、字典、集合的函数&方法_python字典元祖集合的函数-程序员宅基地

文章浏览阅读1.3k次,点赞5次,收藏11次。python3函数列表函数&方法元组内置函数字典内置函数&方法集合的基本操作集合内置方法完整列表知识补充列表函数&方法函数:实例演示:#len(list)list1=['kkk','ddd','zzz']print(len(list1))list2=list(range(5))#创建一个0-4列表print(len(list2))#max(list)&a..._python字典元祖集合的函数

【项目】GZIP的细节简介和模拟实现_gzip和, 霍夫曼,lz77压缩结果对比-程序员宅基地

文章浏览阅读519次,点赞4次,收藏5次。本文详细介绍了GZIP压缩的实现原理以及其中包含的技术原理,完全可以作为你的第一个项目实战,不容错过!!!_gzip和, 霍夫曼,lz77压缩结果对比

idea运行gradle项目可能遇到的错误及解决方案_idea配置gradle遇到的问题-程序员宅基地

文章浏览阅读7.1k次。 一、关于idea与gradle版本问题**问题:**当我们完成一个gradle项目后,点击运行,日志也没有显示错误,但我们就是运行不出来结果,可能的错误就是idea与gradle版本不符***解决方案:***打开idea安装目录,点击IDEA》IntelliJ IDEA 2019.3.3》plugins》gradle,观察gradle对应版本,选择下载gradle(每个..._idea配置gradle遇到的问题

【转】如何比较两个浮点数_comparing floating point with == or != is unsafe-程序员宅基地

文章浏览阅读2.9k次。【转】如何比较两个浮点数https://bot-man-jl.github.io/articles/?post=2020/Comparing-Floating-Point-Numbers比较两个浮点数是否相等并不是一个简单的问题:由于 浮点数的精度误差,一般不能使用绝对相等比较; 基于绝对误差的近似相等比较 要求使用者对 允许的误差范围 有明确的预期,并不通用; 基于相对误差的近似相等比较 看似通用,但又可能会在 0 附近 “栽跟头”。。。本文主要参考了 “浮点数专家..._comparing floating point with == or != is unsafe