9.servlet

1. http

1.1 http:要求:掌握一些头信息

  • 超文本传输协议:规定数据的格式
  • 浏览器往服务器发送 —- 请求
  • 服务器往浏览器回写 —- 响应

1.2 请求:(request)

  • 组成部分:请求行 请求头 请求体
1.2.1 请求行:请求信息的第一行
  • 格式:请求方式 访问的资源 协议/版本
    • 例如:GET /day0801/1.html HTTP/1.1
  • 请求方式:get和post
    • get会把参数放在url的后面 post不会
    • get参数大小有限制,post请求却没有限制
    • get请求没有请求体;post请求有请求体 请求参数放在请求体中
1.2.2 请求头:请求信息的第二行到空行结束
  • 格式:key/value (value可以是多个值)
常见的请求头:
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.itcast.cn:80      --访问主机
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT      --缓存文件的最后修改时间
Referer: http://www.itcast.com/index.jsp     --来自哪个页面、防盗链
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)//MSIE微软IE
Cookie:存储信息
Connection:Keep-Alive       --链接状态
掌握的头信息:
  • Referer:来自哪个页面、防盗链
  • User-Agent:浏览器的内核
  • Cookie:可以存储信息
  • If-Modified-Since:链接状态
1.2.3 请求体:空行以下的内容

1.3 响应:(response)

1.3.1 组成部分:
  • 响应行 响应头 响应体
1.3.2 响应行:响应信息的第一行
  • 格式:协议/版本 状态码 状态码说明
  • 例如:HTTP/1.1 200 OK
  • 状态码:
    • 200 正常响应成功
    • 302 重定向
    • 304 读缓存
    • 404 用户操作资源不存在
    • 500 服务器内部异常
1.3.3响应头:从响应信息的第二行到空行结束
  • 格式:key/value(value可以是多个值)
常见的头
Location: http://www.it315.org/index.jsp    --跳转方向 和302一起使用的
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: Keep-Alive              --连接
掌握的头信息
  • Content-Type:数据类型
  • Location:跳转方向
  • Last-Modified:最后修改时间
  • Refresh:定时刷新
  • Content-Disposition:下载
  • Set-Cookie
1.3.4 响应体:空行以下的内容,页面上展示的内容

2. servlet

  • 动态的web开发技术,本质就是一个类,运行在服务器端的一个java小程序
  • 处理业务逻辑,生成动态web内容

2.1 编写一个servlet步骤:

  1. 编写一个类
    • 继承HttpServlet
    • 重写doGet或者doPost方法
  2. 编写配置文件(web-inf/web.xml)
    • 注册servlet
    • 绑定路径
  3. 访问
    http://主机:端口号/项目名/路径

2.2 接受参数: 格式:key=value

Sting value=request.getParameter("key")
例如:http://localhost/day09/hello?username=tom
    request.getParameter("username")就可以获取tom值

2.3 回写内容:(response)

response.getWriter().print("success");
处理响应数据中文乱码:
    resp.setContentType("text/html;charset=utf-8"); //放在方法中的第一行

2.4 servlet的体系结构

2.4.1 servlet常用方法:
void init(ServletConfig config):初始化
void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
void destroy():销毁

ServletConfig getServletConfig() :获取当前servlet的配置对象
2.4.2 GenericServlet常用方法:
除了service方法没有显示,其他都实现了
空参的Init() 若我们自己想对servlet进行初始化操作,重写这个init()方法即可
2.4.3 HttpServlet常用方法:
service做了实现,把参数强转,调用了重载的service方法
重载的service方法获取请求的方式,根据请求方式的不同调用相应doXxx()方法
doGet和doPost方法

2.5 servlet生命周期

2.5.1 初始化
void init(ServletConfig config):初始化
 * 初始化方法
 * 执行者:服务器
 * 执行次数:一次
 * 执行时机:默认第一次访问的时候
2.5.2 服务
void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
 * 服务
 * 执行者:服务器
 * 执行次数:请求一次执行一次
 * 执行时机:请求来的时候
2.5.3 销毁
void destroy():销毁
 * 销毁
 * 执行者:服务器
 * 执行次数:只执行一次
 * 执行时机:当servlet被移除的时候或者服务器正常关闭的时候
2.5.4 serlvet是单实例多线程
  • 默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作.并调用一次service方法
  • 每当请求来的时候,服务器创建一个线程,调用service方法执行自己的业务逻辑
  • 当serlvet被移除的时候服务器或者正常关闭的时候,服务器调用servlet的destroy方法实现销毁操作.

2.6 在servlet标签有一个子标签 load-on-startup

  • 作用:用来修改servlet的初始化时机
  • 取值:正整数 值越大优先级越低

2.7 url-pattern的配置:

  • 方式1:完全匹配 必须以”/”开始 例如: /hello /a/b/c
  • 方式2:目录匹配 必须”/”开始 以”“结束 例如: /a/ /*
  • 方式3:后缀名匹配 以”“开始 以字符结尾 例如: .jsp .do .action
2.7.1 优先级:完全匹配>目录匹配>后缀名匹配
练习:
有如下的一些映射关系:
    Servlet1 映射到 /abc/* 
    Servlet2 映射到 /*
    Servlet3 映射到 /abc 
    Servlet4 映射到 *.do 
问题:
当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应
    Servlet引擎将调用Servlet1。
当请求URL为“/abc”时,“/*”和“/abc”都匹配,哪个servlet响应
    Servlet引擎将调用Servlet3。
当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应
    Servlet引擎将调用Servlet1。
当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
    Servlet引擎将调用Servlet2.
当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
    Servlet引擎将调用Servlet2。
注意
  • 当我们的配置文件里面没有指定配置的话,会查找tomcat的web.xml,
  • 若请求我们自己的项目处理不了,tomcat的默认的servlet会帮我们处理信息
2.7.2 路径的写法:

3. 常见的响应头

3.1 refresh

  • 响应头格式:refresh:秒数;url=跳转的路径
  • 设置响应头:

    response.setHeader(String key,String value);设置字符串形式的响应头
    response.addHeader(String key,String value);追加响应头, 若之前设置设置过这个头,则追加;若没有设置过,则设置
    
  • 设置定时刷新:

    response.setHeader("refresh","3;url=/day0901/login.htm");
    

4. ServletContext:上下文(全局管理者,域对象)

4.1 作用:

  1. 获取全局的初始化参数
  2. 共享资源(xxxAttribute)
  3. 获取文件资源
  4. 其他操作

4.2 获取全局管理者:

获取servletcontext:
方式1:了解 
    getServletConfig().getServletContext()
方式2:
    getServletContext()

4.3 常用的方法

1.了解的
String  getInitParameter(String key):通过名称获取指定的参数值
Enumeration getInitParameterNames() :获取所有的参数名称  
 在根标签下有一个 context-param子标签 用来存放初始化参数
    <context-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </context-param>
2.xxxAttribute
    setAttribute(String key,Object value);//设置值
    Object getAttribute(String key);//获取值
    removeAttribute(String key)://移除值
3.获去文件的路径
方式1:
    String getRealPath(String path):获取文件部署到tomcat上的真实路径(带tomcat路径)
        getRealPath("/"):D:\javaTools\apache-tomcat-7.0.52\webapps\day09\
    InputStream getResourceAsStream(String path):以流的形式返回一个文件

方式2:
类.class.getClassLoader().getReource("文件路径").getPath()
类.class.getClassLoader().getReourceAsStream("文件路径")

4.获取文件的mime类型  大类型/小类型
    String getMimeType(String 文件名称)

4.3 生命周期

  • 当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.
  • 当项目被移除的时候或者服务器关闭的时候servletcontext销毁

5. ServletConfig:servlet配置对象

5.1 作用:

  1. 获取当前servlet的名称
  2. 获取当前servlet的初始化参数
  3. 获取全局管理者
方法:
String getServletName():获取当前servlet的名称(web.xml配置的servlet-name)

String  getInitParameter(String key):通过名称获取指定的参数值
Enumeration getInitParameterNames() :获取所有的参数名称
初始化参数是放在 web.xml文件,servlet标签下子标签 init-param

getServletContext():获取全局管理者
注意

servletconfig是由服务器创建的,在创建servlet的同时也创建了它,通过servlet的init(ServletConfig config)将config对象
传递给servlet,由servlet的getServletConfig方法获取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值