Servlet的详细教程

Servlet详解:从入门到实践


一、Servlet的简介

Servlet ===>server applet
java服务器的小程序,是javaweb非常重要的环节。主要作用是完成html和java后台代码的交互(请求 《=》响应)
servlet是需要运行在Java服务器(Tomcat)中的,符合http协议的servlet的核心类接口的

javax.servlet和javax.servlet.http
javax.servlet.ServerException
javax.servlet.http.HttpServlet
javax.servlet.http.HttpServletRequest
javax.servlet.http.HttpServletResponse
javax.servlet.http.Session
javax.servlet.http.Cookie

二、Servlet的入门案例

代码如下(示例):

package com.qfedu.a_servelt;

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 = "HelloServlet")
 *
 * 告诉服务器这个是我的servlet
 * @webServlet  是我们请求servlet的入口
 *  把name去掉 然后加一个斜线,如果这个斜线没有带会报错 404
 * 请求这个servlet这个资源的时候
 * url : http://localhost:8080/day39_xkh/HelloServlet
 * */
@WebServlet("/HelloServlet")//这个是注解,是修饰下面的HelloServlet
//如果想要初始化这个类,必须写这个入口
public class HelloServlet extends HttpServlet {
   
   
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
   
        //我不管你的请求方式是get还是post请求
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
   
        //设置网页字符编码集
        response.setContentType("text/html;charset=utf-8");
        //请求和响应PrintWriter  打印写入  这种写法会在浏览器中显示出来
        response.getWriter().append("我的第一个web程序");
        System.out.println("hello,world");
    }
}



结果如下(示例):
在这里插入图片描述
红色的是日志信息
在这里插入图片描述

三、创建Servlet的三种方式

①实现Servlet接口的方式

① 返回值:void 方法名: init(ServletConfig servletConfig)throws ServletException : 使用ServletConfig对象初始化我们的Servlet ,这个方法执行
②返回值:ServletConfig 方法名: getServletConfig() :获取配置信息对象的方法,这个方法不执行
③void service(ServletRequest servletRequest,ServletResponse servletResponse) throws ServletException,IOException :核心方法,这个里面类似于我们的doget方法和dopost方法,这个方法一定执行
④String getServlrtInfo() :获取Servlet详细信息的方法,不执行
⑤void destory() : 在tomcat关闭的时候,进行销毁这个servlet,只有在tomcat关闭的时候执行

init(ServletConfig servletConfig)throws ServletException : 使用ServletConfig对象初始化我们的Servlet ,这个方法执行
getServletConfig() :获取配置信息对象的方法,这个方法不执行
service(ServletRequest servletRequest,ServletResponse servletResponse) throws ServletException,IOException :核心方法,这个里面类似于我们的doget方法和dopost方法,这个方法一定执行
getServlrtInfo() :获取Servlet详细信息的方法,不执行
destory() : 在tomcat关闭的时候,进行销毁这个servlet,只有在tomcat关闭的时候执行

②继承GenericServlet抽象类

service(ServletRequest servletRequest,ServletReponse servletresponse)throws ServletException,IOException

③继承HttpServlet抽象类

3.1实现Servlet接口的方式

代码如下(示例):

package com.qfedu.a_servlet;

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

@WebServlet("/test1")
public class Servlet1 implements Servlet {
   
   
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
   
   
        //s使用ServletConfig对象初始化我们的Servlet
        //执行了,从这个地方可以说明一个问题 Servlet已经被实例化了
        System.out.println("init方法执行");
    }

    @Override
    public ServletConfig getServletConfig() {
   
   
        //获取servlet配置信息对象
        //没有执行
        System.out.println("getServletConfig方法执行");
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
   
   
        //核心方法  类似于我们的doGet()方法,和doPost()方法 请求和响应
        //一定执行的
        System.out.println("service");
    }

    @Override
    public String getServletInfo() {
   
   
        //获取Servlet的详细信息
        //没有执行
        System.out.println("getServletInfo方法执行");
        return null;
    }

    @Override
    public void destroy() {
   
   
        //当tomcat关闭的时候,执行销毁这个servlet的方法
        System.out.println("destroy方法执行");
        //只有当tomcat关闭的时候,才会执行这个方法
        
    }
}

结果如下(示例):
在这里插入图片描述

在这里插入图片描述

3.2继承GenericServlet抽象类的方式

代码如下(示例):

package com.qfedu.a_servlet;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
/*
* 第二种方式:继承GenericServlet
*
* */
@WebServlet("/test2")
public class Servlet2 extends GenericServlet {
   
   
    //只有一个方法是必须重写的,抽象方法
    //为什么?service是核心方法,因为请求和响应就是执行这个方法
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
   
   
        //解决中文乱码问题
        servletResponse.setContentType("text/html;charset=utf-8");
        servletResponse.getWriter().append("我是第二种创建Servlet的方法");

    }
}

结果如下(示例):
在这里插入图片描述

3.3继承HttpServlet的方式

代码如下(示例):

package com.qfedu.a_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("/test3")
public class Servlet3 extends HttpServlet {
   
   
    //因为在前端的时候,有两种请求方式get和post
    //doGet和doPost方法写在了Service方法中了
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
   
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
   
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().println("我是HttpServlet创建的Servlet");
    }
}


结果如下(示例):
在这里插入图片描述
这三个创建方式选择哪个?

最好的方式是继承HttpServlet

​ 1.可以减少对其他方法的要求 init destroy

​ 2.可以根据前端的要求进行分门别类 doGet doPost

四、Servlet注解和配置文件的写法

1.上面采用的都是注解的写法,对Servlet的版本有要求,servlet3.0及以上的版本才可以使用注解
2.还有一种写法是配置文件的写法。对文件没有要求

4.1配置文件的写法

① 需要在web.xml文件写配置
web.xml文件代码如下
代码如下(示例):

<?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>
        <display-name>WebXMLServlet</display-name>
<!--     servlet-name要和servlet-mapping所对应,映射的关系-->
        <servlet-name>WebXMLServlet</servlet-name>
<!--      servlet-class 是servlet所对应的类-->
        <servlet-class>com.qfedu.b_servlet.WebXMLServlet</servlet-class>
<!--      只要tomcat服务器一启动就会加载这个类-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>WebXMLServlet</servlet-name>
        <url-pattern>/Webxml.do</url-pattern>
    </servlet-mapping>
</web-app>

java代码:
代码如下(示例):

package com.qfedu.b_servlet;

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

public class WebXMLServlet extends HttpServlet {
   
   
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
   
        doGet(req,resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
   
        //设置网页的编码格式
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().append("我这个是配置文件的写法");
    }
}

结果如下(示例):
在这里插入图片描述

4.2注解的写法

代码如下(示例):

package com.qfedu.b_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;
/**
 * name是Servlet的名字  对应配置文件中的servlet-name
 * value 是servlet程序对应的url  只能写一个
 * loadOnStartup  tomcat启动的时候会不会自动加载这个servlet类
 *                  默认为 -1 (不加载)   1(自动加载)
 * urlPatterns对应配置文件中的url-pattern  可以写多个url,都可以访问
 *
 * */
@WebServlet(name = "AnnotionServlet",urlPatterns = {
   
   "/as","/as.do","/as.action"},loadOnStartup = 1)
public class AnnotionServlet extends HttpServlet {
   
   
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
   
        System.out.println("这个是注解的写法");
        //设置网页的编码格式
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小yu别错过

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

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

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

打赏作者

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

抵扣说明:

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

余额充值