- ·上一篇文章:JSP编译指令和动作指令
- ·下一篇文章:Eclips中创建部署并运行Servlet项目
jsp HttpServlet的doGet和doPost方法
-->
HttpServlet类除了init、service、destroy方法外,还有两个很重要的方法,doGet和doPost。
当服务器创建servlet对象后,该对象会调用init方法初始化自己,以后每当服务器再接受一个servlet请求时,就会产生一个新线程,并在这个线程中让servlet对象调用service方法,而HttpServlet类所给出的service方法的功能是检查HTTP请求类型(get、post等),并在service方法中根据用户的请求方式,在service方法中对应地再调用doGet或doPost,因此,在编写Servlet类(HttpServlet类的一个子类)时,不必重写service方法来响应用户,直接继承service方法即可。
可以在Servlet中重写doGet方法和doPost方法来响应用户的请求,这样可以增加响应的灵活性,并降低服务器的负担。如果不论用户请求的类型是post和get,服务器的处理过程完全相同,那么可以只在doPost中编写处理过程,然后再doGet中在调用doPost方法即可,或者相反。处理若不,则需在来年改革方法中分别编写相应的处理代码。
例子:
用户可以使用表单请求名字为“ok”的servlet对象,并提交字符串,其中一个表单提交方式是post,另一个提交方式是get,当表单提交方式是post时,则输出表单提交的字符串的长度;当为post时,除了输出长度外,并判断字符串中前缀是否为“helllo”
web.xml
1 2 3 4 5 6 7 8 9 | <servlet> <servlet-name>ok</servlet-name> <servlet-class>cn.k88.Show</servlet-class> </servlet> <servlet-mapping> <servlet-name>ok</servlet-name> <url-pattern>/show</url-pattern> </servlet-mapping> |
example.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <title>Insert title here</title> </head> <body> <form action="show" method=post> 输入字符串,提交给servlet(Post方式): <br> <input type=text name=str> <input type=submit value="提交"> </form> <form action="show" method=get> 输入字符串,提交给servlet(Get方式): <br> <input type=text name=str> <input type=submit value="提交"> </form> </body> </html> |
Show.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | package cn.k88; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Show extends HttpServlet{ @Override public void init(ServletConfig config) throws ServletException { // TODO Auto-generated method stub super.init(config); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=utf-8"); PrintWriter out=resp.getWriter(); out.println("<html><body>"); String s=req.getParameter("str"); byte[] bb=s.getBytes("utf-8"); s=new String(bb); int n=s.length(); out.print(s+" 的长度:"+n+"<br>"); out.println("</body></html>"); } protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); resp.setContentType("text/html;charset=utf-8"); PrintWriter out=resp.getWriter(); out.println("<html><body>"); String s=req.getParameter("str"); byte [] bb=s.getBytes("utf-8"); s=new String(bb); if(s.startsWith("Hello")) out.println(s+" 的前缀是:Hello"); else out.println(s+" 的前缀不是:Helo"); out.println("</body></html>"); } } |
jsp HttpServlet的doGet和doPost方法