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?
- Get的总字符数有限,(取决于服务器),如果在搜索框中写入太多,可能使get方法无法正常工作;
- get数据会加到URL后面,在浏览器地址栏中显示出来;
- 然而,用了post,用户将不能对一个表单提交建立书签,get请求的url能保存为浏览器书签;
- 然而,用了post,请求不能被缓存下来,不会保存在浏览记录中。
Web服务器自己不做的两件事
1、动态内容;2、在服务器上保存数据
- Web服务器只提供静态页面。web服务器与辅助应用通信,由辅助应用具体写出HTML(即时页面);
- 用户提交表单数据时,web服务器看到表单数据,将其移交给辅助应用,由这个应用为客户生成一个响应。
辅助应用
通常包含Servlet和CGI(Common Gateway Interface),两者各有优缺点。
放在Servlet中的HTML的糟糕表现
在servlet中创建一个动态Web页面就需要把整个HTML打印到一个输出流,以下是未ps版代码,ps版代码是将java代码放入HTML中(即jsp)
1 | out.printl ("<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 | <!-- 内部名映射到完全限定类名--> |
servlet有三个名字:
1 | 客户知道的URL名 <url-pattern>/Ch1Servlet</url-pattern> |
注:将servlet添加一个对外访问的虚拟路径,除了以上在DD中配置之外,还可以采用注解的方式,在继承了HttpServlet
的Servlet类上方添加:
1 |
DD的其他用途
包括了大量重要用途,但此时仅关注可以采用声明的方式修改应用。
已完成本书第2章49页,未完待续。。。