1:http协议:
<1>超文本传输协议:规定数据的格式
浏览器--->服务器:请求
String name = config.getInitParameter("username");
Enumeration<String> names = config.getInitParameterNames();
while (names.hasMoreElements()) {
String key = names.nextElement();
System.out.println(key);
System.out.println(config.getInitParameter(key));
}
服务器--->浏览器:响应
<2>请求的组成:请求头,请求体,请求行
请求行:请求信息的第一行:
格式:请求方式 访问的资源 协议/版本
例如:GET /day0801/1.html HTTP/1.
请求方式:GET:请求参数放在URL后面,参数有大小,没有请求体
POST:参数没有大小限制,有请求体,请求参数放在请求体中.
常见的请求头:
Accept: text/html,image/bmp --支持数据类型
text/html text/css text/javascript 大类型/小类型 mime类型
Accept-Charset: ISO-8859-1 --字符集
Accept-Encoding: gzip --支持压缩
Accept-Language:zh-cn --语言环境
Host: www.click369.cn:80 --访问主机
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --缓存文件的最后修改时间
Referer: http://www.click369.com/index.jsp --来自哪个页面、防盗链
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Cookie
Connection:Keep-Alive --链接状态
2.Servlet:运行在服务器端的小程序,定义了一个能被浏览器访问的规则,是一个接口.
作用:接受请求,处理请求,响应请求.
实现Servlet接口的三种方法:
1) 自定义一个类直接implements Servlet,并且实现里面的5个方法.
<1>:配置Servlet:web.xml文件中:
<!-- 配置Servlet,为了配置Servlet的访问路径 -->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>cn.itcast.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<!-- 设置访问路径,以/开头 -->
<url-pattern>/demo</url-pattern>
</servlet-mapping>
<2>:实现5个方法,并且发布项目,客户端访问,服务器端接收.
<3>:Servlet的生命周期:被创建(init())----->对外提供服务(service())---->关闭服务器(destroy())
init():做一些初始化的事.第一次被访问时,调用该方法,只调用一次.servlet是单例的,可能存在线程安全问题,尽量不要定义变量.,可以配置servlet的创建时机.
<!-- 修改servlet的创建时机:
负整数:默认值 -1,在第一次被访问时创建
非负整数:在服务器启动时创建
数字越小,优先级越高
-->
<load-on-startup>0</load-on-startup>
Service():提供服务,每一次访问都会调用该方法.
Destroy():服务器正常关闭时,调用该方法.
<4>:ServletConfig:配置对象.ServletConfig是一个接口,对象由服务器创建,当服务器调用init()方法时,作为参数传递给servlet.
作用一:获取初始化参数://获取全局域对象
String name = config.getInitParameter("username");
Enumeration<String> names = config.getInitParameterNames();
while (names.hasMoreElements()) {
String key = names.nextElement();
System.out.println(key);
System.out.println(config.getInitParameter(key));
}
作用二:获取全局域对象:因为ServletContext对象由服务器创建,若要获取其对象,要通过ServletConfig获取.
ServletContext context = config.getServletContext();
作用三:获取xml文件的配置的servlet名字.
String n = config.getServletName();
<5>.Servletcontext对象:
i:特点:由服务器创建;单例的.
ii:作用一:域对象:存储用户共享的数据
context.setAttribute("username", "lisi");
Object a = context.getAttribute("username");
context.removeAttribute("username");
作用二:获取文件mime类型:getMimeType(文件名称):
作用三:获取文件运行的真实路径:
真实路径:指服务器路径
getRealPath():
1.webRoot下:项目根目录下
2.WEB-INF下: 项目根目录下/WEB-INF
3.src下: 项目根目录下/WEB-INF/classes
注意:如果getRealPath("/"),获取的路径是项目的根目录
//根目录
ServletContext context = this.getServletContext();
String rootpath = context.getRealPath("/");
//System.out.println(rootpath);
//1.webRoot
String b = context.getRealPath("/b.txt");
System.out.println(b);
//2.WEB-INF
String c = context.getRealPath("/WEB-INF/c.txt");
System.out.println(c);
//3.src
String a = context.getRealPath("/WEB-INF/classes/a.txt");
System.out.println(a);
ServletContext只能用于web环境。如果是非web环境,则使用ClassLoader来获取真实路,比如我web项目里有一个普通的java工具类 我想获取文件的真实路径,那我就不用ServletContext,具体的步骤:
//1.获取该类对应的类加载器对象
ClassLoader loader = this.getClass().getClassLoader();
//2.获取文件运行的真实路径
URL url = loader.getResource("a.txt");
String path = url.getPath();
//注意类加载器来获取路径也有局限性 只能获取src目录下的文件
2)适配器模式:自定义一个类继承自GenericServlet类,(其中GenericServlet实现了Servlet的5个方法),只需要在自定义类中重写GenericServlet的service()方法.
1).适配器
2).对ServletConfig进行优化。提升config对象的作用域
3).实现了ServletConfig接口,简化对config对象的使用方式
3)自定义一个类继承HttpServlet类(其中HttpServlet继承自GenericServlet类)
重写doGet()和doPost()...方法 注意去掉super.doGet(); 和 super.doPost();