Servlet中的Service、get、post方法的区别

本文介绍了Servlet中Service方法的作用,它作为HTTP请求的入口,根据请求类型自动调用doGet或doPost方法。在示例中,展示了如何通过JSP发送GET请求到Servlet,并解释了在重写Service方法时,无需额外重写doGet或doPost方法。Servlet会自动根据请求方式选择合适的方法进行处理。

Servlet类中有init、Service、destroy等几个方法。其中,Service方法又封装了doget方法和dopost方法。也就是说,在重写Servlet类的时候,只需要重写Service方法即可,不需要重写doget或dopost方法去处理请求。

在Service方法中,如果浏览器是通过post请求,会自动调用Service方法中的dopost方法去处理请求。

比如,在index.jsp文件中,使用get方法发送请求:

 

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>JSP - Hello World</title>
</head>
<body>
<h1><%= "Hello World!" %>
</h1>
<br/>
<a href="hello-servlet">Hello Servlet</a>
<form action="hello-servlet" method="get">
    <input type="text" name="username">
    <input type="submit">
<%--    <button>登录</button>--%>
</form>
</body>
</html>

@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("这是init方法");
    }

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

//    @Override
//    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        req.setCharacterEncoding("utf-8");              // post请求从网页传过来的中文参数会乱码
//        System.out.println("这是service方法");
//        String str = req.getRequestURI() + "";
//        System.out.println("请求链接" + str);
//
//
//        String str1 = req.getParameter("username");       // 获取客户端传递的参数
//        System.out.println(str1);
//    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doget方法被启动");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("dopost方法被启动");
    }

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

    @Override
    public void destroy() {
        System.out.println("这是destroy方法");
    }
}

传入参数: 小鹿

 

这时候,控制台中会自动调用doget方法,输出doget方法(没有实现service方法)

 

而如果同时重写Service、get和post方法,最后输出的是: 这是Service方法。

 

 

说明当Service方法存在的时候,不管是否重写doget或者dopost方法,都会优先执行Service方法,然后Service方法调用自身内部的get方法或者post方法去处理请求。

所以一般处理请求只需要重写Service方法即可,不需要单独再写doget和dopost方法

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值