当前位置:K88软件开发文章中心编程全书编程全书02 → 文章内容

jsp HttpServlet的doGet和doPost方法

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-4 8:18:11

-->

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