黑马程序员技术交流社区

标题: 【石家庄校区】学习笔记-Servlet [打印本页]

作者: htb52110    时间: 2017-12-9 22:40
标题: 【石家庄校区】学习笔记-Servlet
本帖最后由 htb52110 于 2017-12-9 22:46 编辑

Servlet
1、HTTP
1.1、【HTTP协议】
1.1.1、协议:
概念:规定双方需要遵守的一个规则
1.1.2、HTTP协议:(超文本传输协议)
用来规定浏览器与服务器之间需要遵守的规则。
1.1.3、HTTP协议的作用:
规范浏览器和服务器只ian的数据传递
1.1.4、HTTP协议的特点:
基于请求和响应的模型
必须先有请求后又响应
请求和响应必须成对出现
默认端口:80
1.1.5、HTTP协议的版本:
1.0:每次响应后立即关闭了连接
1.1:现在使用。不是每次响应后挂断,,等待长时间以后没有请求会挂断.
1.2、【HTTP协议的详解】
1.2.1、请求部分
请求行
请求方式:
提交的方式有很多,常用的有GET和POST
GET和POST的区别:
GET的提交的参数会显示在地址栏上。而POST不显示
GET往往有大小限制,POST没有
GET没有请求体,POST有请求体
请求路径:
协议版本:
请求头:
都是键值对的形式存在的,一般一个key对应一个value,也有个别的是一个key对应多个value
User-Agent        :代表浏览器的类型        ---文件下载:下载中文文件:IE使用URLEncodor                                        进行编码,而Firefox使用Base64编码.
Referer                :代表网页的来源        ---防盗链
If-Modeified-Since        :通常与响应中的头 Last-Modified一起使用查找本地缓存
请求体:
POST提交方式的提交的参数
1.2.2、响应部分
响应行:
协议版本
状态码:
200        :成功
302        :重定向
304        :查找本地缓存
404        :资源不存在(检查路径是否正确)
500        :服务器内部异常(java代码异常)
状态描述
响应头:键值对,一般一个key对应一个value,也有个别的是一个key对应
Last-Modified        :与请求中的If-Modified-Since一起使用查找本地缓存。
Content-Dispostion:文件下载的时候使用的一个头信息
Location        :重定向的跳转路径
Refresh        :定时刷新/定时跳转
响应体:显示到浏览器的内容
2、Servlet
2.1、Servlet的概述
2.1.1、概念
就是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议
Servlet就是SUN公司提供的一个动态网页开发技术
2.1.2、作用:
用来处理从客户端浏览器发送的请求,并且可以对请求作出响应
2.1.3、使用Servlet:
编写一个类实现Servlet的接口
将编写的这个类配置到服务器中
2.1.4、Servlet的配置
  <!-- 配置Servlet -->
  <servlet>
    <!-- Servlet的名称 -->
    <servlet-name>test1</servlet-name>
    <!-- SErvlet的全路径 -->
    <servlet-class>com.itheima.a_servlet.ServletDemo1</servlet-class>
  </servlet>

  <!-- Servlet的映射 -->
  <servlet-mapping>
    <!-- Servlet的名称 -->
    <servlet-name>test1</servlet-name>
    <!-- Servlet的访问路径 -->
    <url-pattern>/ServletDemo1</url-pattern>
  </servlet-mapping>
* 访问:s
http://localhost:8080/day09/ServletDemo1
2.1.5、【使用ServletRequest接收参数】
String getParameter(String name) :         通过表单中的name获取对应的一个value
String[] getParameterValues(String name): 通过表单中的name获取对应的多个value。多选框使用
Map getParameterMap();: 获取表单中所有的name和value

注意:
post请求数据,在接收数据时有中文的情况下,在获取参数之前一定要先声明 req.setCharacterEncoding("UTF-8");可以解决中文乱码的问题。
get请求时出现中文后,使用“new String(username.getBytes("ISO-8859-1"),"UTF-8")”来处理中文乱码问题
res响应是解决中文乱码的问题:使用“res.setContentType("text/html;charset-utf-8")”

2.2、Servlet的生命周期
2.2.1、生命周期
就是一个对象从创建到销毁的过程
2.2.2、Servlet的生命周期
2.2.2.1、创建:用户在第一次访问Servlet的时候创建
2.2.2.2、销毁:当项目从服务器中移出的时候,或服务器关闭的时候
2.2.3、
用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行.任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法.在service方法内部根据请求的方式的不同调用doXXX的方法.(get请求调用doGet,post请求调用doPost).当Servlet中服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行.

2.3、Servlet的相关配置
2.3.1、启动的时候创建Servlet:
在web.xml中在<servlet></servlet>标签中配置:
<load-on-startup>2</load-on-startup>----传入正整数,整数越小执行的优先级越大,最小从2开始。1已被占用!
2.3.2、url-patern的配置
完全路径配置:以 / 开始,
例如1./ServletDemo4 , /aaa/ServletDemo5 , /aaa/bbb/ServletDemo6
目录匹配 / 开始 需要以 * 结束.
例如: /* ,/aaa/* ,/aaa/bbb/*
扩展名匹配:不能以 / 开始 * 开始的.
例如: *.do , *.action
注意 错误的写法: /*.do
优先级:完全路径匹配>目录匹配>扩展名匹配

2.4、开发中的路径的编写
2.4.1、 相对路径:都是需要找位置相对关系.不能以 / 开始的.
       ./ 当前路径  ../上一级目录
      使用相对路径访问:
                               http://localhost:8080/day09/demo4-url/demo1.html
                             http://localhost:8080/day09/ServletDemo6
2.4.2、 绝对路径:不需要找位置相对关系. 以 / 开始的.
     绝对路径中分为客户端路径和服务器端路径:
     客户端路径一定要加工程名.     /day09/ServletDemo6        (浏览器端就是客户端)
     服务器端路径不需要加工程名.   /ServletDemo6        (java后台代码就是服务器端)
2.5、response中设置响应头



addHeader(String name,String value);       --- 针对一个key对应多个value的响应头.
    addDateHeader(String name,long date);
    addIntHeader(String name,int value);
setHeader(String name,String value);      --- 针对一个key对应一个value的响应头.
    setDateHeader(String name,long date);
    setIntHeader(String name,int value);
举例:
头信息: xxx:aaa
    * addHeader(“xxx”,”bbb”);        -->xxx:aaa,bbb
    * setHeader(“xxx”,”bbb”);        -->xxx:bbb
2.6、ServletContext对象
ServletContext对象存取数据,存的数据都是有一定的范围的,这种对象称为域对象
2.6.1、用来存取数据:
向ServletContext存入数据

从ServletContext读取数据

从ServletContext移出数据

2.6.2、ServletContext作用:
a、用来获得全局的初始化参数
b、用来获得文件的MIME的类型
c、作为域对象存取数据
ServletContex对象是一个域对象
作用范围:整个web工程
创建:服务器启动的时候,tomcat服务器为每个web项目创建一个单独的ServletContex对象
销毁:服务器关闭的时候,或者项目从服务器中移出的时候
d、读取web项目下的文件
  使用getResourceAsStream读取(返回流)
使用getRealPath读取文件(返回路径名)
补充:使用类的加载器进行读取文件(注意只能读取src路径下的文件)

InputStream getResourceAsStream(String path); --- 根据提供路径读取文件返回一个文件的输入流.

String getRealPath(String path); --- 返回一个路径的磁盘绝对路径.

2.7、ServlerConfig(了解即可)获得Servlet的配置信息

String getServletName();       ---获得Servlet在web.xml中配置的name的值.
String getInitParameter(String name); ---获得Servlet的初始化参数的.
Enumeration getInitParameterNames();      ---获得所有Servlet的初始化参数的名称.

2.8、补充(将读取到页面的数据封装的方式)
方式1:传统方式
        //获取参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //封装参数
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        
方法2: 使用BeanUtils
// BeanUtils --- 基础班,反射那天学习的类. 这个类可以把一个Map集合
        封装成一个JavaBean对象
// 以Map集合的方式,获取参数
Map<String, String[]> map = request.getParameterMap();
// 封装数据
User user = new User();
BeanUtils.populate(user, map);

clipboard.png (67.09 KB, 下载次数: 11)

clipboard.png

作者: 小石姐姐    时间: 2017-12-13 16:28
继续保持,加油哦
作者: Yin灬Yan    时间: 2017-12-13 18:38
我来占层楼啊   




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2