《JSP/Servlet学习笔记》
《JSP&Servlet学习笔记》第2版
Chapter1 Web应用程序简介
学习目标:
1.1 Web应用程序基础知识
HTML,HTTP,URL和文字编码。
HTML
HTML基础知识:
http://www.w3schools.com/html/default.asp
HTTP两个基本和极其重要的属性:
1.基于请求和相应模型
2.无状态通信协议(不会维护有关客户端的状态)
浏览器使用HTTP的几种请求方法:
GET,POST,HEAD,PUT,DELETE
使用GET方式发送请求,浏览器的地址栏会出现请求参数信息。
GET请求可以发送的请求参数长度有限,太大量的数据使用POST方式。
POST方式
地址栏不会出现请求参数。
你的请求如果会改变服务器的状态,则应该使用POST请求的方式。
java.net.URLEncoder
Web容器的作用:剖析和转换通信协议,转换成JSP/Servlet中可用的Java对象。
在容器的世界里,真正负责请求、相应的是Servlet。
Web容器为每个请求分配一个线程。启动多个线程负责处理多个请求。
线程安全问题。
深入理解Web容器的行为。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
HttpJspBase -> HttpServlet
控制器知道哪个视图操作对应哪个模型。
Chapter2 编写与设置Servlet
2.1 第一个Servlet
javax.servlet.http.HttpServlet
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
protected void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
response.setContentType(“text/html;charset=UTF-8”);
PrintWriter out = response.getWriter();
String name = request.getParameter(“name”);
}
容器收到HTTP请求后,收集HTTP请求中的信息,并分别创建代表请求与响应的Java对象。
http://localhost:8081/FirstServlet/lisuxuan
2.2 在HelloServlet之后
Servlet接口,GenericServlet类,HttpServlet类定义有关HTTP的相关方法。
将HTTP相关服务流程定义在HttpServlet的service()方法中。
使用@WebServlet
Servlet3.0中:
@WebServlet{
Name=”hello”,
urlPatterns={“/hello.view”},
loadOnStartup = 1
}
当应用程序启动后,事实上并没有创建所有的Servlet实例。容器在首次请求需要某个Servlet服务时,才将对应的Servlet类实例化、进行初始化操作。
使用web.xml
Web.xml中的设置会覆盖Servlet中的标注设置,可以使用标注作为默认值,而Web.xml来作日后更改设置值之用。
请求时的URL只是个逻辑名称,比如/Hello.view,并不是服务器上真的有个实体文件。而是会由Web容器对应到实际处理请求的文件或者程序实体名称。
文件组织与部署
关于WAR文件:容器如果发现webapps目录中有WAR文件会将其解压缩,并载入Web应用程序。
2.3 进阶部署设置
Servlet3.0新增的部署设置功能。
HttpServletRequest.getRequestURI()
contextPath环境路径:容器挑选Web应用程序的依据。
HttpServletRequest.getContextPath()取得环境路径。
有关请求的相关信息,都可以使用这个对象来获取。
Servlet路径
getServletPath()
2.3.2Web目录结构
Web应用程序存在一个特殊的/WEB-INF目录,此目录中存在的资源项目不会被列入应用程序根目录中可直接访问的项。
2.3.3使用web-fragment.xml
Servlet3.0中,JAR文件可用来作为Web应用程序的部分模块。
web-fragment.xml必须放置在JAR文件中的META-INF目录中。
Chapter3 请求与响应
3.1 从容器到HttpServlet
Web容器是Servlet/JSP唯一认识的HTTP服务器。
了解Web容器如何生成、管理请求和响应对象,为何设计出这样的API架构。
3.1.1 Web容器做了什么
创建Servlet实例,完成Servlet名称注册及URL模式的对应。
在请求来到时,Web容器会转发给正确的Servlet来处理请求。
Web容器提供的功能:有关请求/响应对象的生命周期管理(请求/响应对象的创建与销毁)
3.1.2 doXXX()方法
可以阅读Servlet标准API的源代码。
3.2 关于HttpServletRequest
String username = request.getParameter(“name”);
Integer.parseInt();
String[] values = request.getParameterValues(“param”);
Enumeration<String> e = getParameterNames();包括所有请求参数名称
While(e.hasMoreElements()){
String param = e.nextElement();
}
3.2.2请求参数编码处理
1.POST请求参数编码处理
HttpServlet.getCharacterEncoding()
ContextType:text/html;charset=UTF-8
POST和GET的参数编码处理方式不同:
3.2.3 getReader()/getInputStream()读取Body内容
HttpServlet上的getReader()方法,取得一个BufferedReader对象。通过该对象,可以读取请求的Body数据。
java.io.BufferReader
HTTP“文件上传”机制解析:
3.2.4 getPart(),getParts()取得上传文件
3.2.5 使用RequestDispatcher调派请求
RequestDispatcher dispatcher = request.getRequestDispatcher(“some.do”);
或者通过ServletContext的getRequestDispatcher()或getNameDispatcher()
通过请求范围属性共享数据。
Forward方法 P82
3.3 关于HttpServletResponse
setContentType()
getWriter()
setHeader(),addHeader()
sendRedirect(),sendError();
getOutputStream()取得ServletOutputStream对象
设置响应标头、缓冲区
3.3.3 使用getOutputStream()输出二进制字符
getOutputStream()取得ServletOutputStream对象
3.3.4 使用sendRedirect(),sendError()
response.sendRedirect(“http://openhome.cc”)
3.4 综合练习 P93
3.5 重点复习 P100
Chapter4 会话管理 P105
4.2 HttpSession会话管理
Chapter5 Servlet进阶API、过滤器与监听器 P133
学习目标:
了解Servlet生命周期
使用ServletConfig与ServletContext
各种监听器的使用
实现Filter接口开发过滤器
5.1 Servlet进阶API
对于每个Servlet的设置信息,Web容器会为其生成一个ServletConfig作为代表对象。从该对象可以取得Servlet初始参数,以及代表整个Web应用程序的ServletContext对象。
5.1.1 Servlet、ServletConfig与GenericServlet
5.1.2 使用ServletConfig
ServletConfig:个别Servlet的设置信息代表对象。
getInitParameter() - getInitParameterNames()方法,可以取得设置Servlet时的初始参数。
设置个别Servlet的初始参数P136
5.1.3 使用ServletContext
5.2 应用程序事件、监听器 P142
Chapter6 使用JSP
Chapter7 使用JSTL
Chapter8 自定义标签
Chapter9 整合数据库
Chapter10 Web容器安全管理
Chapter11 JavaMail入门
Chapter12 从模式到框架