Servlet知识点总结1

Servlet介绍

什么是Servlet

1.Servlet是JavaEE规范之一,也就是一个接口
2.是JavaWeb的三大组件之一:Servlet程序、Filter过滤器、Listener监听器
3。它可以接受客户端发送的请求,并相应数据给客户端,是运行在服务器端的程序。

URL地址到Servlet程序的访问

在这里插入图片描述

Servlet的生命周期

1.执行Servlet构造器方法
2.执行init初始化方法
这两步在创建Servlet程序会调用
3.执行service方法
4.执行destory方法

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

public class Test implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    //service方法是专门用来处理请求和响应的
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3.HelloServlet被访问了");
        //因为它有getMethod()方法
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        //获取请求方式,如 get  post
        String method = httpServletRequest.getMethod();
        //这里的"GET"为啥要大写:因为Servlet规范中封装了http协议中的几个方法
        // :GET/POST/PUT/DELETE/INPUT,
        // 这些方法是完全遵从http协议来命名的。
        // 简单来说,当前台指定使用method="get"的方式提交请求时,
        // 后台的getMethod()返回的值就是“GET“。
        if("GET".equals(method)){
            //为了防止代码臃肿,get和post方法单独拎出来写成一个方法
            // System.out.println("get请求");//执行get请求的代码
            doget();
        }else{
            //System.out.println("post请求");//执行post请求的代码
            dopost();
        }

    }

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

通过继承HttpServlet实现Servlet(推荐)

在一般的项目开发中,都是使用继承HttpServlet类的方式去实现Servlet程序

步骤:
1.编写一个类去继承HttpServlet类
2.根据实际业务重写doGet或doPost方法
3.到web.xml中的配置Servlet程序的访问地址

Servlet类的代码;

public class HelloServlet2 extends HttpServlet {

       //2.如果业务有doGet doPost请求,重写dogGet doPost方法
    	//doGet在get请求的时候调用
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //System.out.println("HelloServlet2的doGet方法");
//        System.out.println("地址是:"+req.getRemoteHost());
//        System.out.println("1   "+req.getRequestURI());
//        System.out.println("2   "+req.getRequestURL());
        System.out.println(req.getHeader("User-Agent"));
    }
    //doPost在post请求的时候调用
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloServlet2的doPost方法");
    }
}

web.xml文件配置:

<!--servlet标签给Tomcat配置Servlet程序-->

    <servlet>
  	    <!--servlet-name标签 Servlet程序起一个别名(一般是类名)-->
        <servlet-name>HelloServlet2</servlet-name>

		<!--servlet-class是Servlet程序的全类名-->
        <servlet-class>com.baidu.HelloServlet2</servlet-class>
        
  	<!--servlet-mapping标签给servlet程序配置访问地址-->
    </servlet>
        <servlet-mapping>
		<!--servlet-name标签的作用是告诉服务器,我当前配置的地址给哪个Servlet程序使用-->
        <servlet-name>HelloServlet2</servlet-name>
        
        <!--url-pattern标签配置访问地址
            /  :斜杠在服务器解析的时候,表示地址wei http://ip:port/工程路径       这边的工程路径就是webTest   <br/>
            /hello:表示地址为http://ip:port/工程路径/hello   (hello是自定义的,用来在浏览器输入地址访问HelloServlet这个类;一般需要和类相对应,约定大于配置)   <br/n>
        -->
        <!--注意配置的路劲是以斜杠打头,/  初学容易犯错-->
        <url-pattern>/hello2</url-pattern>

    </servlet-mapping>
    

使用IDEA创建Servlet程序步骤:
Nen—>Create New Servlet—>配置Servlet信息

ServletConfig类

ServletConfig类是Servlet类的配置信息类。
Servlet程序和ServletConfig对象都是由Tomcat负责创建,我们负责创建。Servlet在 创建的时候会创建一个对应的ServletConfig对象。

ServletConfig类的三大作用

1.获取Servlet别名servlet-name的值
2.获取初始化参数init-param
3.获取ServletContext对象

web.xml配置:

    <servlet>
        <servlet-name>HelloServlet2</servlet-name>
        <servlet-class>com.baidu.HelloServlet2</servlet-class>
        <!--init-param是初始化参数-->
        <init-param>
            <!--参数名-->
            <param-name>username</param-name>
            <!--参数值-->
            <param-value>root</param-value>
        </init-param>
        
        <init-param>
            <!--参数名-->
            <param-name>url</param-name>
            <!--参数值-->
            <param-value>jdbc:mysql://localhost:3306/WebTes</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloServlet2</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>

Servlet中的代码:

    @Override
    public void init(ServletConfig config) throws ServletException {
        //1.可以获取Servlet程序的别名servlet-name的值
        System.out.println("HelloServlet2程序的别名是:"+ config.getServletName());

        //2.获取初始化参数init-param
        System.out.println("初始化参数username的值是:"+config.getInitParameter("username"));
        System.out.println("初始化参数url的值是:"+ config.getInitParameter("url"));

        //3.获取Servlet对象
        System.out.println(config.getServletContext());

    }

ServletContext类

作用:
1.获取webxml中配置的上下文参数context-param
2.获取当前的工程路径,格式:/工程路径
3.获取工程部署后在服务器硬盘上的绝对路径
4.像Map一样存取路径
web.xml配置程序:

    <!--context-param是上下文参数(属于整个web工程)-->
    <context-param>
        <param-name>username</param-name>
        <param-value>context</param-value>
    </context-param>

    <!--context-param是上下文参数(属于整个web工程)-->
    <context-param>
        <param-name>password</param-name>
        <param-value>root</param-value>
    </context-param>
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
        //获取ServletContext对象
        ServletContext context = getServletContext();
        
        context.setAttribute("key","value");
        System.out.println("获取key中的值是:"+ context.getAttribute("key"));
    }

HTTP协议

这里简单说一下HTTP协议,这是一个应用层协议;用于客户端和服务器之间进行通信(中间还有一层代理服务器)。
客户端给服务器发送数据叫请求。
服务器给客户端回传数据叫响应。
请求分为GET和POST两种。
GET请求:
1.form标签 method= get
2.a 标签
3.link标签引入css
4.Script标签引入js文件
5.img标签引入图片
6.iframe引入html页面
7.在浏览器地址栏中输入地址后敲回车
POST请求:
8.form标签 method= post
协议格式分为请求协议格式、响应格式。(见计算机网络)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值