茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1675477 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
PIMG_00296.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

爪哇咖啡屋 : [轉貼]Returning a JSON Response from a Servlet

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]Returning a JSON Response from a Servlet

Returning a JSON Response from a Servlet

Last modified: October 26, 2018

1. Introduction

In this quick tutorial, we’ll create a small web application and explore how to return a JSON response from a Servlet.

2. Maven

For our web application, we’ll include javax.servlet-api and Gson dependencies in our pom.xml:


<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${javax.servlet.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>

The latest versions of the dependencies can be found here: javax.servlet-api and gson.

We also need to configure a Servlet container to deploy our application to. This article is a good place to start on how to deploy a WAR on Tomcat.

3. Creating an Entity

Let’s create an Employee entity which will later be returned from the Servlet as JSON:


public class Employee {
private int id;
private String name;
private String department;
private long salary;
// constructors
// standard getters and setters.
}

4. Entity to JSON

To send a JSON response from the Servlet we first need to convert the Employee object into its JSON representation.

There are many java libraries available to convert an object to there JSON representation and vice versa. Most prominent of them would be the Gson and Jackson libraries. To learn about the differences between GSON and Jackson, have a look at this article.

A quick sample for converting an object to JSON representation with Gson would be:

String employeeJsonString = new Gson().toJson(employee);

5. Response and Content Type

For HTTP Servlets, the correct procedure for populating the response:

  1. Retrieve an output stream from the response
  2. Fill in the response headers
  3. Write content to the output stream
  4. Commit the response

In a response, a Content-Type
header tells the client what the content type of the returned content actually is.

For producing a JSON response the content type should be application/json:


PrintWriter out = response.getWriter();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
out.print(employeeJsonString);
out.flush();

Response headers must always be set before the response is committed. The web container will ignore any attempt to set or add headers after the response is committed.

Calling flush() on the PrintWriter commits the response.

6. Example Servlet

Now let’s see an example Servlet that returns a JSON response:


@WebServlet(name = "EmployeeServlet", urlPatterns = "/employeeServlet")
public class EmployeeServlet extends HttpServlet {
private Gson gson = new Gson();
@Override
protected void doGet(
HttpServletRequest request,
HttpServletResponse response) throws IOException {
Employee employee = new Employee(1, "Karan", "IT", 5000);
String employeeJsonString = this.gson.toJson(employee);
PrintWriter out = response.getWriter();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
out.print(employeeJsonString);
out.flush();
}
}

7. Conclusion

This article showcased how to return a JSON response from a Servlet. This is helpful in web applications that use Servlets to implement REST Services.

All code samples shown here can be found on GitHub.


原文出處:Returning a JSON Response from a Servlet | Baeldung
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]Servlet 解析 JSON 數據和發送 JSON 數據

Servlet解析JSON數據和發送JSON數據

2017年03月16日 13:11:12 忙碌的布谷鳥 閱讀數 31020
版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/guoquanyou/article/details/62421318

package com.jcuckoo.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import net.sf.json.JSONObject;
public class JsonReader {
public static JSONObject receivePost(HttpServletRequest request) throws IOException, UnsupportedEncodingException {
// 讀取請求內容
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(),"utf-8"));
String line = null;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line);
}
//將json字符串轉換為json對像
JSONObject json=JSONObject.fromObject(sb.toString());
return json;
}
}



package com.jcuckoo.servlet;
import java.io.IOException;
import java.io.Writer;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jcuckoo.pojos.User;
import com.jcuckoo.service.UserService;
import com.jcuckoo.util.JsonReader;
import net.sf.json.JSONObject;
@WebServlet("/LoginUserServlet")
public class LoginUserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginUserServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// response.setContentType("text/html");
// 設置字符編碼為UTF-8, 這樣支持漢字顯示
// response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
/** 設置響應頭允許ajax跨域訪問 **/
response.setHeader("Access-Control-Allow-Origin", "*");
/* 星號表示所有的異域請求都可以接受, */
response.setHeader("Access-Control-Allow-Methods", "GET,POST");
Writer out = response.getWriter();
JSONObject json=JsonReader.receivePost(request);
System.out.println(json);
UserService userService=new UserService();
//將建json對像轉換為java對像
User loginUser = (User)JSONObject.toBean(json,User.class);
User user = userService.LoginUser(loginUser);
JSONObject jsonObject=new JSONObject() ;
if(user!=null){
//將java對像轉換為json對像
jsonObject.put("user", JSONObject.fromObject(user));
jsonObject.put("message", "用戶登錄成功!");
}else{
jsonObject.put("message", "用戶登錄失敗!");
}
out.write(jsonObject.toString());
out.flush();
}
}


%>
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Servlet-jCuckoo</title>
<script type="text/javascript" src="js/jquery-3.1.1.min.js"></script>
</head>
<body>
<form >
用戶名:<input type="text" /><br/>
密碼:<input type="password" /><br/>
<input type="button" value="登錄" >
</form>
<div ></div>
<script>
$('#sender').click(function(){
var userName=document.getElementById('userName').value;
var userPwd=document.getElementById('userPwd').value;
var user={userName:userName,userPwd:userPwd};
var url="LoginUserServlet";
$.post(url, JSON.stringify(user), function(data) {
console.log(data);
$("#messageDiv").html(data);
var json=JSON.parse(data);
alert(json.message);
});
/* $.ajax({
type:'post',
url:url,
dataType:"json",
data:JSON.stringify(user),
success: function (data) {
var user=data.user;
$("#messageDiv").html(JSON.stringify(user));
alert(data.message);
},
error: function (data) {
alert(data.message);
$("#messageDiv").html("");
}
}); */
});
</script>
</body>
</html>



原文出處:Servlet解析JSON数据和发送JSON数据 - jCuckoo的专栏 - CSDN博客
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|