javaWeb 学习笔记 11 Servlet

java提供的动态Web资源开发技术

如图所示:实际上是写java类

用文档搜索API

 

快速入门

<dependencies>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
  </dependency>
</dependencies>
package com.itheima.web;


import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;


/**
 * 1 定义类,继承接口
 * 2 找到service方法 输出语句
 * 3 定义路径
 */
@WebServlet("/demo1")
public class ServicetDemo1 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 {
        System.out.println("servlet hello world");
    }

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

    @Override
    public void destroy() {

    }
}


Servlet执行流程


Servlet生命周期

package com.itheima.web;


import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;


/**
 * 1 定义类,继承接口
 * 2 找到service方法 输出语句
 * 3 定义路径
 */

/**
 * @WebServlet(value = "/demo2",loadOnStartup = 1)
 * 负整数:第一次 被访问时 创建Servlet对象
 * 0或正整数: 服务器 启动时 创建Servlet对象,数字越小优先级越高
 *
 * eg:一月 09, 2022 11:30:20 上午 org.apache.catalina.core.StandardEngine startInternal
 * 信息: Starting Servlet Engine: Apache Tomcat/7.0.47
 * init...
 * 一月 09, 2022 11:30:21 上午 org.apache.coyote.AbstractProtocol start
 * 信息: Starting ProtocolHandler ["http-bio-8080"]
 *
 *
 */
@WebServlet(value = "/demo2",loadOnStartup = 1)
public class ServicetDemo2 implements Servlet {

    /**
     * 初始化方法
     * 调用时机:默认情况下,Servlet被第一次访问时,调用
     * 调用次数: 1 次
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init...");
    }

    /**
     * 销毁方法
     *  1 调用时机:内存释放或者服务器关闭的时候,Servlet对象会被销毁,调用
     *  2 调用次数: 1 次
     */
    @Override
    public void destroy() {
        System.out.println("destory...");

    }

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


    /**
     * 提供服务
     *  1 调用时机:每一次 Servlet 被访问时,调用
     *  2 调用次数:多次
     *
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
//    输出一句话
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("servlet hello world");
    }

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


}

Servlet方法介绍


Servlet体系结构

package com.itheima.web;

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("/demo4")
public class ServicetDemo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get..");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post..");
    }
}

 问:1. Httpservlet中为什么要根据请求方式的不同,调用不同方法?

最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数

GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST没有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

        2.如何调用?

post和get都可以向服务器发送和请求数据,而我们一般都习惯用get请求数据,post发送数据!get方法是把数据拼接到请求行里面,我们可以直接看到里面的数据,相比较post不安全,但是简单,快捷(大小限制不超过2K)!post则是把要发送的数据转换成流的方式,大小不限制,上传给服务器,相比较get安全些!
 

Servlet urlpattern配置

//一个Servlet,可以配置多个urlPattern

@WebServlet(urlPatterns = {"/demo7","/demo8"})
public class ServicetDemo4 extends HttpServlet {}

1  比如精确匹配和目录匹配同时出现,有限访问精确度更高的,所以访问精确匹配的

2  任意匹配不推荐

3  优先级:精确路径>目录路径>扩展名路径> /* > /


XML配置方式编写 Servlet(老版本配置方式)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值