how2j.cn


工具版本兼容问题
Servlet 需要提供对应的doGet() 与 doPost()方法

步骤 1 : doGet()   
步骤 2 : doPost()   
步骤 3 : service()   

步骤 1 :

doGet()

当浏览器使用get方式提交数据的时候,servlet需要提供doGet()方法

哪些是get方式呢?

form默认的提交方式
如果通过一个超链访问某个地址
如果在地址栏直接输入某个地址
ajax指定使用get方式的时候
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

	}

}
步骤 2 :

doPost()

当浏览器使用post方式提交数据的时候,servlet需要提供doPost()方法

哪些是post方式呢?
在form上显示设置 method="post"的时候
ajax指定post方式的时候
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

	}

}
步骤 3 :

service()

LoginServlet继承了HttpServlet,同时也继承了一个方法

service(HttpServletRequest , HttpServletResponse )


实际上,在执行doGet()或者doPost()之前,都会先执行service()

由service()方法进行判断,到底该调用doGet()还是doPost()

可以发现,service(), doGet(), doPost() 三种方式的参数列表都是一样的。

所以,有时候也会直接重写service()方法,在其中提供相应的服务,就不用区分到底是get还是post了。

比如把前面的登录的LoginServlet,改为提供service方法,也可以达到相同的效果
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); String password = request.getParameter("password"); String html = null; if ("admin".equals(name) && "123".equals(password)) html = "<div style='color:green'>success</div>"; else html = "<div style='color:red'>fail</div>"; PrintWriter pw = response.getWriter(); pw.println(html); } }


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2018-05-14 关于是否还用声明method问题
许华夕
关于 J2EE-Servlet-service() 的提问
请问站长,如果后面使用了service(),前面还用在xml中指定from method =get还是post吗?




1 个答案

虚实恒 答案时间:2018-06-15
你还不理解吗?这句话的意思已经表达了, “所以,有时候也会直接重写service()方法,在其中提供相应的服务,就不用区分到底是get还是post了”,重点是不用区分,你写不写没关系了。




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2017-09-17 为什么我查看不了HttpServlet的源码?
mundane
关于 J2EE-Servlet-service() 的提问



rt, 我也点了source attachment关联了jar包。但还是没出现源码。 另外, 我建议例子中LoginServlet的doPost()方法上加上@Override注解, 好让我们知道是重写了父类方法, 不然我之前一直很奇怪为什么一定要取名doPost

							

							


2 个答案

DragonDove 答案时间:2017-10-22
推荐使用IDEA作为IDE,IDEA自带反编译。jar不关联源码也能得到源码,当然,它会建议你下载相应的源码(反编译的代码和源码会存在一定差异),并且它会自动搜索下载源码(常见jar包都能自动下载,其他的就只能自己关联了)

how2j 答案时间:2017-09-18
1. 关联jar并不能看到源码吧,要关联源代码才可以哦 2. 嗯,有@Override会更清晰。 不过是否调用doPost, 与这个方法是否从父类继承来没有必然关系,如同toString()方法也是从父类继承来一样,并不会导致toString()一定会被调用。 之所以会调用doPost是由Tomcat的业务逻辑决定的。




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2017-06-24 service方法的疑问
2017-06-16 service()这段写得很清楚




提问之前请登陆
关于 J2EE-Servlet-service() 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 620943819
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: http://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图