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

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方法

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、说一说Servlet的生命周期?★★★★★ 答: servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。 这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。 2、servlet的生命周期 答: web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。 通过调用service()方法实现,根据请求的不同调用不同的do***()方法。 结束服务,web容器调用servlet的destroy()方法。 3、Servlet的基本架构 public class ServletName extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } } 4、什么情况下调用doGet()和doPost()? 答:Jsp页面的form标签里的method属性为get时调用doGet(),为post时调用doPost()。 5、如何现实servlet的单线程模式★★ 答:<%@page isThreadSafe=false%> 面试会遇到! 6、页面间对象传递的方法 答:request,session,application,cookie等 7、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 答:JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是类servletServlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件,并且完全从表示层的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。 8、四种会话跟踪技术(重要考点)★★★★★ 答:会话作用域ServletsJSP 页面描述 page是代表与一个页面相关的对象和属性。 一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。 这既包括 servlet 又包括被编译成 servlet 的 JSP 页面。 request是代表与 Web 客户机发出的一个请求相关的对象和属性。 一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)。 session是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求。 application是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值