1. HttpServletResponse の一般的なアプリケーション - 検証コードを生成する
1.1. 検証コードとして使用するランダムな画像を生成する
画像を生成する主な用途は、BufferedImage クラス、
世代ランダムな画像の例 :
package gacl.response.study; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ResponseDemo03 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("refresh", "5");//设置refresh响应头控制浏览器每隔5秒钟刷新一次 //1.在内存中创建一张图片 BufferedImage image = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB); //2.得到图片 //Graphics g = image.getGraphics(); Graphics2D g = (Graphics2D)image.getGraphics(); g.setColor(Color.WHITE);//设置图片的背景色 g.fillRect(0, 0, 80, 20);//填充背景色 //3.向图片上写数据 g.setColor(Color.BLUE);//设置图片上字体的颜色 g.setFont(new Font(null, Font.BOLD, 20)); g.drawString(makeNum(), 0, 20); //4.设置响应头控制浏览器浏览器以图片的方式打开 response.setContentType("image/jpeg");//等同于response.setHeader("Content-Type", "image/jpeg"); //5.设置响应头控制浏览器不缓存图片数据 response.setDateHeader("expries", -1); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); //6.将图片写给浏览器 ImageIO.write(image, "jpg", response.getOutputStream()); } /** * 生成随机数字 * @return */ private String makeNum(){ Random random = new Random(); String num = random.nextInt(9999999)+""; StringBuffer sb = new StringBuffer(); for (int i = 0; i < 7-num.length(); i++) { sb.append("0"); } num = sb.toString()+num; return num; } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
実行結果は次のとおりです:
2. HttpServletResponse の一般的なアプリケーション - ブラウザーの動作を制御するための応答ヘッダーの設定
2.1. ブラウザーが現在のドキュメント コンテンツをキャッシュするのを制御するための http 応答ヘッダーを設定します
response.setDateHeader("expries", -1); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache");
2.2. http の設定応答ヘッダーは、Web ページを定期的に更新するようにブラウザを制御します (リフレッシュ)
response.setHeader("refresh", "5");//设置refresh响应头控制浏览器每隔5秒钟刷新一次
2.3. 応答を通じてリクエストのリダイレクトを実装します
リクエストのリダイレクトとは、次のことを指します。クライアントに別の Web リソースにアクセスするように通知します。これはリクエスト リダイレクトと呼ばれます。 アプリケーションシナリオ: ユーザーはログインすると、まずログインページにアクセスします。ログインに成功した後、このプロセスはリクエストリダイレクトのプロセスです
実装メソッド: response.sendRedirect(String) location)、つまり、応答オブジェクトの sendRedirect メソッドを呼び出してリクエストのリダイレクトを実装します
sendRedirect の内部実装原則:
応答設定 302 ステータス コードを使用し、位置応答ヘッダーを設定してリダイレクトを実装します 例:
package gacl.response.study; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ResponseDemo04 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 1.调用sendRedirect方法实现请求重定向, * sendRedirect方法内部调用了 * response.setHeader("Location", "/JavaWeb_HttpServletResponse_Study_20140615/index.jsp"); * response.setStatus(HttpServletResponse.SC_FOUND);//设置302状态码,等同于response.setStatus(302); */ response.sendRedirect("/JavaWeb_HttpServletResponse_Study_20140615/index.jsp"); //2.使用response设置302状态码和设置location响应头实现重定向实现请求重定向 //response.setHeader("Location", "/JavaWeb_HttpServletResponse_Study_20140615/index.jsp"); //response.setStatus(HttpServletResponse.SC_FOUND);//设置302状态码,等同于response.setStatus(302); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
3. Web エンジニアリングにおける URL アドレスの推奨的な書き方
JavaWeb 開発では、URL アドレスを記述する限り、「/」で始まる、つまり絶対パスを使用することをお勧めします。この「/」は何を表しているのでしょうか? 「/」は次のように覚えてください:
「/」がサーバーに使用されている場合は、現在の Web プロジェクトを表し、「/」がブラウザに使用されている場合は、webapps ディレクトリを表します。3.1、
"/"は、現在のWebプロジェクト
①の一般的なアプリケーションシナリオを表します①.ServletContext.getRealPath(String path)は、リソースの絶対パスを取得します
/**
* 1.ServletContext.getRealPath("/download/1.JPG")是用来获取服务器上的某个资源,
* 那么这个"/"就是给服务器用的,"/"此时代表的就是web工程
* ServletContext.getRealPath("/download/1.JPG")表示的就是读取web工程下的download文件夹中的1.JPG这个资源
* 只要明白了"/"代表的具体含义,就可以很快写出要访问的web资源的绝对路径
*/
this.getServletContext().getRealPath("/download/1.JPG");
/**
* 2.forward
* 客户端请求某个web资源,服务器跳转到另外一个web资源,这个forward也是给服务器用的,
* 那么这个"/"就是给服务器用的,所以此时"/"代表的就是web工程
*/
this.getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
<%@include file="/jspfragments/head.jspf" %>
<jsp:include page="/jspfragments/demo.jsp" />
このとき、「/」は Web プロジェクトを表します。 ①その後、サーバーにリクエストするので、この「/」はブラウザ用のアドレス「/JavaWeb_HttpServletResponse_Study_20140615/index.jsp」は「webappsJavaWeb_HttpServletResponse_Study_20140615index.jsp」を指します 。 response.sendRedirect("/プロジェクト名/フォルダディレクトリ/ページ");この書き方はプログラム内でプロジェクト名をハードコードするもので、ある日プロジェクト名が変わった場合に対応する必要があります。プログラムを変更するため、以下の柔軟な記述方法を使用することをお勧めします。 変更
response.sendRedirect("/JavaWeb_HttpServletResponse_Study_20140615/index.jsp");
この記述方法をresponse.sendRedirect("/JavaWeb_HttpServletResponse_Study_20140615/index.jsp");
に変更します。 request.getContextPath()で取得した内容は、より柔軟な「/JavaWeb_HttpServletResponse_Study_20140615」を使用します。
request .getContextPath()は「/プロジェクト名」を置き換えます。このメソッドを使用することをお勧めします。柔軟で便利です
! ②.
ハイパーリンクを使ってジャンプしますresponse.sendRedirect(request.getContextPath()+"/index.jsp");
クライアントのブラウザが使用するハイパーリンクジャンプです。このときの「/」はブラウザのディレクトリを表します。
Web リソースにアクセスするには、ハイパーリンクを使用します。絶対パスを改善するには、次の記述方法を使用することをお勧めします: <a href="/JavaWeb_HttpServletResponse_Study_20140615/index.jsp">跳转到首页</a>
この方法では、パスにプロジェクト名が表示されないようにすることができます。
${pageContext .request.contextPath} "/JavaWeb_HttpServletResponse_Study_20140615" を置き換えます
③.Form フォーム送信<a href="${pageContext.request.contextPath}/index.jsp">跳转到首页</a>
これはクライアントのブラウザがフォームをサーバーに送信するため、この "/" はブラウザが使用するもので、今回の「/」は webapps ディレクトリを表します。 フォーム送信時のaction属性の絶対パスの記述については、以下の方法で改善することも推奨します: <form action="/JavaWeb_HttpServletResponse_Study_20140615/servlet/CheckServlet" method="post">
<input type="submit" value="提交">
</form>
${pageContext.request.contextPath} will get "/JavaWeb_HttpServletResponse_Study_20140615"
${pageContext.request.contextPath}的效果等同于request.getContextPath(),两者获取到的都是"/项目名称" ④.js脚本和css样式文件的引用 综合范例: getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象。 相关推荐:<%--使用绝对路径的方式引用js脚本--%>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/index.js"></script>
<%--${pageContext.request.contextPath}与request.getContextPath()写法是得到的效果是一样的--%>
<script type="text/javascript" src="<%=request.getContextPath()%>/js/login.js"></script>
<%--使用绝对路径的方式引用css样式--%>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/index.css" type="text/css"/>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--超链接跳转页面--%>
<a href="${pageContext.request.contextPath}/index.jsp">跳转到首页</a>
四、response细节问题
getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。
Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。
Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象。
以上がjavaweb の学習と終了 -- HttpServletResponse オブジェクトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

この記事では、分散アプリケーションを構築するためのJavaのリモートメソッドの呼び出し(RMI)について説明します。 インターフェイスの定義、実装、レジストリのセットアップ、およびクライアント側の呼び出しを詳述し、ネットワークの問題やセキュリティなどの課題に対処します。

この記事では、ネットワーク通信のためのJavaのソケットAPI、クライアントサーバーのセットアップ、データ処理、リソース管理、エラー処理、セキュリティなどの重要な考慮事項をカバーしています。 また、パフォーマンスの最適化手法も調査します

この記事では、カスタムJavaネットワーキングプロトコルの作成を詳述しています。 プロトコルの定義(データ構造、フレーミング、エラー処理、バージョン化)、実装(ソケットを使用)、データシリアル化、およびベストプラクティス(効率、セキュリティ、メンテナ


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
