Tomcat总结

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--配置servlet的别名,同时在servlet-class配置项中添加servlet类的完全限定名  包名+类名-->
    <servlet>
        <servlet-name>myServlet</servlet-name>
        <servlet-class>com.hailu.MyServlet</servlet-class>
    </servlet>
    <!--配置servlet跟请求的映射关系-->
    <servlet-mapping>
        <servlet-name>myServlet</servlet-name>
        <url-pattern>/first</url-pattern>
    </servlet-mapping>
    
    <servlet>
        <servlet-name>second</servlet-name>
        <servlet-class>com.hailu.MyServlet2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>second</servlet-name>
        <url-pattern>/second</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>life</servlet-name>
        <servlet-class>com.hailu.ServletLife</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>life</servlet-name>
        <url-pattern>/life</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>MethodServlet</servlet-name>
        <servlet-class>com.hailu.MethodServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>MethodServlet</servlet-name>
        <url-pattern>/method</url-pattern>
    </servlet-mapping>
    
    <servlet>
        <servlet-name>request</servlet-name>
        <servlet-class>com.hailu.RequestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>request</servlet-name>
        <url-pattern>/request</url-pattern>
    </servlet-mapping>
</web-app>
package com.hailu;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 *  Servlet类中可以有service方法,
 *      用来接受get或者post请求
 *      如果service和doGet或者doPost同时存在,那么默认会调用service方法
 *      如果同时又server,doGet和doPost方法,在service方法的实现中调用了super.service()会根据请求的方式跳转到doGet或者doPost
 *  doget方法:
 *      用来接受get请求
 *  doPost方法:
 *      用来接受post请求
 *
 * 总结:
 *      在编写servlet类的时候,不需要重新实现service方法,只需要重写doGet和doPost方法即可,用来接受post或者get请求
 *
 */
public class MethodServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("我是post");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println(10/0);
        System.out.println("我是get");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("我是service");
        super.service(req, resp);
    }
}
package com.hailu;

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;
import java.util.Enumeration;

/**
 * HttpServletRequest用来存放客户端请求的参数
 *  请求行
 *  请求头
 *  请求体
 *
 *
 */
public class RequestServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("post请求");
        this.doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("get请求");
        //获取请求行数据
        //获取请求中的请求方式
        String method = request.getMethod();
        System.out.println(method);
        //获取请求的完整地址
        StringBuffer url = request.getRequestURL();
        System.out.println(url);
        //获取请求中的资源路径
        String uri = request.getRequestURI();
        System.out.println(uri);
        //获取请求中的协议
        String schema = request.getScheme();
        System.out.println(schema);

        //获取请求头数据
        //根据key获取value的值
        String userAgent = request.getHeader("User-Agent");
        System.out.println(userAgent);
        //获取请求头信息中的所有key的枚举对象
        Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()){
            String key = headerNames.nextElement();
            String value = request.getHeader(key);
//            System.out.println(headerNames.nextElement());
            System.out.println(key+":"+value);
        }

        //获取用户请求数据
        //无论请求方式是post还是get,获取用户数据的方式不变
        String name = request.getParameter("name");
        String pwd = request.getParameter("pwd");
        String fav = request.getParameter("fav");
        System.out.println(name+":"+pwd+":"+fav);

        //获取用户数据中的所有key
        Enumeration<String> parameterNames = request.getParameterNames();
        while(parameterNames.hasMoreElements()){
            System.out.println(parameterNames.nextElement());
        }

        //获取相同key的多个数据值,例如checkbox
        String[] parameterValues = request.getParameterValues("fav");
        for (String  str:parameterValues) {
            System.out.println("fav:"+str);
        }

        //其他常用方法
        //获取远程客户端的地址
        String remoteAddress = request.getRemoteAddr();
        //获取远程客户端的主机名称
        String remoteHost = request.getRemoteHost();
        //获取远程客户端的端口号
        int remotePort = request.getRemotePort();
        System.out.println(remoteAddress+":"+remoteHost+":"+remotePort);

        String localAddr = request.getLocalAddr();
        String localName = request.getLocalName();
        System.out.println(localAddr+":"+localName);

    }
}
package com.hailu;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 *
 * response:表示服务端返回数据的响应对象
 *  响应头:
 *  响应行:
 *  响应体:
 *
 *
 *
 */
public class ResponseServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("this is post");
        this.doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("this is get");
        //设置响应头,按照key-value键值对的方式来设置,如果存在相同的key,会把value的值覆盖
        response.setHeader("hehe","haha");
        response.setHeader("hehe","heihei");
        //设置响应头,按照key-value键值对的方式来设置,如果存在相同的key,不会覆盖值
        response.addHeader("beijing","shanghai");
        response.addHeader("beijing","guangzhou");

        //服务端返回的对象数据要按照一定的格式要求进行渲染,只有是html格式才会识别标签
//        response.setHeader("Content-Type","text/html");
        response.setHeader("Content-Type","text/plain");
//        response.setContentType("text/html");
        //设置响应状态码
//        response.sendError(404,"not found");
        response.getWriter().write("<b>java is easy</b>");

    }
}
package com.hailu;

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(name = "ServletLife")
public class ServletLife extends HttpServlet {

    /**
     * 完成servlet对象的初始化工作
     *  在servlet接受到第一次请求的时候创建对象
     *  生命周期:从第一次接受请求开始到服务器关系之后销毁
     *  当在web.xml文件中配置了<load-on-startup>1</load-on-startup>,在开启tomcat的时候就会创建servlet对象,中间的数值表示优先级的意思
     * @throws ServletException
     */
    @Override
    public void init() throws ServletException {
        System.out.println("init");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("servlet life");
        System.out.println("learn servlet life");
        System.out.println(req.getParameter("name"));
    }

    @Override
    public void destroy() {
        System.out.println("我被销毁了");
    }
}
package com.hailu;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


/**
 * 处理乱码问题的方式
 *  1、get请求
 *      1、获取字符串之后使用new String(name.getBytes("iso-8859-1"),"utf-8")
 *      2、设置request的编码格式,同时在server.xml中添加useBodyEncodingForURI=true的属性
 *      3、在server.xml中添加URIEncoding="utf-8"
 *  2、post请求
 *      1、request.setCharacterEncoing("utf-8")
 *  3、response响应编码
 *       response.setCharacterEncoding("gbk");
 *
 *
 *
 *
 */
public class CharsetServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        System.out.println("post");
        request.setCharacterEncoding("utf-8");
        String name = request.getParameter("name");
        System.out.println(name);
        response.setCharacterEncoding("gbk");
        response.getWriter().write("欢迎你!");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        System.out.println("get");
        //设置请求的编码格式
//        request.setCharacterEncoding("utf-8");
        String name = request.getParameter("name");
//        System.out.println(new String(name.getBytes("iso-8859-1"),"utf-8"));
        System.out.println(name);
    }
}
原文地址:https://www.cnblogs.com/yanghailu/p/12756210.html