Servlet课上笔记html
这两天在学习servlet,课上本身动手记了了一些笔记,内容不是很详细,有些地方可能作的不是很明了,毕竟在课堂生仍是以听和练为主,因此你们要是看就对付看吧。java
Servlet:
一、什么是Servlet?
是一个java类,要按照servlet规范来编写,而且要部署在符合servlet规范的容器当中运行。其
做用是扩展web服务器的功能(生成动态资源,与CGI程序相似)。
请求a.html
——————————> |—— 动态————>CGI程序
browser 返回a.html apche
<——————————非动态————|
二、Servlet的优势:
(1)能够访问数据库
(2)方便地处理业务逻辑
(3)一个请求只会启动一个线程(CGI程序是一个请求启动一个进程),消耗的资源相对少
(4)多个请求能够共享同一个Servlet实例
(5)servlet能够在任何符合servlet规范的容器(tomcat/was/...)上运行,方便维护。
三、如何去写一个servlet?
step1:
写一个java类实并现Servlet接口或者继承HttpServlet。
step2:
编译(依赖servlet-api.jar)
step3:
打包
appName(应用名)
WEB-INF
classes(放servlet字节码)
lib(好比数据库驱动)
web.xml(部署描述文件:好比配置servlet-url)
step4:
部署 将第三步目录结构copy to 服务器特定的目录。
step5:
启动服务器
step6:
访问 http://ip:port/appName/servlet-urlmysql
四、安装服务器
(1)解压tomcat
(2)配置环境变量
JAVA_HOME
CATALINA_HOME:tomcat解压到的目录
PATH:CATALINA_HOME/bin
(3)启动tomcat
cd CATALINA_HOME/bin
linux:sh startup.sh
windows:startup.bat
(4)http://localhost:8080
五、服务端写servlet不用考虑网络问题
六、web服务器=servlet容器(符合servlet规范的web服务器)
linux
1)、Servlet的运行的基本过程:
http协议是应用层协议 将请求中的数据先解析而后生成对象
web
(1)请求(经过http协议) servlet (2)
——————————————> ————————>HttpServletRequest(对象)
browser 引 (3)
————————>HttpServletResponse(对象)
(7)响应 (4)而后
<—————————————— 擎 ————————> Servlet
调用service (5)处理请求
(6)引擎读取HttpServletResponse sql
第五步时能够从request中获取数据(方便),
也能够将处理的结果放到response 第四步先看要调用的servlet是否有对应
的实例,若无,则建立实例,如有再也不建立新的实例
数据库
第二步为何引擎要将请求中的数据转化成一个request对象?
由于servlet再也不须要考虑http协议。windows
step1 浏览器会将表单中的数据打包(http数据包)
step2 发送
(地址 http:ip:port/appName/pricing(action的值)
step3 服务器将请求地址去掉应用名以前的内容(包括应用名),保留应用名以后的地址
再将该地址与web.xml中的url-pattern做比较,找不到的话显示404
step4 找到
step5 若是servlet没有相应的实例则建立实例
step6 调service方法api
2)、Http协议浏览器
什么是http协议?
超文本传输协议,用于制订浏览器与web服务器之间数据交互的方式与数据自己的格式。
A.数据交互的方式
浏览器发送链接请求
服务器接受
浏览器将数据打包,发送
服务器处理完毕,数据打包,发送
, 发送完毕,关闭链接。
B. 数据包的格式
请求数据包(请求消息)
请求行:
请求方式(get/post)
要访问的资源路径(若是是get,包含请求数据)
协议的版本号(1.0,1.1)
若干消息头(浏览器与服务器之间的一些约定):
好比在消息头中,能够携带cookie。
又好比,在消息头中,能够告诉服务器,
当前浏览器支持的语言。
实体内容:
若是请求方式是post,则表单中的数据会存放到这儿。
若是请求方式是get,则数据会放到请求行(资源路径以后)
响应数据包(响应消息)
状态行:
协议的版本号
状态码
404:找不到资源
500:系统内部错误
200:正常
状态码的描述
若干消息头:
好比,告诉浏览器,以什么样的编码来显示返回的内容。
实体内容:
返回的处理结果。
练习:
计价
规则 产品的最终价格 = 原始价格 * (1 + 税率)。
界面:
pricing2.html
表单
原始价格 basePrice
销售城市 city 先依据城市,找到对应的税率(if...else)。
3 )、get/post方式:
get方式:
A. 表单默认提交的方式,浏览器地址栏直接输入一个地址,使用连接访问。
B. 表单中的数据会添加到请求行,放置的数据有限,并且数据会直接在浏览器的地址栏显示,不安全。
C. get方式,通常不适合用于浏览器向服务器提交数据。适用于请求某个资源。
post方式:
A.对表单,设置了method="post"。
B.表单中的数据会添加到实体内容里,能够存放大量数据。相对于get方式,会安全一些。(无论哪一种方式,都不是绝对安全的,由于浏览器不会对数据进行加密)
C.通常若是有大量的数据须要提交给服务器。
练习:
写一个ListEmpServlet,会返回一个
表格,表格中的内容是:
id name salary
1 zs 2000
4)、表单的处理
(1)若是得到表单中的数据
String request.getParameter(paramName);
//有多个同名的paramName
//好比 interest=fishing&interest=sleep
String[] request.getParameterValues(paramName);
(2)表单中的中文问题
step1:
对于html文件,添加<meta http-equiv="content-Type"
content="text/html;charset=utf-8">
要注意:该文件保存时所使用的编码必定也是utf-8
做用是:要求浏览器按照指定的编码来显示该文档。
step2:
在servlet中,使用request.setCharacterEncoding("utf-8");
要注意:此处的编码应该与meta中设置的一致
做用:设置request对象的解码所采用的编码。
默认状况下,request采用iso-8859-1编码来解码。
此外,还要使用response.setContentType("text/html;charset=utf-8");
做用有两个:
1、response中写入数据时,所使用的编码
2、生成一个消息头,要求浏览器按指定的编码来显示返回的数据。
(3) 数据库的中文问题(mysql)
对于某些版本的mysql jdbc驱动,须要告诉它,
数据库当前存放数据采用的编码是什么(把URL设置以下)
String url = "jdbc:mysql://localhost:3306/sd1005db2?" +
"useUnicode=true&characterEncoding=utf8";
create database name default character set utf8 指定数据库的编码 统一设定成utf8
5)、重定向
服务器向浏览器发送一个状态码302以及一个地址。
浏览器收到该状态码以后,会当即向这个地址发送请求。
特色:
重定向的地址是任意的(既能够是当前服务器上的某个地址,也能够是其它服务器上的某个地址)
浏览器的地址栏的地址会发生变化。
练习 按照servlet02工程的要求实现 学生信息的维护 id name age classname create table t_student( id bigint primary key auto_increment name varchar(50), age int(3), classname varchar(50)); 注意,中文问题