全称叫做Javascript,简称叫做JS (跟java没啥关系,可能语法有些相似)
由NetScape(网景)公司提供,是一门专门嵌入在浏览器中执行的脚本语言
Livescript----->(改名) Javascript
JS运行在浏览器中,负责实现网页中的动画效果或者是实现表单校验等功能(比如密码输入是否正确)
js写错没有提示.
学习前端可以看:W3Cschoole这个网址。
一个后端工程师必须会js.
1、特点:
(1)JS是一门直译式的语言(边解释边执行,没有编译的过程)
java–> 编写时 xx.java —>编译成 xx.class --> 运行
js —> 编写时 html,编写时 js文件,直接运行, 没有编译过程。
(2)JS是一门基于对象的语言(JS中没有类的概念,也没有编译的过程)
JS中是有对象的(内置对象、自定义对象)
(3)JS是一门弱类型的语言(Java:强类型) (弱类型:定义变量的时候不用指定其类型)
2、优势:(了解)
(1)JS具有良好的交互性 (用户体验更好)
(2)JS具有一定的安全性(只能在浏览器内部运行,不能访问浏览器以外的资源)
(3)JS具有跨平台性(JS 浏览器) ,即:有浏览器的地方就能运行JS。
解释:
JS语言是跨平台的,是因为有浏览器,但浏览器不跨平台。
Java语言是跨平台的,是因为有虚拟机,但虚拟主机不跨平台,比如Linux和windows的jvm的版本不一样 。
在head或者body标签内部可以添加一个script标签,在script标签内部可以直接书写JS代码! 缺点是只能用在同于个网页。而css只能在head标签里面。
在head或body标签内部,可以通过script标签引入外部的JS文件。例如:
如何创建一个JS文件: 2种方式
1.new–File,后缀名改为.js
?2.new—other—javescript----javescript SourceFile—创建.js后缀的文件.
注意1:如果同时引入jquery函数类库和引入自己写的js文件,需要把jquery放在前面。
注意2:
(1)在引入js文件的script标签内部不要书写JS代码,例如:
(2)不要将引入JS文件的script标签自闭,因为可能会导致文件引入失败,如下:
浏览器加载网页执行顺序:从上到下从左到右
html文件:
.js文件:
:也可以直接在元素上绑定点击事件,在事件执行的方法中写JS代码
onclick: 鼠标点击事件,里面写的是一个方法。
JS的注释符号和Java的注释符号相同,如下:
1、基本数据类型(5种)
(1)数值类型(number) 只有一种浮点型
在JS中,所有的数值在底层都是浮点型,但是在处理和显示的过程中会自动的和整型进行转换。
(2)字符串类型(string)
在JS中,字符串类型属于基本数据类型,字符串常量可以使用单引号或者使用双引号引起来。例如:
另外,JS中字符串类型有对应的包装对象(String),在需要时会自动的和包装对象进行转换。
字符串详解
(3)布尔类型(boolean)
布尔类型的值有两个,分别为true和false。
(4)undefined类型(了解)
undefined类型的值只有一个,就是undefined,表示变量未定义(但不是指变量没有声明)。
是指声明了变量,但没有为变量赋值,该变量的值默认就是undefined。
(5)null类型(了解)
null类型的值也只有一个,就是null,表示空值。
可以作为函数的返回值,表示函数返回的是一个空的对象。
注意:null和undefined类型的变量是不能调用函数或属性的,会抛异常!
2、复杂数据类型
主要指对象(JS的内置对象、自定义的对象、函数、数组)
内置:即 ,自带的不用自己new可以直接使用。 js中除了5种基本类型都叫对象.
JS中是通过关键字声明变量,声明的变量是不区分类型,可以指向任意的数据。例如:
声明时不区分类型,根据你赋的值区分类型。
另外,JS中多次声明同名的变量不会出现语法错误,例如:
在js里多次声明同名的变量,第二次声明不会生效,用的是覆盖的值。
每句话要加上分号,不加js会帮你断句加上,但有可能不准确。
一般:变量,方法,以()结尾的加上分号,以{}结尾的不需要加上分号,类似于java。
JS是严格区分大小写的!
js每句话以分号结尾,不写会帮你加上,但最好还是写上以防出现错误。
在js中,var定义变量实际上是有作用域的。
JS和Java中的运算符大致相同,例如:
JS中的语句和Java中的语句也大致相同
1、if分支结构
if分支结构用于基于不同的条件来执行不同的动作。语法结构如下:
2、switch语句
使用 switch 语句来选择要执行的多个代码块之一。语法结构如下:
执行原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。请使用 break来阻止代码自动地向下一个 case 运行。
3.1、for循环语句 – 循环代码块一定的次数
for 循环的语法结构如下: js中 没有 增强for循环
3.2 遍历数组
4、while循环 – 在指定条件为真时循环执行代码块
JS中while循环也分为while和do/while循环,下面为while循环语法结构:
while 循环会在指定条件为真时循环执行代码块。
代码实现如下:
prompt( 参数1, 参数2 )函数:在页面上弹出一个消息输入框,接收的参数1是在弹框中显示的提示内容,用户输入的内容会作为函数的返回值直接返回。
参数2, 是输入框中的默认值, 可以修改.也可以只写一个参数
可以接收用户输入的两个数值和一个运算符(+、-、*、/),根据运算符号的不同,对两个数值执行不同的运算。
代码实现如下:
遍历1~100之间的所有整数,求1~100之间所有整数的和,并输出到控制台;
代码实现如下:
遍历下面数组中的元素,将元素输出到控制台。
代码实现如下:
Array 对象用于在单个的变量中存储多个值。
JS数组的声明方式一:
var arr=( ); 没有这种写法
var arr={ }; 对象的声明方式
var arr=[ ]; 数组的声明方式
var arr=/xx/; 如果里面有内容的话是正则表达式的声明方式
JS数组的声明方式二:
数组中的细节问题:
(1)JS中的数组可以存储任意类型的数据
(2)JS中的数组长度是可以被任意改变的
数组的方法
函数就是一个具有功能的代码块, 可以反复调用
函数就是包裹在花括号中的代码块,前面使用了关键词 function。
js函数它是弱类型语言没有重载概念,它和参数的类型个数无关。js中所有的方法名都可以看成是一个变量名,所以只要方法名相同(和里面有没有参数无关)就会发生重写(覆盖)。js中的覆盖自己理解是整个方法的覆盖原有的方法,所以区分js中的方法只能是根据方法名来进行区分。
JS中声明函数的方式为: 里面的参数不写参数类型,只需要些参数的名字。
注意:js里面的函数名不能用关键字:如删除不能用delete,否则不起作用。
或者: 注意这种方法名是在前面写的。
调用函数都一样:
js中的匿名函数:匿名函数就是没有实际名字的函数,只能调用一次。 如:
扩展:js中可以把函数当做一个参数传递给另外一个函数。
对象是大括号,数组是中括号。
每个属性之间使用逗号隔开,最后一个不需要添加。
里面是若干键值对.
js中的所有键都是字符串,值可以是任意对象。
方法就是把函数放在对象里面,对象只有2改东西:属性和方法。
this.代表什么?拆开上面的代码看看
在js中可以通过apply控制this的指向
标准对象
内部对象(data,json)
1.data对象
转换
2.json对象
json是什么:
早期,所有数据传输习惯使用XML文件!
JSON(Javascript Object Notation) 是一种轻量级的数据交换格式。
简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
在js中一切皆对象,任何js支持的类型都可以用json来表示:number,String…
格式:
? 对象和map都用{}
? 数组和list都用[]
? 所有的键值对都是key:value
json字符串和json对象的转化。
很多人搞不清楚,json字符串 、json对象、js对象三者的区别。
原型对象
js,java,c#…面向对象;js有些区别!
类:模板,原型对象
对象:具体的事例
在js中这个对象需要换下思维方式。
原型: Es6之前继承的写法。
class对象
class继承 (ES6)
1.定义一个类,属性,方法
2.继承
本质:查看对象原型
原型链
浏览器介绍:
? js和浏览器关系?
? js诞生就是为了能够让它在浏览器中运行!
BOM:浏览器对象模型。
1.IE 6~11
2.Chrome
3.Safari
4.FireFox
5.Opera
三方浏览器:
qq浏览器
360浏览器。
window介绍:(重点)
Navigator:
screen:
location(重点)
document(重要)
(自己完成)声明一个函数fn,在函数中实现:遍历指定的两个数值(例如1和100)之间的整数,将是3的倍数的数值存入到一个数组中,并将数组返回。
1、声明fn函数
2、调用fn函数, 获取1~100之间是3的倍数的数值组成的数组
var arr = fn(1,100);
3、遍历数组中的元素, 输出在网页上(提示: document.write(“输出的内容”) )
DOM: document Object Model,文档对象模型,其实就是JS专门为访问html元素提供的一套API。
核心: 浏览器网页就是一个DOM树形结构。
-
获取: 获取DOM节点
-
更新:更新DOM节点
-
删除:删除一个DOM节点
-
添加:添加一个DOM节点
要操作一个DOM节点,就必须先获得这个DOM节点。
一下都是js原生代码比较长,将来都用jquery简写。
操作文本
js动态操作css
步骤:先获取父节点,在通过父节点删除自己:
注意:删除多个节点是,children是时刻变化的,删出节点时候一定要注意。
我们获得了某个DOM节点,假设这个DOM节点是空的,我们通过innerHTML就可以增加一个元素了,但是这个DOM节点已经存在元素了,我们就不能这么干了!会产生覆盖。
步骤:先获取父节点,在把子节点添加到父节点里面。
1.把已存在的节点追加到已存在的节点里面(默认追加到最后一行)
2.创建一个新的标签,实现插入
3.把已存在的节点追加到已存在的节点前面
表单是什么: form 本身也是一个DOM树
1.文本框
2.下拉框
3.单选框
4.多选框
…
表单的目的:提交信息
点击电灯可以实现开/关灯,代码实现如下:
注意:js中可以用一个对象表示一个标签,我们可以通过对象的属性表示标签的属性。
点击网页中的按钮对html元素进行操作
3个.css文件 换肤的css文件 省略没写。
– 根据元素名称创建指定名称的元素,返回的是表示新创建元素的js对象
– 通过父元素添加子元素,其中parent表示父元素,child表示子元素
– 通过父元素删除子元素,其中parent表示父元素,child表示子元素
– 获取当前元素的html内容(从开始标签到结束标签之间的所有内容),还可以设置当前元素的html内容(如果元素内部有内容,将会覆盖原有内容)
jQuery: Javascript Query JS查询
jQuery是一门轻量的、免费开源的JS函数库(就是JS的简单框架)
jQuery可以极大的简化JS代码
jQuery的核心思想:“写的更少,但做的更多”
注意:alt +/ 如过提示 No Default Proposals: 没有默认的提示
官网:jquery
轻量的:是指一个技术或框架对代码或程序的侵入程度是比较低的。或者说代码对该技术依赖程度越低。这个技术越轻,对该技术的依赖程度越高,这个技术越重。 技术越轻量越好,但是现在jquery也变得重了.
jQuery本质就是一个包含了很多函数的JS文件,如果要在某一个HTML中使用这个JS文件中的函数,就必须得将JS文件引入到HTML中(想使用jQuery,就得引入jQuery的函数库文件,就是一个JS文件)
(1) 可以极大的简化JS代码
(2) 可以像CSS选择器一样获取html元素
css中获取所有的div,给div添加样式:
jQuery中获取所有div,给div添加边框样式:
$=jquery 相当于是调用一个函数,里面传的是参数
(3) 可以通过修改css属性控制页面的效果
(4) 可以兼容常用的浏览器
比如: JS中的innerText属性、removeNode()函数、replaceNode( )函数 这些函数在某些浏览器中是无法使用的。//IE能用,火狐不能用
为了解决这些兼容问题: 功能和上面一样
jQuery中提供了相应的函数( text函数、remove函数、replaceWith函数 )
常用浏览器:谷歌浏览器、火狐浏览器、苹果浏览器、欧朋浏览器等
jQuery的函数库文件就是一个普通的JS文件,引入jQuery和引入JS文件的方式一样。
注意:一般是把这个jquery文件放在项目中而不是放在磁盘中,在引入。 因为写在磁盘里写绝对路径,将来拷贝项目路径就没用了没有这个文件,除非你连文件也复制。而放在项目中拷贝项目,连里面的文件也复制过来了,比较方便。这个文件笔记中有。
第二阶段----day06—day10------day06.07—jquery_example—js
大的是压缩之前的:学习或项目还没有发布的时候。 小的是压缩后的:项目发布,好处:用户访问页面加载小的js,减少流量的消耗。
解释: js是个目录,目录下的这个js文件jquery-1.8.3.js 。这个地方写的是相对路径 https://www.yc00.com/web/可以省略。也可以写绝对路径(写相对路径是因为把文件复制到了项目里。)
在引入jQuery函数库文件时,如果文件引入路径错误,则会导致文件引入失败,如下图:
问题描述:上面的代码在执行时,会报一个错误:
原因描述:在执行获取id为demo的元素时, h1元素还没有被浏览器加载到,所以获取不到h1元素。
浏览器重上到下顺序执行。
解决方式一:(需要挪代码)
将script标签移到body内部,也就是h1元素的后面
这样浏览器在加载时,会先加载h1元素,再执行获取h1元素的代码,由于在获取h1元素之前,h1元素已经被浏览器加载过了,所以后面再获取就能够获取到!
代码示例:
解决方式二:(不需要挪代码)
通常用在获取函数上.
将获取元素的代码放在文档就绪事件函数中,文档就绪事件函数会在浏览器加载完所有的html元素后(也就是加载完最后一个html元素时)立即执行。
由于当前网页中的所有元素都被加载了,h1元素肯定也被加载了,此时再获取h1元素就一定能获取到。
解决方式三:
将获取元素的代码放在一个自定义的函数中,并将该函数绑定在h1元素的点击事件上,当我们点击h1元素时会执行自定义的函数,函数执行时才获取h1元素,此时就能够获取到h1元素。
说明:点击事件执行顺序是,页面加载完成后才能点击按钮执行点击事件,仍然是先加载网页在执行js代码。3种方式最终实现的效果都是先加载网页在执行js代码。
总结:什么时候该使用文档就绪事件函数?
如果在获取元素时,获取元素的代码执行的时机,比元素本身加载的时间还要早,如果元素还没有加载就获取,必然是获取不到的。 可以将获取元素的代码放在文档就绪事件函数中,等浏览器加载完整个网页后,文档就绪事件函数才会执行,此时所有的元素都被加载了,再获取任何元素都能获取到!
jQuery提供的文档就绪事件函数(简写形式):
其完整写法为:
JS也为我们提供了文档就绪事件函数,其写法为:
对应css选择器
jquery中的选择器:$() 里面写一个字符串的参数,单引号双引号都可以, 里面的写法类似js,返回值是一个jquery对象。
测试:
练习1:添加员工信息
注意:用jQuery的对象调用方法不能用js提供的方法。
1、创建元素
2、添加子元素
3、删除元素
4、替换元素
1、html()函数 (类似于js中的innerHTML属性)
– 用于获取或设置元素的内容,比如为div、span、p、h1~h6、table、tr、td、form等元素设置内容。即包裹在开始和结束标签里面的内容,如果通过选择器匹配了多个元素,只能获取第一个元素的内容或者如果通过选择器匹配了多个元素,则会给所有的元素设置内容。因为匹配返回值只有一个而设置没有返回值可以设置所有的内容即便有标签也可以(这个标签会被解析对应的格式)。
2、text()函数 (类似于js中的innerText属性,innerText在部分浏览器中不兼容)
– 用于获取或设置元素的所有文本内容,即获取元素的所有内容(只获取文本,不获取标签,如果包含标签则会当成文本显示出来而不会解析成对应的样式。),如果通过选择器匹配了多个元素,可以将所有元素内部的文本都返回,text函数还可以为元素的设置文本内容(只能设置文本内容)。
3、val()函数 (类似于js中的value属性)
– 获取或设置表单项元素的表单(input/select/option/textarea)
即:即输入框框里面的值。
1、prop()函数 – 用于获取或设置元素的属性值
在jQuery1.6版本之后才有这个函数(这能获取固有属性:这个标签上自带的属性),1.6之前版本的jQuery可以使用attr()函数(这个属性是自定义属性或者固有属性)
2、css()函数 – 用于获取或设置元素的css属性值
遍历函数(each)
1、each() 函数
示例:
显示隐藏(show()/hide())
2、show()/hide() 函数
为什么要设置元素隐藏在网页上不显示,是为了以后更好的显示.
比如:百度上的登陆框,是点击之后才显示,不点击平常是隐藏的.
show() – 设置元素由隐藏变为显示
等价于:
hide() – 设置元素由显示变为隐藏
等价于:
元素显示状态(toggle()/slideToggle())
3、toggle()/slideToggle()
toggle() – 切换元素的显示状态, 如果元素是显示的, 则切换为隐藏, 否则切换为显示
slidToggle() –切换元素的显示状态, 如果元素是显示的, 则切换为隐藏,否则切换为显示,切换为显示为下拉状态,隐藏为收缩状态。
区别:切换效果不一样,toggle()是由一个点慢慢变大缩小而slidToggle() 是由一条线慢慢变大缩小。
获取当前元素的父和子元素(parent()/parents()/find())
4.parent()/parents()/find()
parent()-- 获取当前元素的父元素,类似于js中的parentNode属性。
parents()-- 获取当前元素的所有祖先元素。(即当前元素的所有上级元素,一般是body标签里面的元素。)
find() --获取当前元素内部指定的后代元素。如:
以点击事件为例,为元素绑定点击事件的方式为:
方式1(js版): 这种是写死在按钮里面
方式2(js版): 动态绑定js版
方式3(jQuery版):动态绑定jquery版
即: 用$() 把js对象包起来 里面没有双引号
jquery对象是一个集合. js对象只能表示一个元素.
通过JS的方式获取元素,返回的是JS对象,JS对象只能调用JS的属性或函数
通过jQuery选择器获取元素,返回的是jQuery对象(结构像一个集合),jQuery对象只能调用jQuery的属性或函数。
如果现有JS对象,但我们需要调用jQuery的属性或函数,可以将JS对象转成jQuery对象;
如果现有jQuery对象,但我们需要调用JS的属性或函数,可以将jQuery对象转成JS对象;
服务器:分为服务器硬件 和 服务器软件。在硬件服务器(计算机)上安装了服务器软件,才可以对外提供服务。
比如:让其他的计算机来访问当前服务器,为其他的计算机提供服务。
(1) 服务器硬件:是指在互联网上具有独立IP地址的计算机,比如我们自己用的计算机也可以作为服务器使用。
(2) 服务器软件:就是一个计算机程序,比如MySQL服务器软件,tomcat服务器软件。服务器软件分为很多类型,比如:ftp服务器,数据库服务器,web服务器软件,邮件服务器等。
(1) web服务器是指驻留在互联网上的某种类型的计算机程序。当浏览器访问服务器,请求服务器上的文件时,服务器将会处理该请求,并将请求的文件响应给浏览器,并会附带一些信息告诉浏览器如何查看该文件(即文件的类型),即专门接受客户端的请求并根据请求作出回应。
(2) web服务器是可以向 “发出请求的浏览器提供文档” 的程序,比如在访问百度时,其实就是在访问百度的服务器。
解释:
服务端,是为客户端服务的。服务的内容诸如向客户端提供资源,保存客户端数据。是实现游戏特色化的重要途径,也是最直接可以通过游戏表现出来的技术。
客户端,或称为用户端,是指与服务器相对应,为客户提供本地服务的程序。除了一些只在本地运行的应用程序之外,一般安装在普通的客户机上,需要与服务端互相配合运行。
一般来说,客户端就是我们使用的电脑(包括我们使用的浏览器IE,Firefox);服务器端就是存放网页与数据库数据的服务器。
如果说你玩《魔兽世界》,电脑上装的“魔兽程序”就是客户端程序,你连接的“服务器”就是是服务器端程序。
请求,响应:比如2个人之间的对话,我给你说一句话,另一个人在回复。
tomcat就是一个web服务器软件,是由apache组织提供的一款服务器软件,特点:小巧灵活,免费开源,简单易用。
下载地址:/
tomcat有很多版本,有解压版 和 安装版,还分windows (还分为32位和64位版)和linux版,根据自己的需求,选择对应的版本下载。
第一个:windows系统的解压版
第二个:linux或苹果系统
第三个,第四个:直接下第一个就行
第五个:windows的安装版
tomcat服务器运行需要jdk的支持(tomcat是由java语言开发的),版本对应为:
1、安装tomcat服务器
绿色版解压之后就可以使用(原则:安装的路径中不要包含中文和空格)
解压后还需要配置JAVA_HOME环境变量,该变量指向jdk的根目录,指定tomcat启动时使用哪一个位置的jdk。
2、启动tomcat服务器
如何配置JAVA_HOME环境变量:
变量名: JAVA_HOME
变量值: C:Program FilesJavajdk1.8.0_45
注意:变量值指向JDK的根目录(不是bin目录),变量值的后面也不要加分号;
2、启动tomcat服务器
启动、关闭tomcat服务器:在网页上输入,localhost:8080回车出现一只猫说明启动成功,
如果显示无法访问此网站,可能是服务器没开或者端口写错了。
localhost:8080 指访问当前电脑上监听8080的服务器,8080就是Tomcat.(因为一台主机上可能有很多服务器,不同的服务器端口号不同)
通过 [tomcat根目录]/bin/ 可以启动tomcat服务器;如果闪跳一下说明java_Home环境变量没有配置,或配置没有生效。
通过 [tomcat根目录]/bin/ 可以关闭tomcat服务器;
访问测试服务器:
在tomcat服务器启动后,服务器会默认监听8080端口,可以通过如下地址访问tomcat服务器的主页: (localhost是主机名:相当于银行的地址,端口号:8080,相当于办理业务的窗口号.
localhost: 本机的端口名
tomcat服务器在启动时,默认监听的端口是8080,这意味着,我们在访问tomcat服务器时,需要在主机名(localhost)或者IP地址(127.0.0.1)等后面加上端口。这样非常不方便。
可以将端口改为端口,因为80端口非常特殊,可以省略不写(只有80端口可以省略,其他端口在访问时必须得加上)
修改方法:找到 [tomcat安装目录]/conf/server.xml 文件并打开该文件,将文件中的 69 行的 标签上的 port 属性的值改为 80即可。
改完后,保存文件,重新启动服务器(只有在服务器启动时,才会重新加载server.xml文件)再次启动的服务器就会监听新的端口。
扩展问题:端口占用问题:
在启动tomcat服务器时,可能会遇到端口占用问题,如下图:
原因分析: 因为一个端口只能被一个进程(程序)所占用
情况一:可能是之前的tomcat服务器没有完全关闭,仍然在占用8080(或80)端口,导致服务器再次启动时,启动失败。(就是开第二次服务器之前的服务器没有关闭端口,还在占用)
点 x 关闭窗口可能会没有完全关闭(大部分都是关的掉),一个服务器只能占用一个端口。
解决方式:运行shutdown.bat文件,将tomcat按照正常流程再关闭一次即可。再次启动服务器,如果成功,则说明问题已解决,否则看情况二。
情况二:可能是其他程序占用了8080(或80)端口,导致服务器启动失败。(比较少)
解决方式:打开一个cmd窗口,通过 netstat -ano 命令查看当前系统中活动的进程,找到8080(或80)端口对应的进程编号(PID),根据进程编号将进程结束即可!
netstat: 命令,网络.
tomcat目录结构介绍
tomcat服务器安装根目录下有很多子目录,这些目录的作用是:
总结: 站点:网站
(1)虚拟主机就是tomcat服务器中配置的一个站点(tomact服务器可以配置多个站点,浏览器访问时不能区分比如,百度,新浪是不是在同一个服务器上运行的,他也不关心,他关心的是能不能访问时返回比如一个百度页面),在tomcat服务器中默认提供了一个localhost虚拟主机,这个主机的发布目录是webapps目录:
这个文件在: 148行
这样意味着,将Web应用放在webapps目录下,就表示发布到了localhost虚拟主机中。
(2)Web应用就是一个存放了很多Web资源(html、css、js、jsp、servlet、图片等)的目录,将Web应用发布到虚拟主机中,就可以通过浏览器来访问Web应用中的这些资源文件了。
注意:webapps不能直接存放资源,而是存放在一个目录下即web应用,在把目录在webapps下。
如:
解释: localhost:8080 ----先访问tomoact服务器 (因为把资源发布到了服务器上所以先访问服务器.)
abc-----在访问tomoact服务器下的web应用.
regist.html----访问web资源应用下的具体web资源文件.
在计算机网络中,localhost(意为“本地主机”,指“这台计算机”)是给回路网络接口(loopback)的一个标准主机名,相对应的IP地址为127.0.0.1(IPv4)和[::1](IPv6)。
localhost 指你所在的计算机本身。
在windows系统它成了127.0.0.1的别名 ,在Unix系统下,查看网卡配置会发现作为本地回环的方式,一定程度上使用localhost比127.0.0.1要快一些。
在Hosts文件中,localhost指向的IP是127.0.0.1这个关系是可以修改的。
其中news就是一个目录, 同时也是一个web应用程序, 其中可以包含很多的资源文件。
直接将Web应用的目录拷贝到虚拟主机所管理的目录下,就发布到了虚拟主机中
例如:将news目录拷贝webapps目录下,由于webapps目录是localhost主机默认管理的目录,所以就相当于将news应用发布到 了localhost主机中。(即:localhost:8080相当于写了webapps目录) 把文件发布到服务器上,服务器会随时检查.在控制台可以随时看到变化.(发送到服务器,解除发布)
目录结构: webapps目录—是tomact服务器下的目录,并且这个目录是localhost虚拟主机默认管理的目录.
web应用是webapp下的目录,里面管理的是web资源文件.
主机名----web应用----web资源文件.
通过如下路径规则就可以访问localhost主机下的news应用下的资源文件:
哔哩哔哩视频链接:
访问tomcat服务器主页:
访问news/hello.html:
能否将访问 news/hello.html 的路径缩短一些(比如只通过主机名就可以访问news/hello.html这个网页)
如果没有将 hello.html 配置为当前Web应用的主页,在访问 hello.html 时的路径为:
如果将 hello.html 配置为当前Web应用的主页,再次访问 hello.html 时的路径为:
在上的路径中,/hello.html 这个路径可以加,也可以省略。
注意:配置完成后可以写也可以不写.
将 hello.html 配置为当前应用的主页,方式为:找到 [当前Web应用]/WEB-INF/web.xml文件并打开,在web.xml文件的根标签内部添加如下配置:
配置完后,需要重启服务器,配置才会生效。
上面已经将news/hello.html配置为news应用的主页,访问hello.html时路径为:http://localhost/news/
如果不将 news 应用配置为默认的Web应用,在访问 news 下的 hello.html(主页)时的访问路径为:
如果将 news 应用配置为缺省的(默认的)Web应用,在访问 hello.html(主页)时的路径就变成了:
注意:配置为缺省的 这个应用名就不能再写了. 而配置的web应用主页配置完成后,也可以写也可以不写.
如何将 news 配置为缺省的(默认的)Web应用(缺省Web应用只能有一个)?:
将Web应用的名字改为一个大写的ROOT,当前Web应用就是一个缺省的Web应用,再访问这个Web应用下的资源文件时,访问的路径中就可以不用写Web应用的名称了。
war包和jar包都是java程序中的一种压缩包格式.
如果开发一个Java基础工程,可以将其中编译后的class文件和相关的配置文件打成一个jar包。
如果开发一个web工程,可以将一个web工程中的所有文件和目录打成一个war包,这样做的好处有:
打war包的方法是:
进入到web应用的目录下,将Web应用目录下的所有子目录和文件全部选中,右键压缩成一个 xxx.zip 包,再把 xxx.zip 改为 xxx.war即可!! 之后把这个war包放在webapps目录下.
需要注意的是,如果有以下问题,可能会导致war不会自动解压:
HTTP协议是用于规定浏览器和服务器之间的通信方式/规则
主要规定了浏览器给服务器发送的请求信息的格式
以及规定了服务器给浏览器发送响应信息的格式 (比如2个不同国家的人说话语言不同, 加一个规则用同种语言进行交流, 这就是HTTP协议.)
HTTP协议在工作时所遵循的基本原则:
IE浏览器的插件:HttpWatch,可以监听浏览器和服务器通信的内容。(比如 :公安局可以监听2个人之间的对话)
现在的浏览器,比如谷歌或火狐会自带这个功能,不需要在装这个插件。
在浏览器上的网页 F12 打开开发者工具—Network(网络)—在地址栏输入地址访问后(确定键)-----可以看到请求和相应的内容.
点击这个请求响应文件 但是这个格式比较乱,请求和响应混合在一起了看着不方便
需要安装一个插件—收费,没有发到笔记中.
1、请求行
(1)GET:表示请求方式,在HTTP协议中一共定义了7种提交方式,但是我们只用GET和POST。
(2)/news/hello.html:请求资源路径,表示浏览器请求的是哪一个Web应用以及哪一个web资源文件。
(3)HTTP/1.1:请求所遵循的协议和版本。
2、若干请求头 (请求报头)
请求头都是Key-Value结构,例如:
(之间有一个空白行,用于分隔请求头和请求实体)
3、请求实体内容
如果请求方式为 GET 提交,请求实体是没有内容的!
如果请求方式为 POST 提交,并且请求中携带了数据,请求实体中才会有内容!
content type 表示响应的内容类型 content:内容
? 响应实体的内容: 出现乱码是因为插件问题, 响应时已经解析好了,其实没有乱码问题.
? 浏览器发送的请求是html文件,服务器相应的实体内容就是一个网页.
1、状态/响应行
(1)HTTP/1.1:表示响应所遵循的协议和版本
(2)200:状态码,三位的数字,表示服务器对请求处理的结果。
(3)OK:描述短语(可以忽略),也表示服务器对请求处理的结果,和状态码表示的结果一致。
200说明请求已经成功了,ok有说明
2、若干响应头:也是key-value格式
3、响应实体内容
响应实体就是浏览器所请求文件的内容。例如:浏览器向服务器请求一个hello.html文件,服务器会找到hello.html文件,将文件的内容作为响应实体发送给浏览器。
1、问题1:请求方式什么时候是GET提交?什么时候是POST提交?
只有当使用表单(form),并且在表单上明确的通过method指定提交方式为POST时,请求方式才是POST提交,其他方式都是GET提交(AJAX除外,它可以随意指定)
思考:判断以下请求方式是GET还是POST?
2、问题2:GET提交和POST提交有什么区别?
主要区别体现在请求参数传输过程的不相同
GET提交:
URL地址: 在WWW上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位符),它是WWW的统一资源定位标志,就是指网络地址。 可认为由4部分组成:协议、主机、端口、路径
比如:http://localhost:8080/news/html http后面跟的是// ,路径资源是/分割.
其中网址的协议信息,网页常用两种:http:// 和 https:// 在网页浏览过程中显示这部分内容没有意义,因为 Chrome 会为 https 协议的网址提供更醒目的状态标识(位于地址栏左端)。
而在复制地址时,Chrome 会在文本前自动添补协议信息。
请求参数:比如 提交表单的用户名,密码.
- 将数据通过问号拼接在地址栏URL地址的后面,相对非常不安全。
- 将数据拼接在地址栏URL地址的后面,数据量是有限制的,通常不能超过1KB或者4KB。
POST提交:
- POST提交是通过请求实体将数据提交给服务器,不会显示在地址栏上,因此相对更加安全。
- POST提交通过请求实体提交数据,数据量理论上是没有限制的。
3、总结:
? 大部分我们用的还是get 提交,post提交还需要写表单等太过麻烦,我们一般也不需要提交数据.
- 如果只是单纯做一个跳转(如,从百度跳转到淘宝),请求中没有数据,尽量使用GET提交。
- 如果在请求中有数据,但数据量不大,并且数据没有隐私性,也尽量使用GET提交。
- 如果在请求中有数据,数据量比较大或者数据较为隐私,此时推荐使用POST提交。
整合的目的:将Tomcat服务器整合到Eclipse工具中,可以通过Eclipse启动、关闭tomcat服务器,更重要的是,可以非常方便的将在Eclipse中创建的Web项目发布到Tomcat服务器中运行。
后面框架springboot会有内嵌的Tmocat,这里不用纠结.
哔哩哔哩视频链接:/video/BV1wz411z73V
1、点击Window --> Preferences(偏好设置):
2、在偏好设置窗口中点击 Server --> Runtime Environments --> add:
? server (服务器) runtime:运行时间
3、在弹出的窗口中选择 --> Apache --> Apache Tomcat v8.5,需要注意的是,这里得根据自己安装的tomcat版本进行选择,比如我安装是8.5版本的tomcat,所以这里选择Apache Tomcat v8.5。
如果没有没有8.5说明eclipse的版本低,可以升级eclipse版本或者降低Tomact版本。
4、在下面的窗口中配置tomcat服务器的安装根目录,可以直接把路径复制到第二个输入框中;也可以点击后面的 Browse按钮在文件管理器中选择tomcat服务器安装根目录。
最后点击finish即可完成将Tomcat整合到Eclipse中的配置。
Apply and close:应用并关闭 ( apply申请,应用)
1、如果在创建Web项目时,Target runtime选项中没有配置可选的服务器,可以点击右面的选项进行配置
点击后进入下一步操作。
2、在弹出的窗口中选择 --> Apache --> Apache Tomcat v8.5,需要注意的是,这里得根据自己安装的tomcat版本进行选择,比如我安装是8.5版本的tomcat,所以这里选择Apache Tomcat v8.5。
3、在下面的窗口中配置tomcat服务器的安装根目录,可以直接把路径复制到第二个输入框中;也可以点击后面的 Browse按钮在文件管理器中选择tomcat服务器安装根目录。
最后点击finish即可完成将Tomcat整合到Eclipse中的配置。
4、上一步完成后,回到Web项目创建的视图窗口,再查看"Target runtime"选项,如下:
如果要将整合到Eclipse中的tomcat从Eclipse删除:点击Windows --> Preferences --> Server --> Runtime Environments,选中要删除的服务器,点击右侧的删除按钮即可删除,最后点击Apply and Close保存设置即可! edit:编辑, 可以更改服务器的位置。
上面讲解了如何将Tomcat整合到Eclipse中,整合之后,需要在Eclipse中创建一个Server(服务器)才可以进行启动tomcat、关闭tomcat等操作。
1、Eclipse中找到Servers窗口:
2、如果没有可以到Window --> Show View --> Other中搜索"servers",如下图:
3、在Server窗口中点击“No servers are available…”链接:
4、在弹出的窗口中,保持默认配置,直接点击完成
如果弹出的窗口中默认的服务器不是tomcat,则说明在此之前没有将Tomcat整合到Eclipse中。
5、在上一步点完成后,Eclipses左侧会多出一个Servers项目,Servers窗口中会出现创建的Server(比如:Tmoact v8.5 Server at localhost [Stopped,Republish]),也就是tomcat服务器。
server服务器和servers项目是配套使用的,这个项目放的是服务器的配置文件.
注意:①处的Servers项目不能关闭(close),更不能删除(delete)
如果将来服务器出错的话,想从新创建一个服务器. 2个都要删除.
? 选中服务器-----右键delete. servers----右键delete----勾选框表示从硬盘上彻底删除
6、在创建完Server后,双击tomcat,可以修改Tomcat服务器配置
(1)将Server Locations中的选项切换为第二个选项
(2)将Deploy Path右侧的输入框中的内容改为webapps。ctrl+s保存配置即可
以上配置是为了保证在Eclipse中发布Web应用到tomcat服务器中时,可以将项目发布到tomcat服务器的webapps目录下。
如果不配置,会导致tomcat服务器中webapps下的Web应用无法访问。因为整合之后通过eclipse启动服务器它会更改webapps的发布目录,这个发布目录就没用了.
7、如果要移除添加的Server,需要同时删除①处的Servers项目(右键delete,要彻底从硬盘上删除),以及删除②处的tomcat服务器(右键delete)
a) Start:用于启动tomcat服务器,如果已启动,则显示 ReStart,作用是重启服务器
b) Stop:用于停止服务器 或者点击红色按钮
c) Add and Remove:将Web应用部署到tomcat服务器中,或者移除服务器中部署的Web应用
也可以 在发布到服务器的文件上右键一个一个的 remove移除.( 移除发布到文件上的文件,一般c ,d配合使用.)
d) Clean:作用是将发布到Eclipse自己的webapps目录中的项目删除再重新部署
e) Clean Tomcat Work Directory:作用是将在tomcat运行过程中存入work目录的文件删除
问题1:tomcat服务器启动失败-1
如果在启动服务器时,服务器启动失败,并弹出窗口显示如下异常信息:
根据上面的描述信息,可以看出是8005、8080、8009端口被同时占用了,此时只有一种可能,就是之前已经启动了tomcat或者之前开启的tomcat没有完全关闭导致的。
解决方式:到tomcat安装目录找到bin目录中的shutdown.bat文件,双击运行将服务器关闭,再到Eclipse中启动服务器即可!
问题2:tomcat服务器启动失败-2
如果在启动服务器时,服务器启动失败,并弹出窗口显示如下异常信息:
解决方法:
(1) 可以先将服务器中所有的Web应用移除(在服务器上右键,Add and Remove–>Remove All–>Finish)
(2) 再分别执行服务器右键选项中的clean和Clean Tomcat Work Directory
(3)再次启动服务器,如果启动没有报错,则说明tomcat服务器本身没有问题,再将要运行的项目发布到tomcat中,再次启动服务器,观察是否有错误。如果有则说明是项目本身的问题。
(4)如果移除了所有的Web应用,启动tomcat服务器报错,则说明tomcat本身就有问题,可以将tomcat服务器重新配置一次到Eclipse中(将tomcat和Server项目删除,再点击链接重新创建Server)
servlet(小服务程序)
Servlet是由SUN公司提供的一门动态Web资源开发技术 (web: 网络)
Servlet本质上是一段Java程序,和之前的Java程序不同的是Servlet程序无法独立运行,没有main函数需要将Servlet程序放在服务器中(比如tomcat服务器),由服务器调用才可以执行。
Servlet: 服务器端的Java程序.
Servlet是运行在服务器端的Java程序,其作用是什么?
其作用是对服务器接收过来的请求进行处理(也就是服务器接收请求,servlet处理请求)
Servlet的生命周期:
1、初始化阶段,Servlet容器会创建一个Servlet实例并调用【init()】方法;
2、处理客户端请求阶段,每收到一个客户端请求,服务器就会产生一个新的线程去处理;
3、终止阶段,调用destroy方法终止。
jsp:能写一段java代码的HTML 右边是个数据库
第一步: 写一个类,实现一个Servlet接口或者继承Servlet接口的子类(GenericServlet/HttpServlet),并实现其中的方法
第二步: 在web应用的web.xml文件中配置Servlet程序对外访问的路径。
因为servlet编译后的程序放在class目录下,而class目录是放在web-inf目录,而web-INF目录不能直接访问,需要在web.xml文件进行配置路径。 默认是/+类名.
Eclipse在创建一个Servlet时,会在web.xml文件中生成Servlet配置,所以不需要我们手动配置。
以上是Web项目在工程视图(Project)和包视图(package)下结构,推荐使用包视图!
工程视图比较混乱,上面的也不用,推荐包视图,结构更清晰。
wibdow–show view—other—package Explorer
1、创建一个Web工程: 在左侧窗口中, 点击鼠标右键 —> New —>
Dynamic Web Project。 动态项目中可以有静态资源也可以有动态资源
即: 静态项目可以开发静态资源,动态项既可以开发静态也可以开发动态.
2、接着会弹出如下窗口:
注意:
双击打开web,xml文件 点击source进入编辑状态,有可能会误报错误。j
解决:选中web.xml文件–右键Validate(校验)
(1) 3.0版本不会创建web.xml文件,
并且创建Servlet时也不会在web.xml文件中生成Servlet相关的配置信息, 记得改为2.5。
(2) Target runtime选项中如果没有可选的服务器,可点击右侧的"New
Runtime…"进行配置。
详细操作步骤在《5.2配置Target runtime(Web项目运行环境)》
3、Eclipse中创建的Web工程的目录结构:
1、选中项目中的src目录,鼠标右键 —> New —> Servlet
因为:servlet本质是java程序,而java文件放在 src这个源码目录下.
2、在弹出的窗口中,根据提示填写内容:
3、点击finish即可完成Servlet创建过程, 创建好的Servlet如下:
第一行是序列化的id,这里不用序列化,但删除后会报一个警告,所以不用删。
通过Eclipse创建Servlet,默认继承HttpServlet。由于HttpServlet也是Servlet接口的子类,让HelloServlet继承HttpServlet,相当于间接实现了Servlet接口。
继承HttpServlet类,默认会覆盖doGet方法和doPost方法,两个方法的作用为:
浏览器发送请求,服务器调的是service方法,它是继承的HttpServlet方法,service内部会对请求方式进行判断,如果是get提交就调用get方法,如果是post提交就调用post方法。
注意:servlet 不一定有get和post方法。但一定有service方法
doGet方法:当浏览器发送请求的方式为GET提交时, 将会调用doGet方法来处理请求
doPost方法:当浏览器发送请求的方式为POST提交时,将会调用doPost方法来处理请求
提示:如果当GET提交和POST提交处理代码相同时,可以将代码写在其中一个方法里(例如写在doGet中),并在另外一个方法(例如doPost)中调这个方法。这样一来,不管是GET提交还是POST提交,最终doGet方法都会执行,都会对请求进行处理!! 这样写可以少写代码.
在通过Eclipse创建Servlet时,会自动在web.xml文件中进行Servlet相关信息的配置
(注意:如果是复制Servlet类文件,但配置信息不会跟着复制,需要自己手动添加配置,否则复制的Servlet将无法访问!)如果F2把Servlet的类名更改,Web.xml文件里的全称限定类名需要手动更改类名,下面的访问路径改不改都行。下面的路径改名可以欺骗别人的路径,但实际上还是这个类名的路径。
在浏览器中出现带包名的路径,说明没有对应的配置信息。
关于上面的配置信息:
a) Eclipse每创建一个Servlet,就会在web.xml文件中添加两个标签:<servlet>和<servlet-mapping>标签(可以将这两个标签看成一个组的标签)
b)<servlet>和<servlet-mapping>标签内都会有一个<servlet-name>标签,标签的内容可以更改,但要求更改后的这两个<servlet-name>标签的内容也必须一致。
c) <servlet-class>标签用于配置Servlet类的全限定类名(即包名+类名)
需要注意:如果在创建Servlet后修改了Servlet类的名称,这个地方也要一起更改,否则将会出现"ClassNotFoundException" 即类找不到异常 404 ,而下面的访问路径改不改都行,改的话相当于伪装一下路径,但实际上还是访问的这个文件路径.
d)<url-pattern>标签用于配置浏览器以什么路径访问当前Servlet(即Servlet对外访问的路径),默认的路径是:/+类名
例如:上面为HelloServlet配置的<url-pattern>为 /,因此我们在浏览器中的访问路径则为:
总结运行方式:
test: 选中方法名右键—test util
java项目—右键—run as—java application
servlet----右键—run as — run on server
在创建项目时如果误删了库: 程序肯定会报错.
如果删的是Apache Tomact v8.5(tomact服务器的运行环境):在项目上右键(包视图)—Bulid Path — AddLibraries–Server Runtime—next—选中服务器—finish
如果误删了jdk(jdk的基础核心类库),在项目上右键(包视图)—Bulid Path — AddLibraries—jre … ----Alternate JRE或者默认的jre库。
上面的是自带的jdk最好不要用。
1、访问Servlet方式一:
若是第一次运行,需要先创建tomcat服务器,即在Servers窗口中点击链接可创建一个tomcat服务器,且只需创建一次即可!
(1)发布项目到服务器:在服务器上右键 --> 点击 "add and remove" 将当前web项目发布到服务器中,并点击完成。
(2)启动tomcat服务器:在服务器上右键 Start 即可启动服务器
(3)通过浏览器访问Servlet:打开本地浏览器,通过路径访问,即可访问Servlet程序
注意: 比如: 这个day09这个项目反而在 它里面的WEB-INF目录下,而WEB_INF这个目录下的资源不能直接访问.
这个文件里的路径不能直接访问,不像html,图片,js可以根据他所存放的路径直接访问。servlet访问跟它存放的位置是每有关系的,建一个servlet会在xml文件多一行配置信息对外访问的路径,默认是类名,但有没生成的情况,这需要自己编译。在浏览器中填写 标签中的路径,区分大小写。 标签内容:参考 ( 4.24 Servlet在web.xml中的配置)
servlet文件的对外的访问路径格式即: 主机名_端口 + 项目名称_ 类名/
浏览器访问的路径:不能看左边建项目eclipse的结构,而是看发布到tomact服务器的目录
2、访问Servlet方式二: 不用自己写路径也不用自己发布。顶上面3步。
在eclipse左边的项目中servlet的目录上 或者 在这个servlet的文件内容上右键----run as …
(1) 在运行的Servlet上点击右键 –-> “Run As” —> “1 Run on Server”
(2) 在弹出的窗口中,直接点击完成即可!!!
(3) 运行结果如下:
或者打开浏览器,复制上图中的路径:
http://localhost:8080/Hello/HelloServlet,粘贴到浏览器的地址栏中,回车访问:
第一种:
第一步,发布到服务器: 在服务器上右键(就那个server)—Add and Remove.(窗口左边表示可发布的目录,双击发布到右边,在右边双击移除发布)—finish 服务器下面可以展开看到项目。
也可以在项目上右键进行移除。
第二步,启动服务器:
第三步,访问servlet: servlet发布后的目录在web-inf目录不能直接访问,用的是在web.xml文件中的配置的路径. 默认是 / +项目名.
第二种: 在servlet内部或则在最左侧项目目录中的这个servlet文件上----右键—Run As—Run on Server
点完之后会弹出一个框—选择一个服务器(接下来它会帮你把项目发送到服务器,在启动服务器,在打开浏览器去访问servlet)
即:这种方式一步顶第一种方式三步,更简单.
项目是如何发布到服务器的:
可以理解为: 把整个项目的webcontent目录发布到服务器webapps目录下 ,在把webcontent改为项目名 ,接着在把 build中的 classes目录也放到web-inf目录下.(class目录存放的是编译后的class文件)
左边建的动态web项目的build并不显示这个 classes文件,在工作空间里有.
怎么快数找工作空间:项目上右键-------show in —System Explorer—会直接到工作空间的目录.
meta_INF:meta-INF目录实际上就是描述jar文件中的信息的一个目录,我们不用关心
当通过eclipse将day09项目发布到服务器中,是直接将day09拷贝到服务器中对应的目录下吗?
发布的过程如下?
Tomcat服务器中默认只有一台虚拟主机,叫做localhost主机
而localhost主机发布web应用的位置是webapps。
将day09发布到localhost主机中,但为什么day09项目没有在webapps目录下?
--------------------------------------------------------------------------------------------------------
默认情况下,发布一个Web应用到localhost主机中,只需要将Web应用的目录拷贝到webapps目录下即可完成发布!
而将Eclipse和Tomcat整合之后,2种,发布的路径默认被改成了:
[工作空间].metadata.pluginsorg.eclipse.wst.server.core mp0wtpwebapps
如何修改Eclipse默认发布Web应用的目录位置:
(1)关闭服务器,将服务器中的所有应用移除
(2)在服务器上右键 --> clean
(3)双击tomcat服务器,在弹出窗口中找到 Server location, 选择第二个选项
并将下方的Deploy Path改为: webapps 改完后,Ctrl+s保存配置即可!!
参考:在Eclipse中创建Server及移除Server 笔记目录下有
通过浏览器访问服务器中的一个Servlet程序,这个Servlet程序是如何执行的?又是如何被调用的?
localhost/Hello/HelloServlet
参考<<Servlet调用过程图>> 现在的笔记第二阶段课前资料+讲义(day06-day10)day09.10-servlet核心图片
这个servlet实例是单例的(即servlet在服务器里只有一个对象),这个对象是浏览器发请求第一次访问servlet时,服务器发现还没有 实例就会通过类的全限定类名通过反射来创建这个实例,然后用到这实例的方法如 service方法处理请求.
通过Eclipse可以直接创建一个Servlet类,这相比通过记事本等文本编辑工具创建Servlet,可以节省配置Servlet的时间,提高了我们的开发效率。
但是通过Eclipse生成的Servlet类中包含了许多我们不需要的注释和默认实现代码,这些每次都删除也非常占用时间。
接下来可以通过添加模版代码的形式,来生成Servlet的内容,以便于提高我们的开发效率。
1、先创建一个Servlet,将其中的内容修改为自己期望的模版格式,并复制其中的内容,例如:
2、点击菜单栏中的window --> Preferences:
3、在出现的窗口左侧依次点击:Java --> Editor --> templates
–>(在右边的窗口中) 点击New… :
4、在出现的新窗口中填写如下内容:
5、替换包路径和类名(作用是在新建Servlet生成的Servlet模版中使用当前类的包路径和类型)
光标停留在此处: alt+ /
效果如下:
效果如下:
6、点击OK保存,创建新的Servlet文件,测试:
将Servlet中的所有内容全选删除,并输入"servlet",接着按 “Alt+ /”
提示即可生成自己想要的Servlet模版内容!
效果如下:
上面使用的是Servlet2.5版本,其实JavaEE5.0规范的子规范,要求运行环境最低是JDK5.0,tomcat5.0。
而Servlet3.0规范是JavaEE6.0的子规范,其要求运行环境最低是JDK6.0,tomcat7.0。若要使用Servlet3.0规范,则需要在创建动态Web项目时就要指定。具体用法是,在Eclipse中创建动态Web工程时,指定创建的“动态Web模块版本”为3.0或以上版本,此时创建的Web工程中默认是没有web.xml文件的。**
思考:如果没有web.xml文件,那么如何配置Servlet的访问路径呢?
通过在servlet类上加个注解的方式进行配置Servlet访问路径。下面来几个Servlet3.0的示例。
1、在3.0以上版本的动态Web项目中创建一个Servlet,如下:
其中 这个注解的作用就是配置当前Servlet的访问路径为,完善doGet方法中的代码,直接运行Servlet。
可以在浏览器中看到如下效果:
2、@WebServlet注解中可以配置多个访问路径
在@WebServlet注解中配置的访问路径,其实前面省略了属性,完整写法为:
,只不过value可以省略
由于在源码中属性其本质是一个字符串数组,因此可以为value属性赋值为一个数组直接量。例如:
将HelloServlet类上的注解改为如下形式:
在浏览器中运行效果为:
3、可以将value属性替换为urlPattern属性,效果一样
在浏览器中运行效果为:
request对象 response对象
注意:servlet类里,doget 和dopost方法可以有也可以没有,而service方法是必定有的,不写是因为使用父类的 service方法
request是代表HTTP请求信息的对象,response是代表HTTP响应信息的对象。
当浏览器发请求访问服务器中的某一个Servlet时,服务器将会调用Servlet中的service方法来处理请求。在调用service方法之前会创建出request和response对象。
其中request对象中封装了浏览器发送给服务器的请求信息(请求行、请求头、请求实体等),response对象中将会封装服务器要发送给浏览器的响应信息(状态行、响应头、响应实体),在service方法执行完后,服务器再将response中的数据取出,按照HTTP协议的格式发送给浏览器。
(不直接把响应的数据 响应给浏览器而是放在 response对象中,因为直接发送响应的格式不对,也可能有多个请求.)
每次浏览器访问服务器,服务器在调用service方法处理请求之前都会创建request和response对象。(即,服务器每次处理请求都会创建request和response对象)
在请求处理完,响应结束时,服务器会销毁request和response对象。
问题1:什么是请求参数?
所谓的请求参数,就是浏览器发送给服务器的请求中携带的数据(不区分请求方式),例如:通过表单向服务器提交的用户名、密码等,或者在超链接后面通过问号提交的数据,都是请求参数。 (get提交可以用表单,和URL地址的方式,post提交可以用form表单等)
问题2:如何获取请求参数?
代码示例:
问题3:如何解决获取请求参数时的中文乱码问题?
servlet文件中写中文的乱码问题, 这个事请求参数中的乱码问题.
在获取中文的请求参数时,可能会出现乱码问题(和请求方式、tomcat服务器版本有关),具体可以分为以下三种情况:
(1)如果请求是GET提交,并且tomcat是8.0及以后的版本,GET提交的中文参数,在获取时不会出现乱码问题!(8.0以后的tomcat包括8.0在获取GET提交的中文参数时,已经处理中文乱码问题。)
思考为什么post提交都会有乱码问题?
因为post提交接受的不仅仅是一个文本(文本可以用utf-8直接接收,可能是一个文件,图片,音频转成2进制不能看。
(2)如果请求是POST提交,不管是哪个版本的tomcat服务器,在获取中文参数时,都会出现乱码问题。因为tomcat底层在接收POST提交的参数时,默认会使用iso8859-1编码接收,而这个编码中没有中文字符,所以在接收中文参数时,一定会出现中文乱码问题!
解决方法是:通知服务器在接收POST提交的参数时,使用utf-8编码来接收!
注意:这行代码不会影响GET提交,只对POST提交有效!
这行代码要放在任何获取参数的代码之前执行!
(3)如果请求是GET提交,并且tomcat是7.0及以前的版本,GET提交的中文参数,在获取时会出现乱码问题!
解决方法:在[tomcat安装目录]/ conf/server.xml文件的(修改端口的)Connector标签上,添加一个 URIEncoding=“utf-8” 属性,如下:
同时在[Eclipse]/Servers/[当前tomcat服务器对应的配置目录]/server.xml文件中,在Connector标签上,添加一个 URIEncoding=“utf-8” 属性,同上! 因为它有可能用的是安装Tomact自带的xml文件,改一个仍有肯能是错的,所以2个都改保证正确.
请求转发是服务器资源的一种跳转方式,即当浏览器发送请求访问服务器中的某一个资源(A)时,该资源将请求转交给另外一个资源(B)进行处理并且由资源B做出响应的过程,就叫做请求转发。
请求转发和重定向都是资源的跳转方式,但是跳转的过程有所不同。
请求转发的特点:
请求转发实现: get方法中的参数请求的对象和响应的对象.
代码示例:
以前没用框架用servlet+jsp+javabin进行开发,通常用转发+request对象上的map集合从servlet传数据到jsp.
用框架后在传数据时从controller传数据到jsp也是用request对象上的map+请求转发.
这个request上的 map集合通常又叫域对象.
注意域对象的范围是一次请求,2次请求传数据就不行了.(因为请求转发是一次请求,域对象是同一个,所以,只有保证request是同一个数据才能传过去)
如果是2次请求(重定向),与对象是一次请求结束后销毁里面携带的参数当然也跟着销毁.而创建的新的域对象没有这个参数也就不能携带数据.
那么如何在多次请求中携带数据? 用session
总结: request域对象用在一次请求中,而session用在多次请求中.
request在实现转发时,通过request.setAttribute方法和request.getAttribute方法带数据到目的地时,就是通过request对象中的map集合带数据,这个request对象上的map集合以及request对象所在的范围即称之为是一个域对象。
如果一个对象具备可以被访问的范围,通过这个对象上的map集合可以在整个范围内实现数据的共享。这样的对象就叫做域对象。// pageContext request session application (4个域对象,第一个第四个不怎么用现在) Attribute:属性
在request对象上提供了往域对象(map)中存数据的方法以及取数据的方法:
request域对象所具备的三大特征:
生命周期:在服务器调用Servlet程序的service方法之前,会创建代表请求的request对象,在请求处理完,响应结束时,会销毁request对象。
作用范围:在一次请求范围内,都可以获取到同一个request对象。
主要功能:和请求转发配合使用,从Servlet带数据到JSP(带数据到目的地)
? 参数 属性
扩展内容: request对象的getParameter和getAttribute方法有什么区别?
- getParameter()方法是用于获取(从浏览器发送过来的)请求参数的,请求参数不能设置,只能是浏览器发送给服务器,在服务器端再通过getParameter方法获取请求中的参数(只有get方法没有set方法)
- getAttribute()方法是用于从request域中获取域属性时用的,域属性得先存入到域中(即得先通过setAttribute方法将数据存入request域中),再通过getAttribute()方法从域中获取。(这个是先存在取,而请求参数是取)
response是代表HTTP响应信息的对象。
由于服务器在通过response获取的流发送数据时,默认使用iso8859-1编码,而这个编码中没有中文字符,所以在通过response获取的流发送中文数据时,会出现乱码问题。
解决方法是:在响应数据之前,通知服务器使用utf-8发送数据。 response :响应
在浏览器上—F12开发者工具----network() 网络,可以查看多少个请求.
当浏览器向服务器发请求访问某一个资源A,资源A在响应时通知浏览器需要再进一步请求才能获取到对应的资源,浏览器再次发请求访问服务器中的资源B,最终由资源B响应浏览器要获取的资源,这个过程叫做重定向。
也就是说: 浏览器发送请求给 服务器A,服务器在返回一个请求给浏览器通知浏览器访问服务器B.浏览器再根据这个响应访问浏览器B. 但是这个之间是没有间隔的速度很快,即看起来像浏览器发送请求到服务器,由服务器B响应。其实中间是先发送到服务器A的。
重定向的特点:
实现代码:
代码示例:
总结-1:请求转发(forward)和重定向(redirect)的区别?
总结-2:什么时候用请求转发(forward)?什么时候用重定向(redirect)?
以上就是本篇文章【JAVAWEB-NOTE02:JS:forEach函数遍历、jQuery:文档函数完整写法, append方法,each方法、服务器客户端服务端的概念,tomcat,HTTP、servlet】的全部内容了,欢迎阅览 ! 文章地址:http://sicmodule.glev.cn/quote/4112.html 行业 资讯 企业新闻 行情 企业黄页 同类资讯 网站地图 返回首页 歌乐夫资讯移动站 http://sicmodule.glev.cn/mobile/ , 查看更多