JavaWeb之servlet

1 回顾

1.1 tomcat

安装目录
bin目录:startup.bat、shutdown.bat
conf 目录(configuration):web.xml、tomcat-users.xml、server.xml
webapps目录:存放web项目
work目录:tomcat处理jsp工作目录
URL
http://www.itheima.com:8080/day06/demo/1.html
协议	域名|ip		端口	项目名称	资源路径
web项目
项目名称
	| -- WEB-INF 目录,通过浏览器不能直接访问
		| -- classes 目录:class文件,(对应java项目bin目录),classpath 类路径,src
		| -- lib 目录:依赖jar包
		| --web.xml 当前web项目配置文件
tomcat配置
1.修改端口号,server.xml     
3.虚拟路径
	方式1:server.xml  必须重启tomcat
	方式2:conf/Catalina/localhost/项目名称.xml  -->   可以不重启
4.虚拟主机
	server.xml   

1.2 HTTP协议

版本
1.0 一次连接,一次请求
1.1 一次连接,多次 请求获得不同资源

1.2.1 request
包含:请求行、请求头、请求体
请求行:请求方式 资源路径 协议
例如:GET /demo/1.html HTTP/1.1
请求方式:7种,常用:GET、POST
请求头
referer 用于防盗链,当从一个页面A通过《a》方法另一个页面B,在B页面有一个标记referer记录A页面的路径。如果直接访问B没有通过A referer返回null
请求体 post请求请求参数存放位置
get、post对比
get 将请求参数追加到url之后,第一个使用?,之后使用&,URL长度有限的,get请求请求参数有限的。
post 将请求参数添加到请求体,请求体没有限制,post请求可以请求任意内容。
1.2.2 response
包括:响应行、响应头、响应体
响应行:协议 状态码 对应描述信息
200 :表示请求正常
302 :页面跳转,必须与location 响应头结合
304 :读取页面缓存
404 :页面不存在
500 :服务器异常
响应头
Location: http://www.it315.org/index.jsp --跳转方向
Server:apache tomcat --服务器型号
Content-Encoding: gzip --数据压缩
Content-Length: 80 --数据长度
Content-Language: zh-cn --语言环境
Content-Type: text/html; charset=GB2312 --数据类型
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT --最后修改时间
Refresh: 1;url=http://www.it315.org --定时刷新
Content-Disposition: attachment; filename=aaa.zip --下载
Set-Cookie:SS=Q0=5Lb_nQ; path=/search
Expires: -1 --缓存
Cache-Control: no-cache --缓存
Pragma: no-cache --缓存
Connection: close/Keep-Alive --连接
Date: Tue, 11 Jul 2000 18:23:51 GMT --时间
Content-Encoding 压缩格式,GZIP格式
Content-Type:设置页面数据类型,使用MIME类型。格式:大类型/小类型[;参数]
例如:html编码 --> text/html;charset=UTF-8
Refresh ,刷新
格式1# refresh : 3 表示3秒钟刷新当前页面一次
格式2# refresh : 3;url=… 表示3秒钟后刷到指定的url
Content-disposition ,用于文件下载,值大部份为固定 “attachment;filename=1.jpg”
set-cookie 与 请求头 cookie 一起使用。
页面缓存 3个头可以从jsp页面复制



响应体
服务器 发送 给浏览器的内容。
例如:浏览器请求的1.html ,服务器将1.html的所有内容作为 响应体 发送给浏览器。

2 Servlet

2.1 介绍

java编写服务器端程序,server + applet = servlet
applet : java提供浏览器应用小程序,类似flash。(flex)
java定义规范(接口),必须实现接口:javax.servlet.Servlet接口
Servlet接口实现类:javax.servlet.GenericServlet 通用servlet实现
GenericServlet类子类:javax.servlet.http.HttpServlet类,基于http协议的实现。
servlet是服务器端程序,如果要使用浏览器必须是servlet配置一个访问路径URI

2.2 手动编写servlet

确定访问路径:http://localhost:8080/day07/HelloServlet
编写web.xml 配置servlet,配置文件确定servlet实现类及对应路径。


	hello
	com.itheima.servlet.HelloServlet


	hello
	/HelloServlet

编写实现类,继承HttpServlet,编写类 HelloServlet.java
package com.itheima.servlet;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;

public class HelloServlet extends HttpServlet{

public void doGet(HttpServletRequest request, HttpServletResponse  response ) throws ServletException, IOException {
	response.getWriter().print("abc 123");
}

}
将java编程class文件
D:\java\tomcat\apache-tomcat-7.0.53\webapps\day07\WEB-INF\classes>javac -cp D:\a
pache-tomcat-7.0.53\lib\servlet-api.jar -d . HelloServlet.java

-cp 指定依赖第三方jar,编译servlet,servlet-api.jar tomcat提供的
-d 表示创建目录 ,从.开始(当前目录)

2.3 创建web项目

JavaWeb之servlet_第1张图片

修改发布项目名
 
 
注意:在myeclipse下修改项目时,发布名称没有修改的。

2.4 GenericServlet总结

GenericServlet 抽象类,与协议无关的实现,称为:通用实现,及提供共有内容。
快速获得ServletConfig 4个api
this.getServletContext()  获得ServletContext对象
this.getInitParameter(name) 获得初始化
提供init()方法,用于完成初始化功能
如果复写 init(ServletConfig) 必须手动调用父类的init方法,及super.init(config),如果不写之后极易出现空指针异常。

2.5 HttpServlet总结

HttpServlet 本身是抽象类,但没有抽象方法。
是抽象类表示不能创建实例,没有抽象方法,不要求子类必须实现方法。
提供两个service方法
一个生命周期的service(ServletRequest,ServletResponse)
用于处理http请求方法 service(HttpServletRequest,HttpServletResponse)
根据请求方式提供相应的方法 doXxx(HttpServletRequest,HttpServletResponse)
get请求:doGet(HttpServletRequest,HttpServletResponse)
post请求:doPost(HttpServletRequest,HttpServletResponse)

2.6 Servlet总结

Servlet是单例,一生只有一个实例。
多个线程同时执行doGet方法,存在线程并发问题(安全问题)
解决方案:不要使用成员变量
初始化操作:复写init()
业务操作:doGet 、doPost

ServletContext对象:this.getServletContext()
所有的servlet都必须在web.xml配置
注意:配置当前使用的servlet(父类HttpServlet和爷类GenericServlet不要配置的)

2.7 配置

1.完全匹配:必须/开头,配置servlet访问路径。例如:/a/b/demo1Servlet,p 1将执行
2.不完全匹配:必须/开头、以结尾。例如:/a/,p 1、p 2、p 5将执行
/* 匹配任意
3.通配符匹配:必须 *. 开头,为字符结尾。例如: *.jsp ,p 4、p 5执行
4.缺省路径:/ 其他都没有匹配,将执行缺省。

例如:
p1 http://localhost:8080/day07/a/b/demo1Servlet
p 2 http://localhost:8080/day07/a/demo2Servlet
p 3 http://localhost:8080/day07/demo3Servlet
p 4 http://localhost:8080/day07/1.jsp
p 5 http://localhost:8080/day07/a/2.jsp
优先级: 1 优先 2优先 3优先 4

3 ServletContext对象

ServletContext 是一个接口:javax.servlet.ServletContext
tomcat为每一个web项目都创建一个ServletContext实例,tomcat在启动时创建。服务器关闭时销毁。
用途:在一个web项目中共享数据、管理web项目资源,为整个web配置公共信息等
ServletContext对象获取:this.getServletConfig().getServletContext() | this.getServletContext()
提供api
1.web项目中共享数据:提供属性操作  --xxxAttribute
	setAttribute(String name,Object obj ) 给web项目公共区域存放内容。(任意内容)
	getAttribute(String name) 通过指定名称获得内容
	removeAttribute(String name) 通过指定名称移除内容。
	如果不想使用数据,要么移除,要么关闭服务器。
2.整个web项目初始化参数
	getInitParameter(java.lang.String name) 获得指定名称,初始化参数的值
	getInitParameterNames() 获得所有的初始化参数的名称
	web.xml 配置 整个web项目的初始化
	

JavaWeb之servlet_第2张图片

	spring 在web项目中配置


3.获得web项目资源
	String getRealPath(java.lang.String path) 获得发布到tomcat下的指定资源路径
		例如:getRealPath("/WEB-INF/web.xml")
			获得实际路径:D:\java\tomcat\apache-tomcat-7.0.53\webapps\day07\WEB-INF\web.xml
	InputStream getResourceAsStream(java.lang.String path)  与getRealPath使用相同,返回不同
	getResourcePaths(java.lang.String path)  指定路径下的所有内容。
		例如:getResourcePaths("/WEB-INF/")

4 修改myeclipse servlet模板

1.赋值 “com.genuitec.eclipse.wizards”
2.确定myeclipse安装目录:
通过myeclipse.ini 获得 common 目录的位置

commons位置:D:\java\MyEclipse\Common\plugins

3.搜索指定的内容“com.genuitec.eclipse.wizards”

4.将jar复制出来进行修改,注意备份。
获得 Servlet.java 文件,解压出来进行修改

5.修改后的Servlet.java 文件

  1. 将 Servlet.java 添加到jar包,再将jar添加myeclipse

你可能感兴趣的:(Java,前端,servlet,tomcat,java)