doget和dopost的区别

get和post是http协议的两种方法,另外还有head, delete等

1.这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传。

2.doGet在地址栏中显示请求的内容,doPost隐藏.
其时说来很简单,在servlet中doPost方法里还是调用了doGet方法,所以在创建servlet时可以不要doPost方法,但在做大型项目涉及密码的传送时doPost方法会更安全些,通常情况下二者没什么区别。

在servlet开发中,以doGet()和doPost()分别处理get和post方法。 
首先判断请求时是get还是post,如果是get就调用doGet(), 如果是post就调用doPost()。都会执行这个方法。

1.doGet
GET 调用用于获取服务器信息,并将其做为响应返回给客户端。当经由Web浏览器或通过HTML、JSP直接访问Servlet的URL时,一般用GET调用。 GET调用在URL里显示正传送给SERVLET的数据,这在系统的安全方面可能带来一些问题,比如用户登录,表单里的用户名和密码需要发送到服务器端, 若使用Get调用,就会在浏览器的URL中显示用户名和密码。
例:
jsp页代码:(Ajax-type)

$.ajax({
      type: "GET",
      url: "UserServlet?action=listAll",
      dataType: "json",
      success: function(data) {
        $("#users tbody").empty();  // 每次载入前先清空显示区域,防止数据重复显示
        var users = data.users;
        for (var i in users) {
          var user = users[i];
          var userStr = JSON.stringify(user);
          $("#users tbody").append('<tr><td>'+ user.name + '</td>'
            + '<td>' + user.psw + '</td>'
            + '<td><button onclick=\'showUpdateUserModal(' + userStr + ')\'>更新</button>&nbsp;'
            + '<button onclick="deleteUser(' + user.id + ')">删除</button></td></tr>');
        }
      },
      error: function() {
        console.log("ajax error!");
      }
    });

servlet代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         // 设置返回编码格式,解决中文乱码
         response.setCharacterEncoding("utf-8");
        
         // 根据action的值来执行不同的动作,例如显示所有用户或显示单个用户
         String action = request.getParameter("action");
        
         // 显示所有用户
         if (action.equals("listAll")) {
          //System.out.println("servlet——listAll");
             UserService userService = new UserServiceImpl();
             List<User> users = userService.listAll();
             //System.out.println(users.get(0).getName());
             System.out.println(users.get(0).getCreateTime());
             // 返回JSON数据格式
             JSONArray jsonArr = JSONArray.fromObject(users);
             JSONObject jsonObjOut = new JSONObject();
             jsonObjOut.put("users", jsonArr);
             JsonUtil.setJSON(request, response, jsonObjOut);
         }
}

这样提交表单后,参数会自动添加到浏览器地址栏中,带来安全性问题。

2.doPost
它用于客户端把数据传送到服务器端,也会有副作用。但好处是可以隐藏传送给服务器的任何数据。Post适合发送大量的数据。
例:
jsp页代码:

// 添加用户
function addUser() {
// 获取序列化表单信息
var user = $("#add-user-form").serializeJSON();
var userStr = JSON.stringify(user); $.ajax({
type: "POST",
url: "UserServlet",
data: userStr,
dataType: "json",
success: function(data) {
if (data.isSuccess) {
$("#add-user-modal").dialog("close");
showMsg('添加成功!');
listAllUser();
} else {
$("#add-user-modal").dialog("close");
showMsg('添加失败!');
listAllUser();
}
},
error: function() {
console.log("ajax error");
},
});
}

servlet代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取JSON数据
JSONObject jsonObjIn = JsonUtil.getJSON(request, response); User user = new User();
user.setPsw(jsonObjIn.getString("password"));
user.setName(jsonObjIn.getString("name")); UserService userService = new UserServiceImpl();
boolean isSuccess = userService.add(user); // 返回JSON数据格式
JSONObject jsonObjOut = new JSONObject();
jsonObjOut.put("isSuccess", isSuccess);
JsonUtil.setJSON(request, response, jsonObjOut);
}

1、安全

GET调用在URL里显示正传送给SERVLET的数据,这在系统的安全方面可能带来问题,例如用户名和密码等

POST就可以在一定程度上解决此类问题

2、服务器接收方式

服务器随机接受GET方法的数据,一旦断电等原因,服务器也不知道信息是否发送完毕

而POST方法,服务器先接受数据信息的长度,然后再接受数据

 service() 方法

service() 方法是 Servlet 的核心。每当一个客户请求一个HttpServlet 对象,该对象的service() 方法就要被调用,而且传递给这个方法一个"请求"(ServletRequest)对象和一个"响应"(ServletResponse)对象作为参数。 在 HttpServlet 中已存在 service() 方法。缺省的服务功能是调用与 HTTP 请求的方法相应的 do 功能。例如, 如果 HTTP 请求方法为 GET,则缺省情况下就调用 doGet() 。Servlet 应该为 Servlet 支持的 HTTP 方法覆盖 do 功能。因为 HttpServlet.service() 方法会检查请求方法是否调用了适当的处理方法,不必要覆盖 service() 方法。只需覆盖相应的 do 方法就可以了。

当一个客户通过HTML 表单发出一个HTTP POST请求时,doPost()方法被调用。与POST请求相关的参数作为一个单独的HTTP 请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用doPost()方法。

当一个客户通过HTML 表单发出一个HTTP GET请求或直接请求一个URL时,doGet()方法被调用。与GET请求相关的参数添加到URL的后面,并与这个请求一起发送。当不会修改服务器端的数据时,应该使用doGet()方法。

上述servlet可以改写为:

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/**
* 方法选择
*/
req.setCharacterEncoding("utf-8");
String method = req.getParameter("method");
if (method.equals("listAll")) {
listAll(req, resp);
}else if(method.equals("getById")) {
getById(req, resp);
}else if(method.equals("addUser")) {
addUser(req, resp);
}
} private void addUser(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
// 获取JSON数据
JSONObject jsonObjIn = JsonUtil.getJSON(req, resp); User user = new User();
user.setPsw(jsonObjIn.getString("password"));
user.setName(jsonObjIn.getString("name")); UserService userService = new UserServiceImpl();
boolean isSuccess = userService.add(user); // 返回JSON数据格式
JSONObject jsonObjOut = new JSONObject();
jsonObjOut.put("isSuccess", isSuccess);
JsonUtil.setJSON(req, resp, jsonObjOut);
} private void listAll(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
// TODO 自动生成的方法存根
//System.out.println("servlet——listAll");
UserService userService = new UserServiceImpl();
List<User> users = userService.listAll();
//System.out.println(users.get(0).getName());
System.out.println(users.get(0).getCreateTime());
// 返回JSON数据格式
JSONArray jsonArr = JSONArray.fromObject(users);
JSONObject jsonObjOut = new JSONObject();
jsonObjOut.put("users", jsonArr);
JsonUtil.setJSON(req, resp, jsonObjOut);
}

个人认为service()方法方便一些,易操作,代码可读性也高

摘自:https://www.cnblogs.com/justdoitba/articles/8058024.html

servlet中的doGet()与doPost()以及service()的用法的更多相关文章

  1. SERVLET中的doGet与doPost两个方法之间的区别

    get和post是http协议的两种方法,另外还有head, delete等 这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串.post的参数是通过另外的 ...

  2. 1.2(学习笔记)Servlet基础(doGet、doPost、生命周期、页面跳转)

    一.doGet()与doPost() 我们在TestServlet类中重写doGet().doPost().service(). import javax.servlet.ServletExcepti ...

  3. servlet中为什么doGet方法没有被调用的一种可能(笔记)

    创建了一个servlet,然后在doGet()方法内写一些简单的测试语句,但是在实际运行中发现并没有调用到doGet()方法,后来发现自己在创建servlet是将service()方法也勾选上去了,而 ...

  4. Servlet学习二——doGet和doPost

    1.get和post是http协议中的两种方法,还有其它,读写一般数据还能满足: 2.get只有一个流,参数附加在url后,且大小个数有严格限制,这个限制因浏览器而有所不同,get传递数据,实际上是将 ...

  5. 自定义servlet重写doGet或doPost方法是如何实现多态的

    我们知道,如果我们自定义一个servlet继承HttpServlet,并且重写HttpServlet中的doGet或doPost方法,那么从浏览器发送过来的request请求将调用HttpServle ...

  6. servlet中doGet()和doPost()的区别

    1.生成方式 get方法有四种: ①直接在URL地址栏中输入URL ②网页中的超链接 ③form中method为get ④form中method为空时,默认是get提交 post只知道有一种:form ...

  7. servlet中doGet()和doPost()的用法

    转自:https://blog.csdn.net/qq_38963960/article/details/79468182 1.servlet中doGet()和doPost()的用法 一般来说我们是用 ...

  8. 去除myeclipse中doget和dopost方法中的注释

    当我们使用myeclipse新建servlet时发现doget和dopost方法中有一些无用的注释,每次新建一个servlet时都要手动删除特别麻烦. 下面就教大家如何去除这些注释! 以myeclip ...

  9. Servlet----------在使用doGet()和doPost()是如何处理中文乱码

    如果在登录界面跳转到时servlet中使用doGet()方法显示中文出现乱码时,可以添加这两行代码来解决,但这不是唯一的方法 request.setCharacterEncoding("GB ...

随机推荐

  1. SCCM+WSUS的方式分发补丁

    简单来说,System Center Configuration Manager(SCCM/ConfigMgr)由SMS(Systems Management Server)发展而来,其作为一款针对企 ...

  2. 前端学习:JS面向对象知识学习(图解)

    前端学习:JS面向对象知识学习(图解) 前端学习:JS(面向对象)代码笔记 JS面向对象图解知识全览 创建类和对象 方式1:使用Object()函数 方式2:使用自变量 方式3:使用工厂函数 创建多个 ...

  3. MVC+Ninject+三层架构+代码生成 -- 总结(二、建項目)

    1.項目分層,其中SqlSugar 是一個ORM 庫類. 2.VS庫類 視圖.

  4. 后台数据转换成Excel,前台下载

    <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactI ...

  5. excel批量添加超链接

    使用 Hyperlink(Link-location,Friendly-name)

  6. mysql解决Fatal error encountered during command execution. 500内部错误

    Asp.net 连接mysql 会出现Fatal error encountered during command execution.的错误 解决办法如下: 连接字符串添加  Allow User ...

  7. php服务端搜索,功能改进

    php中 ,一直以来,服务端搜索,我都是写一堆条件判断,搜索条件少时还好,条件一多,就显的代码有点丑陋了: 看着非常不舒服.今天在园子里看到一篇文章(http://www.cnblogs.com/xq ...

  8. 【转载】c# datatable 判断值是否存在

    在C#的数据表格DataTable操作过程中,有时候在操作DataTable前需要判断DataTable中的值是否存在,此时首选需要判断DataTable是否为null值,而后在判断DataTable ...

  9. 【案例】电子生产中的排程问题如何解决?APS助力智能化排产

    共进电子是典型的消费类电子制造企业,以ODM业务为主,立足双O(OEM/ODM),发展自主品牌.其中,生产模式特点包括: 批量制造.多品种小批量.面向订单生产: 产品结构复杂,设计变更频繁:生产计划复 ...

  10. XSS靶场练习

    0x00:前言 一个XSS练习平台,闯关形式,一共20关 0x01:开始 第一行都是代码插入点,下面几行是payloads(插入点和payloads中间空一行) LV1 <script>a ...