Web基础笔记
HTML;CSS;JavaScript:用户在浏览器里面看到的内容的全部;
服务器的概念:
平时上网的时候浏览器打开看到的就是上述的内容,这些内容的来源?
从网络上得到的。从服务器里面通过网络得到的。
什么是服务器?
一台计算机;但是这台计算机需要具备一定的特征,能被用户通过网络使用浏览器来进行访问的功能;
服务器提供这样的功能;用户连接上网络;同时用户在浏览器上输入正确的网址---构成了上网的正确的流程。
服务器如何就能提供这样的功能?
安装特定的软件,然后运行起这个特定的软件(让软件起作用)。
服务器:运行了特定的服务器软件的计算机;计算机,安装服务器软件,运行服务器软件服务器软件运行的特征:基本一直运行,一般不会关闭
网站如何实现:文件夹的形式,里面有HTML页面,样式,JS,图片,其他的资源,(现场直播的程序)
服务器软件的运行和网站内容的文件夹都是网站能被访问的必要条件,但并不是充分的条件。
想成功访问还有一个条件:必须把网站的内容和服务器结合起来;必须把网站的内容交给服务器来管理。对外提供一个访问的方式,对内对网站的内容进行管理。
服务器软件很多,不同的服务器软件的共性:对外提供访问的方式,对内管理网站内容;区别:对不同语言和技术实现的程序进行识别和运行处理。
Tomcat服务器软件:Java语言的识别
IIS服务器软件:微软的语言
协议:
规定了统一的格式,方式,处理流程等;
规则,套路
不同的应用会有不同的协议;
从理论上来讲:自己能不能设计一个协议?能,就是一个规则;
网络协议:网络上使用的多种规则;规定了不同网络应用的方式;
浏览器和服务器之间共同遵守的规则:HTTP协议
HTTP协议:Hyper-Text Transfor Protocal
HTML是超文本标记语言;
FTP:File Transfor Protocal
SMTP:Simple Mail Transfor Protocal
SOAP:Simple Object Access Protocal
HTTP协议:规定了浏览器和服务器之间数据传输的格式,方式,处理的规则等。
RFC2616---HTTP协议的详细描述
对于协议的详细的描述:严格;很少修改(法律);即使修改也应该尽量减少对之前的影响
网址+回车:有一个request出去了
服务器得到这request,根据这个request产生response发回给你;
第一行:必须的;
GET:请求的方式;
常见的请求方式2种:Get Post
Get:提交的数据会在地址栏显示;长度有限
Post:提交的数据不会在地址栏显示;长度无限/test/test.htm:请求的资源名称
HTTP/1.1:使用的协议及其版本
从第二行开始:键值对(可选)
对第一行的内容进行补充说明
第一行:HTTP/1.1 200 HTTP 200 c8
补充:raw 原始的;原生的(图像图形的处理)
服务器产品Tomcat简介:
针对Java语言实现的一个服务器产品;
软件;使用的时候需要把程序运行起来,一直运行;
Tomcat:
解压版(推荐)
安装版
解压后:
bin:可执行的程序;启动,关闭(其他平台)
conf:configuration,配置文件
配置文件的格式:
文本文件
*.properties:以键值对的形式保存信息
*.xml:以标签的形式来保存信息
配置文件的内容会在服务器启动的过程中被读取,只后如果发生修改,则在下
次启动的时候才会发挥作用
lib:运行时需要的一些支持的jar包
logs:服务器的运行日志
temp:运行时产生的一些临时文件
webapps:web applications
work:网站运行过程种产生的一些需要的文件
补充:批处理文件
特征:*.bat
运行:可以直接运行
在DOS里面,可以运行的程序只有2种,*.com *.exe
问题:有些复杂的应用,需要每次都顺序执行多个可执行程序,麻烦;
解决:使用批处理文件,将可执行文件的名称按行编写,然后执行批处理的时候会依次执行可执行文件。
打开DOS窗口后如果修改了环境变量,需要重新打开DOS窗口才起作用
tomcat服务器的启动需要:
catalina_home:你的tomcat的存放目录
java_home:你的JDK的存放目录
2个环境变量的支持
服务器成功启动后,把我们的网站内容交给服务器来进行管理,一定要按照服务器的特定的方式来进行。
把网站文件夹放到服务器的webapps文件夹里面就可以了。
浏览器使用HTTP协议的标准的访问方式:
http://localhost:8080/test/test.html
第一部分:http 协议
第二部分:localhost:8080 服务器的地址以及端口号
HTTP协议默认的端口号:80
tomcat默认的端口号:8080
第三部分:/test/test.html 访问的资源名称
网站的文件夹放到webapps里面,就可以被服务器自动识别和管理。
如果放到其他位置,所谓的虚拟目录,也可以,但是要配置;
xml格式的配置文件:语法要求严格,大小写敏感;所有的标签必须结束;
把网站交给服务器来进行识别和管理的2种方式;
设计网站的内容;通过上述2种方式之一交给服务器进行识别和管理,启动服务器,通过浏览器进行测试。------ 部署
使用这样的方式;页面还是提前编写------静态网站(网站里面所有的内容都是固定的)
满足不了需要;我们需要内容是变化的(随着时间;随着访问者的不同)-------动态网站
C/S结构的网络应用程序:
B/S结构的网络应用程序:
联系:基于网络的,涉及到网络数据的传输
区别:
C/S:QQ;网络游戏(魔兽)
B/S:淘宝;学生学籍管理系统
C/S:需要客户端软件;对机器硬件有要求;需要安装软件(需要磁盘空间;写注册表)B/S:对软件没有特殊的要求(浏览器是计算机的标配的软件);对硬件几乎没有要求;不需要维护,升级软件;
C/S:Client/Server
B/S:Browser/Server 未来的发展的方向
B/S:服务器压力大;显式效果没有C/S好;
需要解决:HTML+CSS+JS的产生的问题
途径:提前编写;不能应付所有的需要
搜索引擎:google baidu
提前编写只能解决一部分问题,有一些页面没办法提前编写,只能是在请求到来的时候,根据请求的内容即时产生HTML+CSS+JS
可以通过程序来实现动态产生HTML的功能;
使用程序逻辑,结合网络数据输出,就可以实现动态HTML内容的输出;
输出的内容可以五花八门;唯一不变的是流程;
有一个接口规定了这个流程:Servlet
开发Servlet的流程:
1.写一个java类,实现Servlet接口(实现接口里面的5个方法)
2.编译java类:需要把Tomcat/lib/servlet-api.jar拷贝到jdk安装目录/jre\lib\ext下
3.把编译后的class文件放到网站文件夹的特定的位置(不但要让服务器识别,而且后面
还需要服务器来调用执行):在网站的根文件夹下创建WEB-INF文件夹(大写),在这个文件夹里面创建classes文件夹(class文件就放到这里)和web.xml(在这里配置,告诉服务器Servlet的访问方式)文件
4.Servlet的class文件拷贝到classes文件夹的时候要符合java包的规范
5.web.xml的内容可以参考tomcat/webapps里面已有的web.xml文件的内容
6.
7.
常见问题:
●servlet-api.jar拷贝到相应的目录,依然说“包找不到”
配置环境变量:path=JDK安装目录/bin;
java_home=JDK安装目录;
●javac不是命令
原因:path路径没有配置或者配置不正确
●Servlet拼写不正确
总结:
●服务器的概念以及具体的服务器产品Tomcat
●协议的概念:
●HTTP
●动态网页产生的技术Servlet
回顾:
HTML+CSS+JavaScript组成了用户在浏览器里面看到的所有的内容,最终用户需要的内容;服务器端需要提供这些内容;提供的方式对用户(浏览器端)来讲是透明的。
服务器端如何给用户浏览器提供这些内容?
●提前编写好
●通过程序来实时产生HTML+CSS+JavaScript
无论那种,都需要有一个动态执行的程序来管理,这个程序就是服务器软件,Tomcat就是其中的一种;
创建动态网站的流程:
1.写编写我们的网站文件夹里面的内容
a)HTML页面;CSS;JavaScript;图片;视频;Flash;音乐;静态内容
b)程序:产生上述内容的程序;编译;放到特定的文件夹;web.xml里面进行配置
2.将文件夹交由服务器来管理和识别
a)将网站文件夹放到tomcat文件夹/webapps 里面
b)在tomcat文件夹/conf/server.xml 文件中进行配置
3.启动服务器
4.通过浏览器进行测试
程序:产生HTML+CSS+JavaScript的程序;
这个程序在哪里?
在网站里面,是网站内容的一部分,动态(现场直播)产生HTML的,可以把它当页面来看待;
这个程序应该具备的功能:
具备接收客户端信息的功能
根据客户提供的信息,进行相应的处理,还应该具备向客户端浏览器返回HTML 代码的能力
对于这个程序的编写提出的要求:
我们随便写的程序(Java类)不具备这样的功能;这个程序的运行是由服务器来完成的,不是由我们自己来决定的。
必须要具备特定的功能,接口的概念;
Servlet里面的方法正是服务器能够识别和管理和运行的接口。
我们编写Servlet接口的实现类
●首先,它是一个普通的Java类;
●特定的方法:
1.destroy() 销毁的方法销毁这个类的对象
2.getServletConfig() 得到Servlet的配置,返回ServletConfig对象
3.getServletInfo() 得到Servlet的信息,返回字符串
4.init() 初始化的方法---初始化这个类的对象
5.service(ServletRequest request , ServletResponse response)
手动编写一个动态网站,里面写一个Servlet的实现类,进行调用的测试;
这种方式比较麻烦:手动;类必须要实现5个方法;但是5个方法并不是任何时候都有用。如何简化:
手动:使用工具
练习:
把上面的例子改写,把Servlet接口的实现类改成GenericServlet的子类;
练习:
把上面的例子改写,把Servlet接口的实现类改成HttpServlet的子类;
Servlet编写的方式:
1.实现Servlet接口,需要实现其中的5个方法(麻烦,原始,不推荐)
2.继承自GenericServlet类,只需要重写其中的service方法
3.继承自HttpServlet类,针对Http协议的Servlet,进行了一定的优化,只需要重写其中
的do***()方法(简单,直接,容易理解,推荐)
使用MyEclipse开发Web应用:
1.创建web项目(Web Project)
2.写servlet;在src下;会自动配置
3.测试:
a)服务器的设置:可以在myeclipse里面指定一个(不推荐使用它自己带的);一劳
永逸;
b)部署我们的项目到这个服务器
c)启动服务器
d)打开浏览器进行测试
创建项目的时候,项目名称就是磁盘上项目文件夹的名称;
Context Root URL名称是将来通过浏览器访问时候的名称;
部署项目的项目的时候,是把项目文件夹里面的WebRoot文件夹的内容拷贝到服务器的webapps下面,目标文件夹的名称是Context Root URL名称;写完Java代码后,会自动编译然后自动拷贝到WEB-INF/classes里面,包会自动创建和管理。
我们自己根据具体的业务编写Servlet类,完成以后就交给服务器来管理和调用执行;
服务器调用执行的流程:
用户在浏览器里面访问我们的servlet的映射地址;服务器会在该网站的web.xml文件中找对应的路径的配置,然后根据其对应的servlet-name来匹配对应的servlet-class;只后会在内存里面查找该类的对象;如果有,直接调用该对象的do***的方法执行就可以了;如果没有,先new一个该类的对象,之后初始化,然后再调用do***的方法进行处理。
Servlet的生命周期:
一个处理登陆的Servlet如何应付同一时间多个登陆的请求的处理?
多线程的方式:效率高;
CGI程序:Common Gate Interface
对于一个特定的应用,以多线程的方式使用一个Servlet类的对象,效率高;
用户登陆;用户名zhangsan,密码123456算登陆成功,给用户显式登陆成功的信息,否则显式登陆失败的信息;
表单;action属性就是我们servlet的访问路径;从服务器自动封装的request对象里面取用户和密码,然后参考自动生成的代码编写输出的HTML的内容;
Servlet类的命名规范:遵守Java类的命名规范的基础上以Servlet结尾;
Servlet可以理解为动态产生的页面,可以接收客户端浏览器提交的数据信息,然后想客户端浏览器发送根据提交数据产生的页面的HTML代码。
Servlet就是一个普通的Java类,直接或者间接实现了Servlet接口;
Servlet的使用需要交给服务器来管理和支配;在代码中可以使用Java语言的所有的特性;
接下来,我们可以在Servlet的init方法里面取得这里的信息
通过request对象来取得客户端浏览器里面的提交的请求信息,获取的方式有2种:
●String value = request.getParameter(“表单里面name属性的值”);//可以取得文本框,密码
框,单选框,下拉框,多行文本框
●String[] value= request.getParameterValues();//可以取得多选框的值
练习:写一个用户注册的页面:用户名,密码,性别,爱好,学历,个人简历。提交到Servlet 里面,在Servlet里面获取所有的信息,然后以一个反馈的页面的形式打印出来;
提示:
●页面需要修改编码方式
●表单在设计的时候细节:name属性,默认选中,value值
●Servlet里面一般将doGet和doPost方法共享
●针对表单提交的数据内容,可能需要修改请求信息的编码
问题回复:
注册后的反馈页面里面有乱码?
看是个别中文乱码还是全部中文乱码?
全部:说明整个输出的页面编码设置有问题;
个别:页面的编码设置应该没有问题,区别一下乱码和正常的中文的使用。
确定这些乱码信息的来源,从来源来分析是来源的问题还是输出的问题;把来源在控制台上输出一下
消化解决问题的思路。
回顾:
Servlet
What:Java类,它的对象可以动态产生页面的代码,实现动态网站的内容。
When:当内容无法提前确定的时候需要写Servlet来让它动态产生。
Where:随便,但是编译后的字节码文件需要拷贝到网站的文件夹里面,而且有特定的位置,而且目录层次要和类的包的结构一致;
Who:程序员来写,服务器来用,由客户的访问将两者结合起来
How:是个在服务器端运行的Java程序。
编写:其实就是要实现一个特殊的接口Servlet;具体编写方法有三种;
使用:写源代码;然后编译;放到特定的位置;配置;部署;启动服务器;测试HttpServletRequest接口:该接口的实现类封装了用户提交的请求信息的所有的内容;这个封装过程由谁来完成?服务器
HttpServletResponse接口:该接口的实现类封装了给客户端浏览器反馈信息的所有的内容和功能,所有的反馈操作都需要通过这个对象。
用户登陆,成功有一个反馈的页面,失败有一个反馈的页面;
一般不推荐在一个do***的方法里面输出太多的内容;
我们的一个动态网站里面是由大量的页面和大量的Servlet组成;页面和Servlet交织的关系。如何在Servlet里面打开一个HTML页面或者其他页面。
拷贝项目的时候需要修改:
1.项目名称(项目所在文件夹的名称)
2.浏览器访问路径(修改项目名称这个并不会自动修改)
问题:
404错误:路径的问题
Web项目里面路径的问题的解决方案:凑
在Serlvet里面跳到新的页面的方式:
服务器端跳转(转发):
request.getRequestDispatcher("../ok.html").forward(request, response);
客户端跳转(重定向):
response.sendRedirect("../error.html");
以上两种方式的共性:都可以打开新的页面内容(路径的问题自己解决)
区别:
●服务器端跳转地址栏不变;客户端跳转地址栏变化(服务器端跳转看到的是2;客户端
跳转看到的是3)
●服务器端跳转依然可以得到第一个页面提交的表单数据;而客户端跳转则无法得到第一
个页面提交的表单数据;
练习:凑地址的方式;两种跳转的区别;
使用Serlvet完成下面的案例
案例:留言板
功能描述:用户注册,用户登陆;登陆成功后打开所有留言列表页面,登陆用户可以发布新的留言;可以删除自己发布的留言;可以修改自己发布的留言。
数据库表:用户表;留言表
用户表:ID,username,password
留言表:ID,title,content,pubTime,pubID
数据库创建代码示例:
--创建数据库
--进入系统库,检查
use master
go
--在系统库的表中检查要创建的数据库是否已经存在
if exists(select*from sysdatabases where name='notes') drop database notes
create database notes
on primary
--在这些代码里面,一般不会出现大括号,双引号,分号
--数据文件的设置
(
name='notes',--逻辑名称
filename='d:\notes.mdf',
size=3,
filegrowth=1
)
log on
(
name='notes_log',--逻辑名称
filename='d:\notes_log.ldf',
size=1,
filegrowth=10%
)
go
--创建数据库成功
--创建数据库里面的表
--进入创建好的你的数据库里面
use notes
go
--先检测数据库表是否存在
if exists(select*from sysobjects where name='users')
drop table users
create table users
(
id int not null identity(1,1)primary key,
username varchar(10)not null unique,
password varchar(10)not null
)
go
if exists(select*from sysobjects where name='note')
drop table note
create table note
(
id int not null identity primary key,
title varchar(50)not null,
contents varchar(255)not null,
pubtime datetime not null,
pubId int not null
)
go
alter table note
add constraint FK_note_users_id foreign key(pubId)references users(id)
编写数据库公关类
常见问题:
●“NullPointerException”的解决思路:找主语;
●常量的命名规范:全大写
用户登陆---显式所有的留言---给用户一些操作(发布;删除自己的留言,修改自己的留言)
回顾:
●设计数据库:约束,关系(数据库越完善越好,后面代码顺畅)
●创建Web项目:项目文件夹名称和访问名称;拷贝项目的时候注意需要改两个名称
●写数据库公告类:必须要放到包里面(理论上不是必须的)
●把你的数据库公告类进行测试
?TCP/IP连接的问题,服务启动的问题;驱动程序的问题;
?问题出现了?
◆根据错误提示,有针对性的解决;
◆回归原始:先打开企业管理器,看能不能使用;
●编写页面
●编写处理的Servlet
?Servlet的目标是产生动态页面,能不能产生静态页面?当然可以
?把HTML代码嵌入到Java代码里面输出
?单双引号的问题:合理搭配
?路径的问题:凑(该加的加,该退的退;根据实际情况决定)
●静态页面有2个:登陆页面(首页);注册页面
●处理登陆的Servlet
●如果登陆成功:跳转到新的Servlet---显示所有留言列表的Servlet
●如果登陆不成功:跳转到登陆页面
●注册成功:跳转到登陆页面
●注册不成功:跳转到注册页面
●显式留言列表的Servlet有一个发布留言的链接
●点击连接后,打开发布留言的Servlet
●在发布留言的Serlvet里面点击发布留言---提交留言到插入数据库的Servlet
●提交留言到插入数据库的Servlet如果成功;打开显示所有留言列表的Servlet
●如果发布不成功,继续打开发布留言的Servlet
●Session:会话,针对每一个访问者的一个容器,里面可以存放任何的信息和当前的用
户关联,不同用户即使都访问同一个页面或者Servlet,这里面的内容可以区分清楚,不会混淆。
●在用户登陆成功的时候,可以将用户的一些信息放进Session里面,然后在任意的位置
都可以重新取出来用。
Servlet,HttpServletRequest,HttpServletResponse,HttpSession
编码的处理
客户端浏览器请求内容的获取
向客户端浏览器发送HTML内容的实现
HttpSession对象的理解和使用
使用URL拼凑的方式模拟表单数据的提交
表单里面的使用隐藏域
数据库问题的解决:回归原始---加打印语句
除了登陆页面和注册以外,其他的页面(Servlet)全都不允许没有登陆的人访问,如果没有登陆访问的话,直接跳转到登陆页面。
Session里面内容的检测。(抓特征)
Session简介:
HttpSession是一个接口;规定了一些特定的操作方法,具体的载体是由服务器提供,一般类名我们并不知道,也没有必要知道;
用来区分不同的浏览者并且可以存储一些关于这个浏览者的信息,然一个网站的内部任意都可以取得里面的信息内容。
这个对象存储在什么地方?服务器内存里面
多少个?多少个访问者多少个这个对象。
正是这个对象的使用解决了我们前面说的HTTP协议是一个无状态的协议。
每个访问用户的这个对象如何得到?通过请求得到
HttpSession session = request.getSession();//有则返回,无则创建并返回
HttpSession session = request.getSession(boolean);//如果传入true的话,等同于上面的,如果传入false,有则返回,无则返回null
往这个对象里面放数据
session.setAttribute(键,值);//键的类型是String,而值的类型是Object
从这个对象里面取已经放入的数据
Object o = session.getAttribute(键);//一般都需要再进行类型的转换
提示:每个访客一个对象,所以不能没有顾忌的放大量的信息,一般放一些标示性的内容。数据尽量要简单,要小。
什么情况下session对象会失效:
?invalidate();方法
?超时maxInActiveInterval();
?浏览器关闭
?服务器关闭
数据库公告类:
?驱动名称,URL等都写在源代码里面,需要将其剥离出来
?文本文件:本身没有任何限制,导致解析麻烦,很难统一
?属性文件:*.properties,以键值对的方式存放信息
?XML文件:*.xml,使用标签来存放信息
属性文件的操作:
?new对象
?和文件关联
?获取属性
select * from users where username='wangwu' and password='123456'
回顾:
最初的目标:HTML的内容动起来。
使用程序来产生HTML的代码,使用统一的方式进行网络流的输入输出。
Servlet正是这样的程序。如何产生?所有java类里面代码的使用在这里没有任何的限制。所以可以使用前面的所有的基础里面介绍的内容:程序逻辑;集合类,JDBC;
Servlet的特殊性:专门用来产生HTML代码的,不是随意产生的,和用户在客户端浏览器里面执行的操作有关。这个类里面的功能必须和客户端浏览器里面的操作有关。
HTTP协议:request,response
Servlet:服务器端运行的java程序,用来接收客户端的请求信息,并根据相应的业务逻辑产生响应,运行和管理是由服务器负责,我们编写,服务器使用,统一一个规范尤为重要了。接口刚好可以起到这样的作用。
目标:
●理解Servlet的概念
●精通Servlet的编写:三种方式
●轻松用口语描述Servlet
●Servlet的生命周期
●request,response接口,HttpSession接口
●Servlet的配置
●手动实现动态Web网站(不借助任何工具)
使用Servlet来实现动态HTML内容的功能。
缺点:
特殊的场合使用Servlet麻烦的很。
有一个页面,里面90%的内容都是死的。10%的内容是需要通过程序来产生。
为了10%的内容,付出90%的不必要的代价。
Oracle 微软
静态网站:已经无法满足用户的胃口
Servlet技术
目标不变,手段修改ASP
固定的内容照写,碰见变化的内容再使用代码来输出。
JSP技术
https://www.wendangku.net/doc/5118145590.html,
JSP技术
目标:动态产生HTML的内容
Servlet是在Java里面嵌入HTML
JSP是在HTML里面嵌入Java
学习:如何在HTML里面嵌入Java代码,特殊标记;嵌入的内容都有那些?
JSP是以页面的身份出现,不过和HTML页面的代码有区别的是它里面可以嵌入Java代码。JSP页面存放的位置?服务器端保存
JSP在服务器端保存的位置有没有什么特殊的规定?没有,HTML能放哪里JSP就能放哪里。JSP里面既然可以有Java代码,显然是不能直接发给客户端浏览器,怎么解释?
间接发给客户端浏览器,间接的过程就是执行这些Java代码的过程,这个过程当然是由服务器来完成的。
服务器里面可以有HTML,JSP,Servlet
JSP和Servlet都要交由服务器来管理和执行。
JSP转换成纯HTML,如何完成?Servlet来完成
JSP在第一次被访问到的时候会转换成一个Servlet代码,同时编译,以后的访问就直接调用这个编译后的Servlet就可以了。
为什么你的JSP页面在第一次访问的时候比较慢?
第一次有转换成Servlet的过程,有编译的过程
从第二次开始就没有上面的这两个过程了,直接调用Servlet字节码文件就可以了。
out.println();
out.print();
区别:
仅仅控制输出的HMTL代码的格式,对于浏览器解析并没有任何的区别。
JSP页面的管理和访问也是由服务器来完成;在第一次被访问到的时候,服务器会将JSP页面转换成Servlet代码,然后编译成字节码文件,之后的访问就和Servlet的访问一致了。Servlet代码的构成:
导包
属性
方法
特殊的方法体(doGet,doPost)
JSP的语法:
●指令
不会产生具体的Java代码,会对转换后的Servlet起一些宏观的作用。
语法:
<%@ 指令名称键值对%>
指令名称:page include taglib
page指令:对页面做宏观的描述,通过后面的键值对。
language:页面里面代码的语言,默认是java
import:导包,逗号隔开
pageEncoding:页面的编码
一般写在JSP页面的最前面(不是必须的)
●脚本
语法:<% java代码%>
出现在方法体里面,类似我们的doGet,doPost方法里面
用的最多的
练习:打印九九乘法表
●表达式
语法:<%=表达式%>
功能:代替普通的输出out.println(变量名或者表达式);
提示:上述的内容都是并列的关系;不是嵌套关系
●声明
语法:<%! 声明的内容%>
功能:类里面的属性或者方法;语法要符合类的属性方法的语法
在声明里面能不能使用private?在脚本里面能不能使用private?
一般使用的较少。
●注释:
语法:<%--注释的内容--%>
提示:HTML注释会随着代码发送到客户端浏览器,而JSP注释不会
提示:
●HTML代码,JSP指令,JSP脚本,JSP表达式,JSP注释,JSP声明是并列关系;
●各自的特殊语法<%什么%>来标识不同的内容;
●搞清楚每一部分在转换后的Servlet的位置;
JSP的基本概念:
JSP(Java Server Page)的目标和Servlet一致,都是为了实现动态页面的技术,具体实现手段不同。
JSP是在HTML里面嵌入Java;JSP的根基是HTML;更容易理解,编写,使用(无需放到特定位置,无需配置)
Servlet是在Java里面嵌入HTML;Servlet的根基是Java;编写,使用相对麻烦。
JSP页面运行的机理:在首次被访问到的时候会转换为Servlet,然后编译,之后被访问。JSP本质上就是Servlet。
JSP页面的内容:
●HTML:没有特殊的敌方
●JSP注释:<%--注释的内容--%>
和HTML注释的区别是不会发送到客户端浏览器,推荐
●JSP指令:<%@ 指令键值对%>
对整个页面的内容做宏观的描述,规定
一般写在页面最前面,但不是必须的
●JSP声明:<%!转换后的Servlet类的属性和方法的代码%>
类的属性和方法的所有语法都可以使用,public,private
这里的属性和方法在整个JSP里面都可以重复使用。
●JSP脚本:<% Java代码%>
这里的Java代码其实是转换后的Servlet的处理请求和相应的方法里面的代码。
所有这里声明的变量是方法里面的局部变量,和声明里面的属性要区分开
一个页面里面可以有多个脚本,配合被拷贝到Servlet里面,转换后会成为一个整体。
●JSP表达式:<%=表达式%>
简化输出,让变量显示在页面更加简单。
表达式后面没有分号
既然JSP和Servlet类似,我们可以在其中写Java代码,如何获得客户端的请求信息,如何向客户端发送响应?
Serlvet里面如何实现?
服务器会在方法调用的时候自动封装request和response对象作为参数。
在JSP里面请求和响应对象直接就可以使用。原因:以后代码会拷贝到service方法里面,而这个方法有两个参数,所以可以直接使用。
通过转换后代码的观察,我们得到结论:有很多在我们代码之前出现的东西,都可以在我们的代码中直接使用---------JSP内置对象:现成的可以直接拿来使用的对象。
request
response
pageContext
session
application
config
out
page
吃现成的,付出代价?名称的代码
练习:使用纯JSP完成用户登陆
一般没有显示的页面,纯功能的页面do***.jsp
doLogin.jsp doRegister.jsp doDelete.jsp doPubNote.jsp
问题:
1.我们在JSP里面写Java代码,居然不用处理异常,为什么?
我们的代码会被拷贝到一个try-catch的try块里面
2.request,session等在JSP里面可以直接使用,为什么没有导包?
转换后的Servlet代码里面,直接已经导入一些包了,可以认为默认已经导入的。
在转换后的Servlet代码里面取找答案。
JSP:
Java Server Page
What?在服务器端存在的动态页面
When?在需要Servlet的地方就可以使用JSP替代
How?
在JSP页面里面:
HTML代码
JSP指令
JSP注释
JSP脚本
JSP表达式
JSP声明
练习:在页面上显示该页面是第几次被访问。
你是第***个访问者
有了JSP技术或者Servlet技术,所有的动态网页都可以通过这两项技术实现。
JSP是以HTML为基础。是以显式为目的。
JDBC跟显示没有关系。
在JSP页面里面操作JDBC,现在可以实现,但是不是一个好的办法,很混乱。
解决思路:剥离,封装
在JSP页面里面不能出现任何的java.sql.*里面的类或者接口
如果信息非常多的话,在参数传递的时候会很麻烦,简化的方式:写一个类,让这个类的对象具有对应的属性,然后把该对象作为数据传递的载体,解决参数多的时候传递信息的问题。
这个数据传递的载体叫JavaBean
javaBean的语法规范:
●放在包里面
●属性是private
●所有的属性都要get和set方法,命名要规范,严格Camel命名法
●有默认的构造方法
第一种方法:
简单,直接
在需要和数据库发生关系的地方不顾场合直接拼凑SQL语句,和具体数据库关系密切,职责不清晰;不利于后期的维护,扩充,修改。
第二种方法:
职责明确,维护性,扩充性好,易于修改
代码量变大:需要JavaBean,封装数据库操作的类
JSP标准动作:
使用类似标签的形式把一些常用的代码封装进去了。
从外观上看是标签,但是背后代表的是常用的Java代码,所以要和HTML的标签区分开。语法严格。
●
代表new对象的java代码;对类里面要求有默认的构造方法
●
对代码的要求:表单里面的属性和Bean里面的属性名称要一致。get和set方法的命名要规范。系统会自动按照名字来找方法。
●
相当于打印的代码;要求你的Bean一定要有get方法;
●
就是把目标页面包含到当前位置
JSP也有include指令
两种包含的区别和联系?
联系:如果目标页面都是静态内容,两种包含没有任何区别
区别:如果被包含的页面里面有代码,则会出现区别,JSP动作是先将目标页面运行完后将显示的内容包含进来;而JSP指令是先把所有的内容包含进来后再运行。
●
问题:这是服务器端跳转还是客户端跳转?服务器端跳转
●
一般和include或者forward标准动作结合使用,用于在包含或者跳转的时候认为地给目标页眉传递参数。
JSP四种属性范围:
页面和页面直接要传递信息(数据),截止目前:
●表单提交:一要有表单,二是不能继续向第三,第四个页面再传递(转发例外)
●session
除了表单传递信息以外,可以使用四种属性范围来进行数据的传递,所谓的四种属性范围可以理解为4中不同的区域,将数据放置在某种区域(属性范围)里面,然后在该区域里面的所有页面都可以共享到这个数据。
1.page
2.request
3.session
4.application
放:setAttribute(“键”,”值”);
取:getAttribute(“键”);
在JSP页面里面放置:pageContext request session application
page范围:只在当前页面有效;
request范围:在服务器端跳转有效
session范围:在一次会话中有效,一个用户的一次访问过程中都有效
application范围:所有人在任何时候任何位置共享的
session范围和application有什么区别?
session是每人一份;而application是所有人共享一份
application:在线人员列表
注意:在哪个范围放的,在哪个范围取。