Fork me on GitHub

notes_for_HeadFirstServletsAndJsp2

Head First Servlets&JSP 读书笔记_2

名词解释

  • 消息体/负载 :Payload,是数据传输的根本目的,也称实际数据/数据体;
  • 元数据:也称数据头/开销数据,是帮助负载传输的辅助;
  • MIME类型:规范的一种,用以描述报文类型的内容和组织形式,包含HTTP响应首部中content-type,Content-Transfer-Encoding等;
  • 端口列表 :TCP/UDP端口列表
  • 部署描述文件(deployment descriptor,DD),即web.xml。每个Web应用需要一个DD,但一个DD可以声明多个servlet

干货正文

为什么有时不建议用HTTP GET?

  1. Get的总字符数有限,(取决于服务器),如果在搜索框中写入太多,可能使get方法无法正常工作;
  2. get数据会加到URL后面,在浏览器地址栏中显示出来;
  3. 然而,用了post,用户将不能对一个表单提交建立书签,get请求的url能保存为浏览器书签;
  4. 然而,用了post,请求不能被缓存下来,不会保存在浏览记录中。

Web服务器自己不做的两件事

1、动态内容;2、在服务器上保存数据

  1. Web服务器只提供静态页面。web服务器与辅助应用通信,由辅助应用具体写出HTML(即时页面);
  2. 用户提交表单数据时,web服务器看到表单数据,将其移交给辅助应用,由这个应用为客户生成一个响应。

辅助应用

通常包含Servlet和CGI(Common Gateway Interface),两者各有优缺点。

放在Servlet中的HTML的糟糕表现

在servlet中创建一个动态Web页面就需要把整个HTML打印到一个输出流,以下是未ps版代码,ps版代码是将java代码放入HTML中(即jsp)

1
2
3
out.println("<html>"+
"<body>"+today+"</body>"+
"</html>");

Web容器的作用(tomcat等)

通信支持

利用容器提供的方法,你可以简单的实现servlet与web服务器的对话。否则你就要自己建立serverSocket,监听端口,创建新的流等等一系列复杂的操作。而容器的存在就帮我们封装这一系列复杂的操作。使我们能够专注于servlet中的业务逻辑的实现。

生命周期管理

容器负责servlet的整个生命周期(一般都会extends HttpServlet)。如何加载类,实例化和初始化servlet,调用servlet方法,并使servlet实例能够被垃圾回收。有了容器,我们就不用花精力去考虑这些资源管理垃圾回收之类的事情。

[理解]一般doGet/doPost方法传参有HttpServletRequest request和HttpServletResponse response,这俩是由容器创建的。

1
PrintWriter out = response.getWriter();

以上代码中,out可以将HTML文本/图片等输出到相应对象中。

多线程支持

容器会自动为接收的每个servlet请求创建一个新的java线程,servlet运行完之后,容器会自动结束这个线程。

声明式实现安全

利用容器,可以使用xml部署描述文件来配置安全性,而不必将其硬编码到servlet中。

jsp支持

容器将jsp翻译成java

使用DD(web.xml)将URL映射到Servlet

1
2
3
4
5
6
7
8
9
10
11
 <!-- 内部名映射到完全限定类名-->
<servlet>
<servlet-name>Ch1Servlet</servlet-name>
<servlet-class>ch1Servlet.Ch1Servlet</servlet-class>
</servlet>
<!-- 内部名映射到公共URL名-->
<servlet-mapping>
<servlet-name>Ch1Servlet</servlet-name>
<url-pattern>/Ch1Servlet</url-pattern>
</servlet-mapping>

servlet有三个名字:

1
2
3
客户知道的URL名 <url-pattern>/Ch1Servlet</url-pattern>
部署人员知道的秘密的内部名 <servlet-name>Ch1Servlet</servlet-name>
实际文件名 <servlet-class>ch1Servlet.Ch1Servlet</servlet-class>

注:将servlet添加一个对外访问的虚拟路径,除了以上在DD中配置之外,还可以采用注解的方式,在继承了HttpServlet的Servlet类上方添加:

1
@WebServlet("/WordAnalyzeServlet")

DD的其他用途

包括了大量重要用途,但此时仅关注可以采用声明的方式修改应用。

已完成本书第2章49页,未完待续。。。

-------------The End-------------