Heim  >  Artikel  >  Java  >  Javaweb-Lernen und -Abschluss – HttpServletResponse-Objekt

Javaweb-Lernen und -Abschluss – HttpServletResponse-Objekt

php是最好的语言
php是最好的语言Original
2018-08-09 10:40:391718Durchsuche

1. Häufige Anwendungen von HttpServletResponse – Generieren von Bestätigungscodes

1.1. Generieren Sie zufällige Bilder zur Verwendung als Bestätigungscodes

Das Bild generieren verwendet hauptsächlich eine BufferedImage-Klasse,

 Javaweb-Lernen und -Abschluss – HttpServletResponse-Objekt

, um ein zufälliges Bildbeispiel zu generieren:

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);
    }

}

Die laufenden Ergebnisse sind wie folgt:Javaweb-Lernen und -Abschluss – HttpServletResponse-Objekt

2. Häufige Anwendungen von HttpServletResponse – Festlegen von Antwortheadern, um das Browserverhalten zu steuern

2.1. Festlegen von HTTP-Antwortheadern, um das Zwischenspeichern des aktuellen Browsers zu verhindern Dokumentinhalt

 response.setDateHeader("expries", -1);
 response.setHeader("Cache-Control", "no-cache");
 response.setHeader("Pragma", "no-cache");

2.2. Stellen Sie den HTTP-Antwortheader ein, um den Browser so zu steuern, dass er die Webseite regelmäßig aktualisiert (refresh)

response.setHeader("refresh", "5");//设置refresh响应头控制浏览器每隔5秒钟刷新一次

2.3. Implementieren Sie die Anforderungsumleitung durch Antwort

Anfrage Umleitung bezieht sich auf: a Nachdem die Webressource die Clientanforderung erhalten hat, benachrichtigt sie den Client, auf eine andere Webressource zuzugreifen. Dies wird als Anforderungsumleitung bezeichnet.

Anwendungsszenario: Benutzer meldet sich an. Der Benutzer besucht zunächst die Anmeldeseite. Nach erfolgreicher Anmeldung springt er zu einer bestimmten Seite. Dieser Vorgang ist ein Prozess der Anforderungsumleitung Implementierungsmethode: Response.sendRedirect (String-Speicherort), dh Aufrufen der sendRedirect-Methode des Antwortobjekts, um die Anforderungsumleitung zu implementieren

Das interne Implementierungsprinzip von sendRedirect:


Antworteinstellungen verwenden302-Statuscode und Einstellungen Der Standortantwort-Header implementiert die Umleitung Zum Beispiel:

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. Empfohlene Methode zum Schreiben von URL-Adressen im Web Engineering

In der JavaWeb-Entwicklung wird empfohlen, beim Schreiben einer URL-Adresse mit „/“ zu beginnen, dh einen absoluten Pfad zu verwenden. Was bedeutet dieses „/“? Sie können sich „/“ folgendermaßen merken:

Wenn „/“ für den Server verwendet wird, stellt es das aktuelle Webprojekt dar. Wenn „/“ für den Browser verwendet wird, stellt es das Webapps-Verzeichnis dar.

3.1,

"/"

stellt die gängigen Anwendungsszenarien des aktuellenWebprojekts

dar ① .ServletContext.getRealPath(String path) ruft den absoluten Pfad der Ressource

/**
* 1.ServletContext.getRealPath("/download/1.JPG")是用来获取服务器上的某个资源,
* 那么这个"/"就是给服务器用的,"/"此时代表的就是web工程
 * ServletContext.getRealPath("/download/1.JPG")表示的就是读取web工程下的download文件夹中的1.JPG这个资源
* 只要明白了"/"代表的具体含义,就可以很快写出要访问的web资源的绝对路径
*/
this.getServletContext().getRealPath("/download/1.JPG");

② ab. Weiterleitung an andere Seiten auf der Serverseite

 /**
 * 2.forward
  * 客户端请求某个web资源,服务器跳转到另外一个web资源,这个forward也是给服务器用的,
 * 那么这个"/"就是给服务器用的,所以此时"/"代表的就是web工程
 */
 this.getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);

③. Verwenden Sie die Include-Direktive oder das -Tag, um die Seite einzuleiten.

 <%@include file="/jspfragments/head.jspf" %>
rrree Zu diesem Zeitpunkt steht „/“ für das Webprojekt.

3.2,

"/"

stellt gängige Anwendungsszenarien des Webapps-Verzeichnisses dar

① Verwenden Sie sendRedirect Anforderungsumleitung implementieren

<jsp:include page="/jspfragments/demo.jsp" />
Der Server sendet eine URL-Adresse an den Browser und fordert dann den Server an, sodass dieser „/“ für die Verwendung durch den Browser bestimmt ist Diesmal stellt „/“ das Webapps-Verzeichnis dar, „/JavaWeb_HttpServletResponse_Study_20140615/index.jsp“ Diese Adresse bezieht sich auf „webappsJavaWeb_HttpServletResponse_Study_20140615index.jsp“

 

response.sendRedirect("/project. name/fold äh Verzeichnis/Seite" ;

Ändern Sie

response.sendRedirect("/JavaWeb_HttpServletResponse_Study_20140615/index.jsp");
in

response.sendRedirect("/JavaWeb_HttpServletResponse_Study_20140615/index.jsp");

Der durch request.getContextPath() erhaltene Inhalt ist „/JavaWeb_HttpServletResponse_Study_20140615“, was flexibler ist () Anstelle von „/Projektname“ wird empfohlen, diese Methode zu verwenden, sie ist flexibel und praktisch

!

②.Verwenden Sie den Hyperlink zum Springen

response.sendRedirect(request.getContextPath()+"/index.jsp");
 Dies ist der Hyperlink-Sprung, den der Client-Browser zu diesem Zeitpunkt verwendet „/“ steht für das Webapps-Verzeichnis.

Verwenden Sie Hyperlinks, um auf Webressourcen zuzugreifen. Es wird empfohlen, die folgende Schreibmethode zu verwenden, um den absoluten Pfad zu verbessern:

<a href="/JavaWeb_HttpServletResponse_Study_20140615/index.jsp">跳转到首页</a>

Auf diese Weise können Sie den Namen des vermeiden Projekt erscheint im Pfad. Verwenden Sie

${pageContext.request.contextPath}

Ersetzt „/JavaWeb_HttpServletResponse_Study_20140615“③.Formular-Übermittlung

<a href="${pageContext.request.contextPath}/index.jsp">跳转到首页</a>
Dies ist der Client-Browser, der das Formular an den Server sendet, daher wird dieses „/“ vom Browser verwendet. Zu diesem Zeitpunkt stellt „/“ das Webapps-Verzeichnis dar.

Bezüglich des Schreibens des absoluten Pfads des Aktionsattributs bei der Formularübermittlung wird außerdem empfohlen, zur Verbesserung die folgende Methode zu verwenden:

<form action="/JavaWeb_HttpServletResponse_Study_20140615/servlet/CheckServlet" method="post">    
         <input type="submit" value="提交">
 </form>

 

${pageContext .request.contextPath} erhält „/JavaWeb_HttpServletResponse_Study_20140615“

  ${pageContext.request.contextPath}的效果等同于request.getContextPath(),两者获取到的都是"/项目名称"

④.js脚本和css样式文件的引用

<%--使用绝对路径的方式引用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"%>



  
    "/"代表webapps目录的常见应用场景
    <%--使用绝对路径的方式引用js脚本--%>
    
    <%--${pageContext.request.contextPath}与request.getContextPath()写法是得到的效果是一样的--%>
    
    <%--使用绝对路径的方式引用css样式--%>
      
  
  
  
      <%--form表单提交--%>
       
<%--超链接跳转页面--%> <a href="${pageContext.request.contextPath}/index.jsp">跳转到首页</a>

 四、response细节问题

  getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象。
  getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。  
  Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。 
  Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象。

相关推荐:

strust2 获取HttpServletResponse对象

菜菜菜鸟学习之JavaWeb 入门1(自己的学习理解,不对之处请大神们多多指教啊)

Das obige ist der detaillierte Inhalt vonJavaweb-Lernen und -Abschluss – HttpServletResponse-Objekt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn