安装目录
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.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的所有内容作为 响应体 发送给浏览器。
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
确定访问路径: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 表示创建目录 ,从.开始(当前目录)
修改发布项目名
注意:在myeclipse下修改项目时,发布名称没有修改的。
GenericServlet 抽象类,与协议无关的实现,称为:通用实现,及提供共有内容。
快速获得ServletConfig 4个api
this.getServletContext() 获得ServletContext对象
this.getInitParameter(name) 获得初始化
提供init()方法,用于完成初始化功能
如果复写 init(ServletConfig) 必须手动调用父类的init方法,及super.init(config),如果不写之后极易出现空指针异常。
HttpServlet 本身是抽象类,但没有抽象方法。
是抽象类表示不能创建实例,没有抽象方法,不要求子类必须实现方法。
提供两个service方法
一个生命周期的service(ServletRequest,ServletResponse)
用于处理http请求方法 service(HttpServletRequest,HttpServletResponse)
根据请求方式提供相应的方法 doXxx(HttpServletRequest,HttpServletResponse)
get请求:doGet(HttpServletRequest,HttpServletResponse)
post请求:doPost(HttpServletRequest,HttpServletResponse)
Servlet是单例,一生只有一个实例。
多个线程同时执行doGet方法,存在线程并发问题(安全问题)
解决方案:不要使用成员变量
初始化操作:复写init()
业务操作:doGet 、doPost
ServletContext对象:this.getServletContext()
所有的servlet都必须在web.xml配置
注意:配置当前使用的servlet(父类HttpServlet和爷类GenericServlet不要配置的)
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
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项目的初始化
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/")
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 文件