Servlet必备资料总结(Tomcat学习之路)参考黑马程序员Java web

servlet基础

package com.tomcat.servlet;
import javax.servlet.*;
import java.io.IOException;
public class MyServlet2 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {

    }
}
  1. public void init(ServletConfig servletConfig) 负责Servle的初始化工作创建好Servlet对象后会调用此方法,该方法用于接收一个ServletConfig 类型的参数,Servlet容器通过这个参数向Servlet传递初始化配置。
  2. public ServletConfig getServletConfig() 返回容器调用init(ServletConfig config)方法时传递给Servlet的ServletConfig 对象。
  3. (重点)public void service(ServletRequest servletRequest, ServletResponse servletResponse) 负责用户的请求,当容器接收到客户端访问Servlet对象的请求时,就会调用此方法,容器会构造一个表示客户端请求信息的ServletRequsest对象和一个响应客户端的ServletResponse对象作为参数传递给service()方法,在service()方法中可以通过ServletRequset对象得到客户端的相关请求,对请求进行处理后,调用ServletResponse对象的方法设置响应信息。
  4. public String getServletInfo()返回一个字符串,其中包含关于Servlet的信息。(例如:作者、版本、版权等)
  5. public void destroy()释放Servlet占用的资源,当Servlet对象被销毁时,容器会调用此方法。

Servlet的生命周期

Servlet的生命周期大致可以分为三个阶段,分别是初始化阶段、运行阶段、销毁阶段。

1、初始化阶段

客户端向Servlet容器发送HTTP请求访问Servlet时,Servlet容器首先会解析请求,检查内存中是否有该Servlet对象,如果有直接访问该Servlet对象,如果没有就要创建Servlet实例对象,然后通过init()方法实现Servlet初始化工作。
注意:init()方法只被调用一次!!!!!

2.运行阶段

这是Servlet最重要的阶段,在这个阶段,Servlet容器会为这个请求创建代表HTTP请求的ServletRequest对象和代表HTTP响应的ServletResponse对象然后将他们作为参数传递给Servlet的service()方法。service()方法从ServletRequest对象中获取客户端发来的请求信息并处理该请求,通过ServletResponse对象生成响应结果。
注意:在Servlet整个生命周期内,对于Servlet的每一次请求访问,Servlet容器都会调用一次Servlet的service()方法,并且创建新的ServletRequest对象和ServletResponse对象

3、销毁阶段

当服务器关闭或Web应用被移出容器时,Servlet随着Web应用销毁而销毁,在销毁Servlet之前,Servlet容器会调用Servlet的destroy()方法,以便让Servlet对象释放它所占有的资源。
注意:在Servlet的整个生命周期中,destroy()方法也被调用一次。

SevletConfig和ServletContext

ServletConfig接口

当Tomcat初始化一个Servlet时,会将该Servlet的配置的信息封装到一个ServletConfig对象中,通过init(ServletConfig cofig)方法将ServletConfig对象传递给Servlet。ServletConfig定义了一系列获取配置信息的方法,接下来通过一张表来描述ServletConfig的常用方法。

方法说明功能描述
String getParameter(String name)初始化参数名返回对应的初始化状态参数值
Enmueration getInitParameterNames()返回一个Enumeration对象,其中包括所有的初始化参数名
ServletContext getServletContext()返回一个代表当前Web应用的ServletContext对象
String getServletName()返回Servlet的名字,即Web.xml中< servlet-name >元素

实例:

ServletContext接口

由于一个web应用所有的Servlet共享一个ServletContext对象,因此ServlerContext对象的域属性可以被该Web应用中的所有Servlet访问,在ServletContext接口定义了分别用于增加、删除、设置ServletContext域属性的4个方法。

方法说明功能描述
Enmueration getAttributeNames()返回一个Enumeration对象,该对象包含所有存放在ServletContext中所有域属性值
Object getAttibute(String name)根据参数指定的属性名返回一个与之匹配的域值属性
woid removeAttibute(String name)根据匹配参数指定的域属性名,从ServletContext中删除匹配的域属性
void setAttibute(String name,Object obj)设置ServletContext的域属性,其中name是域属性名,obj是域值

实例:

Servlet映射(路由配置)

(1):基于注解的方式配置

只适用于Tomcat3以上版本(好像是3,记不清了)
在Java类里添加

package cn.itcast.chapter06.session.example;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/logout")         //这里就是路由的配置

public class LogoutServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getSession().removeAttribute("user");
        resp.sendRedirect("/wel");
    }

    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

**@WebServlet("/logout") 此方法只能访问一个java文件 //这里就是路由的配置,此方法也是最常用的方法。**引号里面就是路由

(2)基于xml文件配置方式

<servlet> 
	 <servlet-name>hello</servlet-name>  
	 <servlet-class>com.southwind.servlet.HelloServlet</servlet-class>
 </servlet>
<servlet-mapping>  
	<servlet-name>hello</servlet-name>  
	<url-pattern>/demo2</url-pattern> 
</servlet-mapping>

打开web.xml进行添加代码。在上面的配置信息中,com.southwind.servlet.HelloServlet被设置为默认的Servlet,它对Tomcat服务上所有的Web应用都起作用。当Tomcat服务器中的某个Web应用没有默认的Servlet时都会将DefaultServlet作为默认的Servlet。当客户端访问Tomcat服务器中的某个静态HTML文件时,DefaultServlet会判断对应HTML是否存在,如果存在,将会以数据流的形式发给客户端,否则会报告404错误。

Servlet高级应用

请求与响应

在HTTP响应消息中,大量数据是通过响应消息体传递的,因此,ServletResponse遵循IO流传递大量数据的设计理念,在发送状态消息体时,定义了两个输出流相关的方法,如下:
1、getOutputStream()方法:
获取字节的输出流对象为ServletOutputStream类型。由于ServletOutputStream是OutputStream的子类,它可以直接输出字节组中的二进制数据。因此,要想输出二进制格式的正文,就需要getOutputStream()方法。
2、getWriter()方法
该方法所获取的字符输出对象为PrintWriter类型,由于PrintWriter类型对象可以直接输出字符文本内容,因此,要想输出内容全为字符文本的网页文档时,需要使用getWriter()方法。
3、设置解决中为乱码
第一种

//设置HttpServletResponse使用UTF-8
response.setCharacterEncoding(utf-8)
//通知浏览器使用UTF-8解码
response.setHeader("Content-Type","text/html;charset=utf-8")

第二种(最常用)

//包含第一种的两个功能
response.setContextType("text/html;charset=utf-8")

4.定时刷新网页

//指定地址的刷新;每隔两秒刷新一次
response.setHeader("Refresh","2;URL="http://localhost:8080/Login.html")
//普通刷新;每隔三秒刷新一次
response.setHeader("Refresh","3")

5、静止浏览器缓存页面

Expries:0
Cache-Control:no-cache
pragma:no-cache

HTTPServlet

package com.Servlet;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/test")     //路由访问  http://localhost:8080/test其中/test就是路由

public class HttpServlet extends javax.servlet.http.HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)throws SecurityException,IOException{
            response.getWriter().write("Get");  //通过Get方法访问,则页面显示Get
        PrintWriter out = response.getWriter();
            out.write("This is Get!");
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)throws SecurityException,IOException{
        response.getWriter().write("Post");   //通过Post方法访问,则页面显示post
        PrintWriter out = response.getWriter();
        out.write("This is Post!");
    }
}

通过观察源代码,发现HttpServlet主要有两大功能: **一:** 根据用户的不同请求方式,定义相应的doXxx()方法处理用户请求,例如GET请求方式与doGet()对应;POST请求方式与doPost()对应。 **二:** 通过service()方法将HTTP请求和响应分别转化为HttpServletRequset和HttpServletResponse类型的对象。 **注意:由于HttpServlet类在重写service()方法中,为每一种HTTP请求方法都定义了对应的doXxx()方法,继承后不需要重写Service()方法。**
# 代码注释: ***将字符串“Get”发送到客户端 方式一: response.getWriter().write("Get"); 方式二: PrintWriter out = response.getWriter(); out.write("This is Get!");***

高级应用实例

首先写出一个接口类,对接Servlet。

package com.tomcat.servlet;
import javax.servlet.*;
import java.io.IOException;
public class MyServlet2 implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }
    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

再写一个类继承上面的 MyServlet2类

package com.tomcat.servlet;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class https extends MyServlet2 {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String method = request.getMethod();
        switch (method){
            case "GET":
                this.doGet(request,response);
            case "POST":
                this.doPost(request,response);
        }
        }
        void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        }
        void doPost(HttpServletRequest request, HttpServletResponse response)throws SecurityException, IOException{
        }
}

真正实现对不同的请求方式进行处理(这样写的好处:可以对上面的代码重复利用!)

package com.tomcat.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/test")

public class http extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("GET");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("POST");
    }
}

代码注释:

public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
(将ServletRequset对象转化为HttpServletRequset。)
HttpServletResponse response = (HttpServletResponse) servletResponse;
String method = request.getMethod();          //(获取请求方式!并赋值给method。)
switch (method){
case “GET”:
this.doGet(request,response);
case “POST”:
this.doPost(request,response);
}
}


下一章(会话及其会话技术)

  • 10
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊~小 l i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值