整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          《Servlet》第18節:HttpServletR

          《Servlet》第18節:HttpServletResponse響應JSON和HTML內容

          面已經介紹了HttpServletResponse響應對象中的一些常用方法,這一小節介紹如何使用HttpServletResponse響應對象,將結果返回給瀏覽器客戶端。

          1.1、返回HTML內容

          使用Servlet返回HTML內容給客戶端,是一個比較常見的功能,因為Servlet本來就是用于JavaWeb開發的,而HTML就是Web開發的三大核心語言之一。這里給出一個響應HTML內容給客戶端的案例代碼:

          package com.gitcode.servlet;
          
          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import java.io.IOException;
          import java.io.PrintWriter;
          
          /**
           * @version 1.0.0
           * @Date: 2024/2/10 20:20
           * @Author ZhuYouBin
           * @Description:
           */
          public class HtmlResponseServlet extends HttpServlet {
              @Override
              protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                  // 響應HTML內容
                  response.setContentType("text/html;charset=UTF-8");
                  // 獲取輸出流
                  PrintWriter writer=response.getWriter();
          
                  // 輸出HTML內容
                  writer.println("<!DOCTYPE html>");
                  writer.println("<html lang=\"en\">");
                  writer.println("<head>");
                  writer.println("    <meta charset=\"UTF-8\">");
                  writer.println("    <title>響應HTML內容</title>");
                  writer.println("</head>");
                  writer.println("<body>");
                  writer.println("    <h3>Hello World!你好,世界!</h3>");
                  writer.println("</body>");
                  writer.println("</html>");
          
                  // 關閉流
                  writer.close();
              }
          }

          運行結果如下所示:

          1.2、返回JSON內容

          JSON格式在實際的Web開發中,可以說是最常用的數據交互格式啦,在一些前后端分離的項目中,都是采用JSON來進行數據交互的,所以這里給出一個響應JSON內容的案例代碼:

          package com.gitcode.servlet;
          
          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import java.io.IOException;
          import java.io.PrintWriter;
          
          /**
           * @version 1.0.0
           * @Date: 2024/2/10 20:20
           * @Author ZhuYouBin
           * @Description:
           */
          public class JsonResponseServlet extends HttpServlet {
              @Override
              protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                  // 響應JSON內容
                  response.setContentType("application/json;charset=UTF-8");
                  // 獲取輸出流
                  PrintWriter writer=response.getWriter();
          
                  // 輸出JSON內容
                  writer.println("{");
                  writer.println(" \"username\":\"名字是Tom-2024\",");
                  writer.println(" \"password\":\"123456\"");
                  writer.println("}");
          
                  // 關閉流
                  writer.close();
              }
          }

          運行結果如下所示:

          以上,就是使用HttpServletResponse對象返回HTML和JSON數據格式。

          今天就到這里,未完待續~~

          ervlet與HTTP的關系詳解

          Servlet是Java編寫的服務器端程序,用于處理客戶端發送的請求并生成響應。它基于Java的Servlet API,并在Java Web服務器上運行。HTTP(Hypertext Transfer Protocol)是一種用于在Web上進行數據通信的協議,是一種無狀態的、基于請求/響應模型的協議,用于在客戶端和服務器之間傳輸超文本(HTML、XML等)和其他資源(圖像、音頻等)。

          云服務器,高防服務器就選藍易云,頭條搜索:藍易云

          云服務器,高防服務器就選藍易云,頭條搜索:藍易云

          什么是Servlet

          Servlet是一種在服務器端執行的Java類,通過HTTP協議與客戶端進行通信。它用于處理客戶端請求,并生成相應的響應返回給客戶端。Servlet通常用于Web應用程序的開發,提供動態Web內容生成和處理功能。

          Servlet的核心功能

          • 處理HTTP請求:接收和解析客戶端發送的HTTP請求。
          • 生成HTTP響應:根據處理結果生成并發送HTTP響應給客戶端。
          • 會話管理:通過會話跟蹤用戶狀態,維護跨請求的狀態信息。
          • 過濾請求和響應:可以在請求到達Servlet之前或響應返回客戶端之前,對其進行處理和修改。

          什么是HTTP

          HTTP是Web上的基礎通信協議,它規定了客戶端和服務器之間如何交換信息。HTTP協議定義了請求和響應的格式,通信的方式,以及傳輸數據的規則。

          HTTP的核心功能

          • 請求/響應模型:客戶端通過HTTP請求獲取資源,服務器通過HTTP響應返回資源。
          • 無狀態性:每個請求都是獨立的,與之前的請求沒有直接關聯。
          • 靈活性:可以傳輸多種類型的數據,包括HTML、XML、JSON、圖像、視頻等。
          • 擴展性:通過擴展HTTP頭字段,可以增加新的功能和信息。

          Servlet與HTTP的關系

          Servlet基于HTTP協議

          Servlet通過HTTP協議與客戶端進行通信。客戶端發送HTTP請求到服務器,Servlet接收請求并生成HTTP響應返回給客戶端。Servlet的生命周期管理和請求處理都基于HTTP協議。

          Servlet處理HTTP請求

          Servlet負責處理客戶端發送的HTTP請求。它可以從請求中獲取參數、讀取請求頭、訪問請求的主體內容等。通過Servlet的 doGet和 doPost方法,可以分別處理GET和POST請求。

          處理GET請求

          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              // 獲取請求參數
              String param=request.getParameter("param");
              // 生成響應
              response.setContentType("text/html");
              PrintWriter out=response.getWriter();
              out.println("<html><body>");
              out.println("<h1>處理GET請求</h1>");
              out.println("<p>參數:" + param + "</p>");
              out.println("</body></html>");
          }

          處理POST請求

          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              // 讀取請求主體內容
              BufferedReader reader=request.getReader();
              StringBuilder requestBody=new StringBuilder();
              String line;
              while ((line=reader.readLine()) !=null) {
                  requestBody.append(line);
              }
              // 生成響應
              response.setContentType("application/json");
              PrintWriter out=response.getWriter();
              out.println("{\"message\": \"處理POST請求\", \"body\": \"" + requestBody.toString() + "\"}");
          }

          Servlet生成HTTP響應

          Servlet根據接收到的HTTP請求生成HTTP響應。它可以設置響應狀態碼、添加響應頭、寫入響應主體等。Servlet通過 HttpServletResponse對象來構建和發送響應。

          設置響應狀態碼和頭信息

          response.setStatus(HttpServletResponse.SC_OK); // 設置狀態碼200
          response.setContentType("application/json");  // 設置響應內容類型
          response.setHeader("Custom-Header", "Value"); // 添加自定義頭信息

          寫入響應主體

          PrintWriter out=response.getWriter();
          out.println("{\"status\": \"success\", \"message\": \"響應內容\"}");

          Servlet與HTTP會話管理

          Servlet可以使用HTTP會話來跟蹤客戶端的狀態。它可以創建、獲取和管理會話對象,以便在多個請求之間保持狀態信息。會話對象通過 HttpSession接口進行管理。

          創建和獲取會話

          HttpSession session=request.getSession(); // 獲取當前會話,如果沒有則創建新的會話
          session.setAttribute("username", "JohnDoe"); // 設置會話屬性

          獲取會話屬性

          String username=(String) session.getAttribute("username"); // 獲取會話屬性

          使會話失效

          session.invalidate(); // 使當前會話失效

          總結

          Servlet是用Java編寫的服務器端程序,用于處理客戶端發送的HTTP請求并生成HTTP響應。HTTP是一種用于在Web上進行數據通信的協議,它定義了客戶端和服務器之間的通信規則。Servlet基于HTTP協議工作,處理HTTP請求、生成HTTP響應,并可以使用HTTP會話管理客戶端狀態。這種組合使得Servlet成為開發Web應用程序的重要工具。

          分析說明表

          功能

          詳細描述

          處理HTTP請求

          Servlet接收并解析HTTP請求,獲取請求參數和內容

          生成HTTP響應

          Servlet生成并發送HTTP響應,設置狀態碼、響應頭和主體內容

          會話管理

          Servlet使用HTTP會話管理客戶端狀態,創建、獲取和管理會話對象

          請求/響應模型

          HTTP使用請求/響應模型進行通信,Servlet通過該模型處理請求和響應

          無狀態通信

          HTTP無狀態性,每個請求獨立,Servlet通過會話管理狀態信息

          數據傳輸

          HTTP傳輸多種類型的數據,Servlet通過HTTP與客戶端交換數據

          思維導圖

          graph TD;
              Servlet-->HTTP協議;
              HTTP協議-->請求/響應模型;
              請求/響應模型-->處理HTTP請求;
              請求/響應模型-->生成HTTP響應;
              請求/響應模型-->會話管理;
              處理HTTP請求-->獲取參數;
              處理HTTP請求-->讀取請求頭;
              處理HTTP請求-->訪問請求主體;
              生成HTTP響應-->設置狀態碼;
              生成HTTP響應-->添加響應頭;
              生成HTTP響應-->寫入響應主體;
              會話管理-->創建會話;
              會話管理-->獲取會話;
              會話管理-->管理會話對象;

          通過上述內容,您已經了解了Servlet與HTTP的關系,以及如何在實際開發中使用Servlet處理HTTP請求、生成響應并管理會話。這種組合在Web應用程序開發中發揮著重要作用。

          文亂碼問題是比較常見和煩人的問題,本文通過一個小程序介紹了如何通過Servlet從上一個頁面獲取參數,

          方法很簡單:調用request.getParameter(String s)方法。

          解決中文亂碼問題的方法是:

          首先要設置response響應的格式:response.setContextType("text/html;charSet=GBK");

          然后在加上request.setCharacterEncoding("GBK")

          需要注意的是這是解決post方式提交的內容的中文亂碼問題。

          解決get方式提交內容的中文亂碼問題的方法:

          在Tomcat->conf文件夾->server.xml-->connecter標簽里加上:

          URIEncoding="GBK"(注意:在xml里面“=”兩邊不要有空格)

          關于Post和Get之間的區別可以看我轉載的另一篇博文:

          HTTP POST GET 本質區別詳解

          例子:

          1.threeparams.html


          1. <html>
          2. <body>
          3. <form method="post" action="Threeparams">
          4. <table>
          5. <tr>
          6. <td>
          7. param1
          8. </td>
          9. <td>
          10. <input name="p1" type="text"/>
          11. </td>
          12. </tr>
          13. <tr>
          14. <td>
          15. param2
          16. </td>
          17. <td><input name="p2" type="text"/>
          18. </td>
          19. </tr>
          20. <tr>
          21. <td>
          22. param3
          23. </td>
          24. <td><input name="p3" type="text"/>
          25. </td>
          26. </tr>
          27. <td><input type="submit" value="submit">
          28. </td>
          29. </tr>
          30. </table>
          31. </form>
          32. </body>
          33. </html>

          2.ThreeParams.java


          1. import java.io.*;
          2. import javax.servlet.ServletException;
          3. import javax.servlet.http.*;
          4. public class ThreeParams extends HttpServlet{
          5. @Override
          6. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
          7. throws ServletException, IOException {
          8. doPost(req,resp);
          9. }
          10. @Override
          11. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
          12. throws ServletException, IOException {
          13. resp.setContentType("text/html;charset=GBK");
          14. //解決post方式提交內容的中文亂碼
          15. //一定要卸載存取第一個參數之前
          16. //不要調用resp.setCharacterEncoding("GBK");
          17. req.setCharacterEncoding("GBK");
          18. //解決get方式亂碼問題:修改server.xml中的connector標簽-->URIEncoding="GBK"
          19. PrintWriter out=resp.getWriter();
          20. out.println(req.getParameter("p1"));
          21. out.println("</br>");
          22. out.println(req.getParameter("p2"));
          23. out.println("</br>");
          24. out.println(req.getParameter("p3"));
          25. out.println("</br>");
          26. }
          27. }

          補充:

          上面的這個例子.html中每個name都不一樣,如果有多個一樣的name時,可以按如下的方法來獲取:

          1)Enumeration paramNames=request.getParameterNames()

          調用此方法獲得所有參數的名字,返回一個Enumeration

          2) while(paramNames.hasMoreElements()){

          String paramName=(String)paramNames.nextElement();

          String[] paramValues=request.getParameterValues(paramName);

          ...


          主站蜘蛛池模板: 激情综合一区二区三区| 国产91精品一区| 一区二区三区免费在线视频| 色多多免费视频观看区一区| 视频一区精品自拍| 蜜臀AV免费一区二区三区| 在线一区二区观看| 国产一区二区精品久久凹凸| 亚洲区精品久久一区二区三区| 视频一区二区在线播放| 国产精品视频一区二区三区经| 亚洲国产精品成人一区| 性色AV一区二区三区天美传媒| 中文字幕一区二区三区日韩精品| 好吊妞视频一区二区| 久久亚洲一区二区| 不卡一区二区在线| 国产色欲AV一区二区三区| 美女啪啪一区二区三区| 日本免费一区尤物| 一区二区和激情视频| 少妇人妻偷人精品一区二区| 国产裸体舞一区二区三区| 无码人妻精品一区二区三区久久 | 亚洲丶国产丶欧美一区二区三区| 国产一区二区三区露脸| 亚洲国产高清在线精品一区| 精品国产一区二区三区2021| 白丝爆浆18禁一区二区三区| 欧洲亚洲综合一区二区三区| 国产萌白酱在线一区二区| 精品国产精品久久一区免费式 | 亚洲综合激情五月色一区| 农村人乱弄一区二区| 四虎精品亚洲一区二区三区| 国产日韩精品一区二区在线观看播放 | 中文字幕一区二区三区有限公司| 国产精品盗摄一区二区在线| 精品乱码一区内射人妻无码 | 日本精品啪啪一区二区三区| 亚洲日韩一区二区一无码|