前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >创建Servlet的几种方式+web.xml中关于servlet的一些配置+浏览器、服务器交互Postman测试

创建Servlet的几种方式+web.xml中关于servlet的一些配置+浏览器、服务器交互Postman测试

作者头像
发布2020-10-23 10:34:57
1.3K0
发布2020-10-23 10:34:57
举报
文章被收录于专栏:后端JavaEE

1.继承Servlet接口,重写servlet方法

代码语言:javascript
复制
package d01;

import javax.servlet.*;
import java.io.IOException;
import java.util.Date;

/**
 * zt
 * 2020/8/28
 * 10:53
 */
public class MyServlet implements Servlet {
    /**
     * 初始化servlet,只执行一次
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("初始化,呱?"+this.hashCode());
    }

    /**
     * 获取servlet配置
     * @return
     */
    @Override
    public ServletConfig getServletConfig() {
        System.out.println("获取servlet配置,呱?");
        return null;
    }

    /**
     * 服务方法,处理浏览器请求的方法
     * @param request 请求对象:封装请求信息
     * @param response 响应对象:封装响应信息
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        // 请求和响应乱码问题解决
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //控制台打印
        System.out.println("service"+new Date());
        //输出数据给浏览器
        response.getWriter().write("hello 呱?");
    }

    /**
     * 获取servlet基本信息,版本,作者等
     * @return
     */
    @Override
    public String getServletInfo() {
        System.out.println("getServletInfo:"+hashCode());
        return null;
    }

    /**
     * 销毁,tomcat关闭的时候执行
     */
    @Override
    public void destroy() {
        System.out.println("destroy:"+hashCode());
    }
}

2.继承HttpServlet类,重写doget、dopost方法

直接输入myServlet2,会访问doGet方法 直接输入Demo1.htlm,店家按钮,会访问doPost方法

代码语言:javascript
复制
package d01;

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

/**
 * zt
 * 2020/8/28
 * 11:33
 */
public class MyServlet2 extends HttpServlet {
    /**
     * 处理get请求(浏览器直接输入地址)
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doget执行了0.0呱?");

        /*// 请求和响应乱码问题解决
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //输出数据给浏览器
        response.getWriter().write("hello 呱?");*/
    }

    /**
     * 处理post请求
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
        System.out.println("dopost执行了0.0呱?");

    }
}

运行结果

代码语言:javascript
复制
F:\Tomcat\Tomcat9\apache-tomcat-9.0.11\bin\catalina.bat run
[2020-08-28 11:44:50,298] Artifact 0828:war exploded: Waiting for server connection to start artifact deployment...
Using CATALINA_BASE:   "C:\Users\49841\.IntelliJIdea2019.3\system\tomcat\Tomcat_9_0_11_0828"
Using CATALINA_HOME:   "F:\Tomcat\Tomcat9\apache-tomcat-9.0.11"
Using CATALINA_TMPDIR: "F:\Tomcat\Tomcat9\apache-tomcat-9.0.11\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk1.8.0_221"
Using CLASSPATH:       "F:\Tomcat\Tomcat9\apache-tomcat-9.0.11\bin\bootstrap.jar;F:\Tomcat\Tomcat9\apache-tomcat-9.0.11\bin\tomcat-juli.jar"
28-Aug-2020 11:44:52.831 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/9.0.11
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Aug 11 2018 19:47:23 UTC
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         9.0.11.0
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Windows 10
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            10.0
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             C:\Program Files\Java\jdk1.8.0_221\jre
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.8.0_221-b11
28-Aug-2020 11:44:52.834 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         C:\Users\49841\.IntelliJIdea2019.3\system\tomcat\Tomcat_9_0_11_0828
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         F:\Tomcat\Tomcat9\apache-tomcat-9.0.11
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=C:\Users\49841\.IntelliJIdea2019.3\system\tomcat\Tomcat_9_0_11_0828\conf\logging.properties
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote=
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.port=1099
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.ssl=false
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.password.file=C:\Users\49841\.IntelliJIdea2019.3\system\tomcat\Tomcat_9_0_11_0828\jmxremote.password
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.access.file=C:\Users\49841\.IntelliJIdea2019.3\system\tomcat\Tomcat_9_0_11_0828\jmxremote.access
28-Aug-2020 11:44:52.835 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.rmi.server.hostname=127.0.0.1
28-Aug-2020 11:44:52.836 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
28-Aug-2020 11:44:52.836 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
28-Aug-2020 11:44:52.836 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
28-Aug-2020 11:44:52.836 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=C:\Users\49841\.IntelliJIdea2019.3\system\tomcat\Tomcat_9_0_11_0828
28-Aug-2020 11:44:52.836 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=F:\Tomcat\Tomcat9\apache-tomcat-9.0.11
28-Aug-2020 11:44:52.836 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=F:\Tomcat\Tomcat9\apache-tomcat-9.0.11\temp
28-Aug-2020 11:44:52.836 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library [1.2.17] using APR version [1.6.3].
28-Aug-2020 11:44:52.837 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
28-Aug-2020 11:44:52.837 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
28-Aug-2020 11:44:53.907 信息 [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.0.2o  27 Mar 2018]
28-Aug-2020 11:44:54.043 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
28-Aug-2020 11:44:54.065 信息 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
28-Aug-2020 11:44:54.074 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
28-Aug-2020 11:44:54.076 信息 [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
28-Aug-2020 11:44:54.077 信息 [main] org.apache.catalina.startup.Catalina.load Initialization processed in 1669 ms
28-Aug-2020 11:44:54.118 信息 [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
28-Aug-2020 11:44:54.119 信息 [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/9.0.11
28-Aug-2020 11:44:54.138 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
28-Aug-2020 11:44:54.151 信息 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
28-Aug-2020 11:44:54.155 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in 78 ms
Connected to server
[2020-08-28 11:44:54,419] Artifact 0828:war exploded: Artifact is being deployed, please wait...
[2020-08-28 11:44:54,915] Artifact 0828:war exploded: Artifact is deployed successfully
[2020-08-28 11:44:54,915] Artifact 0828:war exploded: Deploy took 496 milliseconds
28-Aug-2020 11:45:04.141 信息 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [F:\Tomcat\Tomcat9\apache-tomcat-9.0.11\webapps\manager]
28-Aug-2020 11:45:04.200 信息 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [F:\Tomcat\Tomcat9\apache-tomcat-9.0.11\webapps\manager] has finished in [58] ms
doget执行了0.0呱?
doget执行了0.0呱?
dopost执行了0.0呱?

3.利用idea快捷创建servlet

在这里插入图片描述
在这里插入图片描述

创建后会自动生成doget和dopost方法

代码语言:javascript
复制
/**
 * zt
 * 2020/8/28
 * 14:09
 */
@WebServlet(name = "Servlet3")
public class MyServlet3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
        System.out.println("dopost执行了0.0呱?");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doget执行了0.0呱?");
    }
}

4.servlet一些关于web.xml的配置

4.1servlet与servlet-mapping配置

4.2servlet加载时机:1.(默认)第一次访问servlet时创建(-1)。2.启动tomcat时创建(>=0)

4.3servlet参数(可以在自己创建的servlet中调用)(可写在初始化里面或者servlet的其他方法中)

代码语言:javascript
复制
servletConfig.getInitParameter("username2");
代码语言:javascript
复制
<init-param>
            <param-name>username2</param-name>
            <param-value>呱?</param-value>
</init-param>

web.xml全部代码

代码语言:javascript
复制
<?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_3_1.xsd"
         version="3.1">
<!--    配置-->
    <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>d01.MyServlet</servlet-class>
        <!--        servlet参数-->
        <init-param>
            <param-name>username</param-name>
            <param-value>zhuxi</param-value>
        </init-param>
        <init-param>
            <param-name>age</param-name>
            <param-value>18</param-value>
        </init-param>
<!--        servlet加载时机:1.(默认)第一次访问servlet时创建,2.启动tomcat时创建-->
<!--        1.(默认)第一次访问servlet时创建-->
<!--        <load-on-startup>-1</load-on-startup>-->
<!--        2.启动tomcat时创建-->
        <load-on-startup>0</load-on-startup>

    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/myServlet</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>MyServlet2</servlet-name>
        <servlet-class>d01.MyServlet2</servlet-class>
        <!--        servlet参数-->
        <init-param>
            <param-name>username2</param-name>
            <param-value>呱?</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet2</servlet-name>
        <url-pattern>/myServlet2</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>MyServlet3</servlet-name>
        <servlet-class>d01.MyServlet3</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet3</servlet-name>
        <url-pattern>/myServlet3</url-pattern>
<!--        <url-pattern>*.do</url-pattern>-->
<!--        匹配所有不包括jsp-->
<!--        <url-pattern>/</url-pattern>-->
<!--        匹配所有-->
<!--        <url-pattern>/*</url-pattern>-->
    </servlet-mapping>
</web-app>

5.利用注解配置servlet (与web.xml中类似)

代码语言:javascript
复制
package d01;

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

/**
 * zt
 * 2020/8/28
 * 15:19
 */
//1. name (servlet名称) 相当于web.xml的 <servlet-name>MyServlet</servlet-name>  , 注解中的名字可要可不要
// 2.1 value 配置访问路径
// 2.2 url-patterns 配置访问路径
// 3.loadonstartup (servlet创建时机)
// 4.initParams设置servlet参数 (没有意义,直接写在下面即可)initParams = {@WebInitParam(name="大明",value="498999698@qq.com")}
@WebServlet(value = {"/login","login2"},loadOnStartup = 0,initParams = {@WebInitParam(name="大明",value="498999698@qq.com")})
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("使用注解配置servlet");
        String name = getInitParameter("大明");
        System.out.println(name);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

6.浏览器、服务器交互

代码语言:javascript
复制
package d02;

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.io.PrintWriter;

/**
 * zt
 * 2020/8/28
 * 16:05
 */
@WebServlet(value = "/res")
public class RegistServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 请求和响应乱码问题解决
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //2. request封装浏览器发送的请求信息
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("用户名:"+username);
        System.out.println("密码:"+password);
        //3. 其他方法
        System.out.println("获取请求头:"+request.getHeader("Accept"));
        System.out.println("请求方式:"+request.getMethod());
        System.out.println("getRequestURI统一资源标识符(包含定位符)"+request.getRequestURI());
        System.out.println("getRequestURL统一资源定位符"+request.getRequestURL());
        System.out.println("getRemoteAddr"+request.getRemoteAddr());

        //1.获取字节流(二进制数据(图片、声音或者文本)发给浏览器,使用ServletOutputStream)
//        ServletOutputStream outputStream = response.getOutputStream();
        //2.获取字符流,把文本数据发给浏览器(不能同时用)
        PrintWriter writer = response.getWriter();
        writer.write("hello,呱?");


    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

浏览器运行结果:

在这里插入图片描述
在这里插入图片描述

服务器运行结果:

代码语言:javascript
复制
用户名:null
密码:null
获取请求头:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
请求方式:GET
getRequestURI统一资源标识符(包含定位符)/0828_war_exploded/res
getRequestURL统一资源定位符http://localhost:8080/0828_war_exploded/res
getRemoteAddr0:0:0:0:0:0:0:1
代码语言:javascript
复制
此时的用户名密码为null,是可以通过get与post方式传递的
get方式:直接在浏览器地址栏输入http://localhost:8080/0828_war_exploded/res?username=123&password=123
post方式:在postman中测试,如下图:
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.继承Servlet接口,重写servlet方法
  • 2.继承HttpServlet类,重写doget、dopost方法
  • 3.利用idea快捷创建servlet
  • 4.servlet一些关于web.xml的配置
    • 4.1servlet与servlet-mapping配置
      • 4.2servlet加载时机:1.(默认)第一次访问servlet时创建(-1)。2.启动tomcat时创建(>=0)
        • 4.3servlet参数(可以在自己创建的servlet中调用)(可写在初始化里面或者servlet的其他方法中)
          • web.xml全部代码
          • 5.利用注解配置servlet (与web.xml中类似)
          • 6.浏览器、服务器交互
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档