Servlet:
HTTP协议:
协议:规定双方需要遵守的规则.
HTTP用来规定浏览器(客户端)与服务器之间需要遵守的规则
HTTP是基于请求和响应的模型
请求必须先有,然后后有响应,而且必须成对出现
默认的端口号是80
两个常用的版本 1.0(每次响应后关闭连接)
1.1(主要使用的,不是每次响应后挂断,是等待一个长时间后挂断)
请求:
<a>标签只能是get,只有<form>才有post
请求行:get的提交参数会显示到地址栏上,post不会
get的有大小限制,post没有
请求头:通常是key:value对
User-Agent:代表浏览器的类型--文件下载:下载中文文件,IE使用URLEncoder编码,firfox使用BASE64
可以用来解决乱码问题
Referer:记录网站来源,可以防盗链
If-Modified-Since:
通常与响应中的头Last-modified 一起查找本地缓存
请求体:(与请求头中间有空行)
get没有请求体,post有请求体
POST提交方式提交的参数
响应:
响应行:协议版本 状态码 状态码的描述
响应码 200 响应成功
302 重定向
304 查找本地缓存
404 访问资源不存在
500 服务器内部错误
响应头:键值对的形式
Last-Modified 与请求中的 if-modified-since 一起查找本地缓存
Content-Dispostion:文件下载时使用的头信息
Location 重定向的跳转路径
Refresh定时跳转(刷新)
响应体:(与响应头中间有空行)
显示的页面的内容
Servlet概述:小的java程序运行在web服务器,可以用来接收和响应从客户端发送过来的请求,通常会使用http协议
Servlet就是sun公司提供的动态网页开发技术.
Servlet是线程不安全的,在里面不要写成员变量
Servlet是一个单例的
作用:处理从客户端浏览器发送的请求,可以对请求做出响应
使用方法:
编写一个类去实现Servlet接口,将这个类配置到服务器中
Servlet入门:
在web.xml中添加:
<servlet>
<!--servlet的名称-->
<servlet-name>test1</servlet-name>
<!--servlet的全路径-->
<servlet-class>com.itheima.a_servlet.ServletDemo01</servlet-class>
</servlet>
<servlet-mapping>
<!--servlet的名称-->
<servlet-name>test1</servlet-name>
<!--servlet的访问路径-->
<url-pattern>/ServletDemo1</url-pattern>
</servlet-mapping>
使用ServletRequest接收参数
//解决中文乱码
req.setCharacterEncoding("UTF-8");
getParameter (参数名) 获取指定参数名的参数的值,用于接收一个名称对应一个值的数据
getParameterMap() 接收表单中的所有数据,key是参数名 value是参数值
getParameterNames() 可以用于获取表单中提交的所有的参数的名称
getParameterValues(参数名)用于一个参数名对应多个参数值的
Servlet 接口 :
|
GenericServlet 通用的servlet :
|
HttpServlet htppservlet :体现了sun公司的野心(不局限于http)
Servlet-Service-Dao
Servlet的生命周期
从创建到销毁的过程:
创建时期:
第一次访问Servlet时,服务器创建,只创建一次.
tomcat(服务器)创建的,Servlet被创建的时候init方法会执行;
任何一次客户端想服务器发送请求,service方法就会执行,对HttpServlet而言 service
方法会根据不同的请求方式调用不同的doxxx方法(get odget,post doPost)
销毁时期:Servlet被销毁的时候destory就会执行;
关闭服务器(stop相当于正常关机 terminate相当于拔掉电源)或者将项目移除时销毁
并且执行destory方法
Servlet的相关配置:
<init-param>
<param-name></param-name>
<param-value></param-value>
</init-param>
Servlet默认是在第一次访问的时间创建的,如果象要servlet在服务器启动时就创建,就要配置
servlet 在web.xml中在<Servlet></Servlet>标签中配置:
<load-on-startup>2</load-on-startup>,传入的整数越小,被创建的优先级越高
1已经被默认的Servklet占用(500,404...tomcat中conf中也有一个web.xml)
<url-pattern></url-pattern>的配置:
(优先级最高)1.完全路径匹配:以/开始 eg:/ServletDemo /aaa/ServletDemo
(优先级第二)2.目录匹配: 以/开始 需要以*(通配符所有的)结束 eg:/* , /aaa/*
(优先级最低)3.扩展名匹配: 以*开始(不能以/开始) eg:*.do *.action *.jsp
错误的写法 /*.do
html 使用相对 服务器使用绝对的原因:
html中使用绝对路径要使用盘符才能找到,如果文件位置发送变化全部路径都要修改
服务器中的绝对路径是从 tomcat中的webapps中的工程名开始的(不是从盘符开始)
如果拷贝到其他电脑就可以直接使用,不用全部修改
开发中路径的编写:
相对路径:找位置的相对关系,不能以/开始 ./当前路径 ../上一级
绝对路径:不需要找相对关系,以/开始(尽量写绝对路径)
绝对路径的2种写法:
1.带协议的 http:localhost:8080/day11/ServletDemo
2.不带协议的:/day11/ServletDemo
(转发事件路径)服务器端路径:不需要加工程名(/ServletDemo)
客户端路径:一定要加工程名(/day11/ServletDemo)(目前使用该路径)
response可以设置响应头
设置头信息的方法
存的毫秒值
addDataHeader(String name ,long date);
addHeader(String name ,String value); 一个key对用多个value
addIntHeader(String name ,int value);
setDataHeader(String name ,long date);
setHeader(String name ,String value); 一个key对应一个value
setIntHeader(String name ,int value);
例如头信息:xxx:aaa
addHeader(xxx,bbb);结果为
xxx:aaa,bbb 一个key对应多个value
如果是setHeader(xxx,bbb)结果为
xxx:bbb,之前的aaa被替换了
解决应答时出现中文乱码:response.setContentType("text/html;charset=UTF-8");
setStatus设置状态码:
200 响应成功
302 重定向
304 查找本地缓存
404 访问资源不存在
500 服务器内部错误
response.setHeader(Refresh(定时跳转)Location(立即跳转) ,"time,url" );
response.setHeader("Refresh", "5;url=/day11/register/success.html");
response.setHeader("Location", "/day11/register/success.html");立即跳转
response.setStatus(302);
response.setHeader("Location", "/day13/register/success.html");
response.sendRedirect("/day13/register/success.html")效果等同于上面2句话
重定向
ServletContext对象(域对象,作用范围是整个web工程):
可以存取数据,可以在其他类里面获得
在服务器启动时,tomcate会为每个项目创建servletContext对象
在服务器关闭时,或者项目从服务器中移除时销毁
作用:获得全局初始化参数,
获得文件的MIME类型
*作为域对象存取数据
可以用来读取web项目下的一些文件
setAttribute(String name,Object obj) 存数据
getAttribute(String name) 取数据
removeAttribute(String name) 移除数据
如何或者这个数据
GenericServlet类中,getServletContext()方法
ServletConfig对象,可以获得Servlet的配置信息.getServletConfig
getServletName();获得servlet在web.xml配置的名称
getInitParameter();获得servlet的初始化参数
Enumeration(枚举) getInitParameterNames();获得所有servlet所有初始化参数名称
配置初始化参数
<servlet>
<description></description>
<display-name>ServletDemo05</display-name>
<servlet-name>ServletDemo05</servlet-name>
<servlet-class>com.itheima.a_servlet.ServletDemo05</servlet-class>
<!--在这里配置初始化参数-->
<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>root</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletDemo05</servlet-name>
<url-pattern>/ServletDemo05</url-pattern>
</servlet-mapping>
|
|