代码改变世界

第二周学习记录

2017-11-05 15:34  melay  阅读(240)  评论(0编辑  收藏  举报

这周主要深入学习了JavaWeb开发内幕第四章servlet开发基础、第五章HttpServletResponse的应用和第六章HttpServletRequest的应用

第四章学习总结

1.动态网页与动态HTML页面的区分:网页源文件内容是否一成不变。

2.动态网页内容的创建过程:

  • 首先使用某种编程语言编写出相应的动态页面程序
  • 然后由一个专门的Web服务器程序模块来解释执行该程序

3.引擎:专门解释执行某种动态网页程序的Web服务器程序模块。ASP引擎、Servlet引擎、JSP引擎。
浏览器、引擎、API、动态网页程序之间的工作关系

4.Servlet简介:一个Servlet程序就是一个实现了特殊接口的Java类,由支持Servlet的Web服务器(具有servlet引擎)调用和启动运行。一个Servlet程序负责处理他所对应的一个或一组URL地址的访问请求,并用于接受客户端发出的访问请求信息和产生响应内容。功能如下:
- 获取客户端通过HTML的FORM表单递交的数据和URL后面的参数信息
- 创建对客户端的响应信息内容
- 访问服务器端的文件系统
- 链接数据库并开发基于数据库的应用
- 调用其他Java类

5.C/S和B/S架构的比较:
C/S架构:

B/S架构:

6.Servlet查询数据库的工作过程:

7.Servlet运行过程:

  • 接受到访问某个Servlet的HTTP请求之后,Servlet引擎首先检查是否装载并创建该servlet对象。是则执行第四部。
  • 装载并创建Servlet的一个实例对象
  • 调用Servlet实例对象的init()方法,进行初始化工作
  • 创建一个用于封装HTTP请求信息的Request和响应信息的Response对象,调用servlet的service()方法并将请求和响应对象作为参数传递进去
  • 在一个Web应用程序被停职或重新启动之前,Servlet引擎将卸载其中运行的Servlet

8.Servlet、Servlet容器、Servlet API之间的关系:

9.线程安全问题:一个Servlet实例对象被多个线程同时调用的问题。
解决方案:

  • 实现 SingleThreadModel 接口
  • 同步对共享数据的操作
  • 避免使用实例变量

10.servletConfig接口:定义ServletConfig对象需要对外提供的方法,以便在servlet程序中调用这些方法来获取有关信息。

11.service方法:servlet的核心方法,每当针对servlet的访问请求到达时,servlet引擎就会调用该servlet实例对象的service方法来响应。

12.ServletContext接口:ServletContext对象被包含在ServletConfig对象中,与servlet容器进行通信。

第五章学习总结

1.服务器返回给客户端的HTTP响应消息包含:

  • 状态行
  • 响应消息头
  • 消息正文(实体内容)

2.响应状态行:HTTP版本、状态代码和相关的提示信息
HTTP/1.1 200 OK

3.构建响应消息头:addHeader和setHeader方法,可用于设置所有的头字段。

4.servlet的中文输出乱码:

  • servlet程序输出给浏览器的内容不是任何一种正确的中文字符集编码
  • 浏览器所采用的字符集编码与它所接受到的中文字符本身的字符集编码不一致

5.浏览器定时刷新或跳转页面:refresh

response.setHeader("Refresh","2");
response.setHeader("Refresh","2,URL=http://www.it315.org");

6.禁止浏览器缓存当前文档内容

response.setDataHeader("Expires",0);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");

7.使用标签模拟响应消息头

<meta http-equiv="Expires" content="0">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Pragma" content="no-cache">
设置字符集编码
<meta http-equiv="Content-Type" content="text/html;charset=GB2312">

8.创建响应正文

  • getOutputStream与getWriter方法:用于返回字节输出流和字符输出流对象;两者互相排斥,调用其中一个,就不能调用另一个。

9.请求重定向与请求转发
请求转发

  • 调用requestDispatcher.forward实现
  • 转发是服务器行为
  • 客户浏览器发送http请求—>web服务器接受此请求—>调用内部的一个方法在容器内部完成请求处理和转发动作—>将目标资源发送给客户;
  • 转发的路径必须是同一个web容器下的url

请求重定向:

  • 调用HttpServletResponse.sendRedirect方法实现
  • 重定向是客户端行为
  • 客户浏览器发送http请求—>web服务器接受后发送302状态码响应及对应新的location给客户浏览器—>客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址—>服务器根据此请求寻找资源并发送给客户
  • 客户可以观察到地址的变化的,重定向行为是浏览器做了至少两次的访问请求的。

第6章学习总结

1.客户端发给服务器的HTTP请求信息:

  • 请求行
  • 请求消息头
  • 消息正文

2.请求行:请求方式、资源路径、HTTP协议版本

3.获取请求行的相关信息:

  • getMethod方法:返回HTTP请求消息的请求方式(GET、POST、HEAD、PUT、DELETE)
  • getRequestURI方法:返回URI
  • getQueryString:返回请求行中的参数部分,也就是资源路径后面的问号?以后的所有内容。没有参数返回null.
  • getProtocol:返回请求行中的协议名和版本

4.获取网络连接信息的方法:

  • getRemoteAddr:返回发出请求的客户机的IP地址
  • getRemoteHost:返回发出请求的客户机的完整主机名
  • getRemotePort: 返回发出请求的客户机所使用的网络链接的端口号
  • getLocalAddr
  • getLocalName
  • getLocalPort
  • getServerName

5.获取请求头信息

  • getHeader:返回一个指定名称的头字段的值
  • getHeaders:返回一个Enumeration集合对象
  • getHeaderNames
  • getIntHeader:获取一个指定名称的头字段的值并将其转换成int类型后返回。
  • getDateHeader:获取一个指定名称的头字段的值并将其按GMT时间格式转换为一个代表日期/实践的长整数返回。

6.利用Referer请求头防止“盗链”
盗链:一些站点本身没有提供下载空间,但提供了各种软件的下载页面,让下载的超链接指向其他站点上的资源。
防止“盗链”:检查请求信息的referer头字段是否与本站相匹配。

7.Base编码和客户端身份认证
WWW-Authenticate响应头指定两种认证方式:BASIC(未加密的明文传送方式)和DIGEST(MD5加密)。

8.获取请求参数:

  • getParameter:返回某个指定名称的参数的值。
  • getParameterValues:获取同一参数的所有参数值
  • getParameterNames:返回一个包含请求消息的同一个参数名的Enumeration对象。
  • getParameterMap:将请求消息中所有参数名和值装入一个Map对象中返回。

9.获取请求信息的实体内容:getInputStream和getReader;互相排斥。

10.利用请求域属性传递信息

  • setAttribute:讲一个对象和一个名称关联后存储进ServletRequest对象中。
  • getAttribute:返回指定名称的属性对象
  • removeAttribute:删除指定名称的属性
  • getAttributeNames:返回所有属性名的枚举集合