Servlet是 模块化的程序,运行在服务器端,增强了请求/响应导向服务;
2. HTTP和Servlets 答:1) Servlet是HTTP协议中作为CGI的一个替代品; 2) HttpServlet类用于开发HTTP为基础的Servlet
3. HttpServlet 答:1) 继承抽象类javax.servlet.GenericServlet,实现接口java.io.Serializable;
2) 用以开发Http协议为基础的Servlet
4. 服务方法 答:1) 每当服务接收到对Servlet的请求时,服务器就会产生一个新线程,并调用Service。service方法检查HTTP请求类型(GET、POST、PUT、DELETE等),并相应地调用doGet、doPost、doPut、doDelete等。
2) doGet/doPost方法接收HttpServletRequest和HttpServletResponse对象。
3) 99%的时间里,只需注意GET和/或POST请求;
4) 没有任何doHead方法。
5. 返回响应 答:1) PrintWriter out = response.getWriter // 用于返回文本数据给客户端
2) ServletOutputStream out = response.getOutputStream //用于返回二进制数据给客户端
用Servlet处理表单数据
1. form元素的属性
答: 1) ACTION: 用来指定要处理FORM数据的Servlet的URL,也可以指定FORM数据将要发送到的电子邮件;
2) METHOD: 指定数据传送给HTTP服务器的方法;
3) ENCTYPE: 指定数据在传输之前进行编码的方式, 例multipart/form-data 编码将每个字段作为MIME可兼容的文档的单独部分传输。
2. 解析请求
答: 1) 对于所有的请求:
a. getParameterNames: 以Enumeration形式获取表单中清单, 每一项都可以转换成String;
b. getParameter: 返回表单中参数名(区分大小写)对应的值(没有这样的参数,返回null;没有任何值,返回空String);
c. getParameterValues: 返回表单中参数名(区分大小写)对应的字符串数组(没有这样的参数,返回null;只有一个值,返回值为单一元素组);
Servlet的生命周期
1. Servlet的生命周期
答: 1) 通过web Container装载(J2EE的组件都是被动地装载入Container)并实例化Servlet对象;
2) 调用init()方法(在整个生命周期中只被调用一次);
3) 调用service()方法(在整个生命周期中可被调用多次);
4) 调用destroy()方法(在整个生命周期中只被调用一次);
2. init方法 答:1) 当首次创建Servlet时就会调用init方法, 而不是每个用户请求都会调用该方法。 、
2) 除非被destroy方法移除,否则不能被重载;
3) init方法一结束,servlet即可接受客户端请求;
3. init方法实例
答:1) 在编写接受ServletConfig作为参数的init方法时,应该总是在首行调用super.init();
2) init方法接受ServletConfig作为参数, 用以下方法获得参数值:
a. getInitParameter: 返回指定参数名称对应的值,如果参数不存在,返回null;
b. getInitParameterNames: 返回指定参数名称对应的值枚举,如果参数不存在,返回的空枚举
3. service方法 答: 1) 每当服务器接收到对Servlet的请求时,服务器就会产生一个新线程, 并调用service。service方法检查HTTP请求类型,请相应地调用
doGet、doPost、doPut、doDelete。
2) 被container调用去响应(ServletResponse)来自客户端的请求(ServletRequest);
6. destroy方法 答: 1) 服务器决定删除已经加载的Servlet实例之前将调用Servlet的destroy方法;
2) 该方法允许Servlet: a. 关闭数据库连接; b. 中止后台线程;
c. 将Cookie程序清单或访问计数写到磁盘以及执行其他类似的收尾工作。
7. 在Servlet终止时处理Service线程
答: 1) 在destroy()方法中:如有服务(通过一个同步化的实例方法取得当前线程数大于0),则置关闭状态为true(通过一个同步化的实例方法实现)。
然后循环等待服务线程数为0.
2) 在Service()方法中: 如见关闭状态为true,便不执行具体逻辑方法,直接退出。
3. 转发请求至新的资源
答: 1) requestdispatcher的二种传送请求方式
a. forward: 将请求从一个servlet传到服务器上的其他资源(servlet、JSP、HTML);
// b. include: 包括静态或动态内容;
2) 获得requestdispatcher的二种方式:
a. ServletRequest.getRequestDispatcher() // 相对路径
b. ServletContext.getRequestDispatcher() // 绝对路径
3) 四种资源范围
a. javax.servlet.ServletContext: 整个应用程序范围内;
b. javax.servlet.http.HttpSession: 会话期间;
c. javax.servlet.ServletRequest: 一个请求期间;
d. javax.servlet.jsp.PageContext: 一个JSP页面;
4) servletContext在servletConfig的对象中;
5) ServletContext.getRequestDispatcher(String path):返回一个RequestDispatcher
6) 通过RequestDispatcher的forward()方法传送请求