当前位置: 首页 > news >正文

Java web与Java中的Servlet

一。前言

Java语言大多用于开发web系统的后端,也就是我们是的B/S架构。通过浏览器一个URL去访问系统的后端资源和逻辑。 当我在代码里看到这个类HttpServletRequest 时 让我想到了Servlet,Servlet看上去多么像是Java的一个普通类,但是它确实不是一个类,它是通过Java实现的一项功能,就是用来连接URL和服务端程序的中间件。除了HttpServletRequest 对应的还有HttpServletResponse

二。介绍Servlet

什么事Servlet

Servlet(Server Applet)是JavaServlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容是

JavaWeb中,我们将会接触到三大组件(Servlet、Filter、Listener),Servlet由服务器调用,处理服务器接收到的请求,即完成,接受请求数据 --> 处理请求 --> 完成响应,其本质就是一个实现了Servlet接口的java类

实现Servlet的方式

实现Servlet有三种方式:

  • 实现 javax.servlet.Servlet 接口;
  • 继承 javax.servlet.GenericServlet类;
  • 继承 javax.servlet.http.HttpServlet类;

实际开发中,我们通常会选择继承HttpServlet类来完成我们的Servlet,但认识Servlet接口这种方式也是很重要的,是我们入门知识中不可或缺的部分

使用Servlet

/** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements.  See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You under the Apache License, Version 2.0* (the "License"); you may not use this file except in compliance with* the License.  You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package javax.servlet.http;import java.io.IOException;
import java.util.Collection;
import java.util.Enumeration;import javax.servlet.ServletException;
import javax.servlet.ServletRequest;/*** Extends the {@link javax.servlet.ServletRequest} interface to provide request* information for HTTP servlets.* <p>* The servlet container creates an <code>HttpServletRequest</code> object and* passes it as an argument to the servlet's service methods* (<code>doGet</code>, <code>doPost</code>, etc).*/
public interface HttpServletRequest extends ServletRequest {/*** String identifier for Basic authentication. Value "BASIC"*/public static final String BASIC_AUTH = "BASIC";/*** String identifier for Form authentication. Value "FORM"*/public static final String FORM_AUTH = "FORM";/*** String identifier for Client Certificate authentication. Value* "CLIENT_CERT"*/public static final String CLIENT_CERT_AUTH = "CLIENT_CERT";/*** String identifier for Digest authentication. Value "DIGEST"*/public static final String DIGEST_AUTH = "DIGEST";/*** Returns the name of the authentication scheme used to protect the* servlet. All servlet containers support basic, form and client* certificate authentication, and may additionally support digest* authentication. If the servlet is not authenticated <code>null</code> is* returned.* <p>* Same as the value of the CGI variable AUTH_TYPE.** @return one of the static members BASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH,*         DIGEST_AUTH (suitable for == comparison) or the*         container-specific string indicating the authentication scheme,*         or <code>null</code> if the request was not authenticated.*/public String getAuthType();/*** Returns an array containing all of the <code>Cookie</code> objects the* client sent with this request. This method returns <code>null</code> if* no cookies were sent.** @return an array of all the <code>Cookies</code> included with this*         request, or <code>null</code> if the request has no cookies*/public Cookie[] getCookies();/*** Returns the value of the specified request header as a <code>long</code>* value that represents a <code>Date</code> object. Use this method with* headers that contain dates, such as <code>If-Modified-Since</code>.* <p>* The date is returned as the number of milliseconds since January 1, 1970* GMT. The header name is case insensitive.* <p>* If the request did not have a header of the specified name, this method* returns -1. If the header can't be converted to a date, the method throws* an <code>IllegalArgumentException</code>.** @param name*            a <code>String</code> specifying the name of the header* @return a <code>long</code> value representing the date specified in the*         header expressed as the number of milliseconds since January 1,*         1970 GMT, or -1 if the named header was not included with the*         request* @exception IllegalArgumentException*                If the header value can't be converted to a date*/public long getDateHeader(String name);/*** Returns the value of the specified request header as a* <code>String</code>. If the request did not include a header of the* specified name, this method returns <code>null</code>. If there are* multiple headers with the same name, this method returns the first head* in the request. The header name is case insensitive. You can use this* method with any request header.** @param name*            a <code>String</code> specifying the header name* @return a <code>String</code> containing the value of the requested*         header, or <code>null</code> if the request does not have a*         header of that name*/public String getHeader(String name);/*** Returns all the values of the specified request header as an* <code>Enumeration</code> of <code>String</code> objects.* <p>* Some headers, such as <code>Accept-Language</code> can be sent by clients* as several headers each with a different value rather than sending the* header as a comma separated list.* <p>* If the request did not include any headers of the specified name, this* method returns an empty <code>Enumeration</code>. The header name is case* insensitive. You can use this method with any request header.** @param name*            a <code>String</code> specifying the header name* @return an <code>Enumeration</code> containing the values of the requested*         header. If the request does not have any headers of that name*         return an empty enumeration. If the container does not allow*         access to header information, return null*/public Enumeration<String> getHeaders(String name);/*** Returns an enumeration of all the header names this request contains. If* the request has no headers, this method returns an empty enumeration.* <p>* Some servlet containers do not allow servlets to access headers using* this method, in which case this method returns <code>null</code>** @return an enumeration of all the header names sent with this request; if*         the request has no headers, an empty enumeration; if the servlet*         container does not allow servlets to use this method,*         <code>null</code>*/public Enumeration<String> getHeaderNames();/*** Returns the value of the specified request header as an <code>int</code>.* If the request does not have a header of the specified name, this method* returns -1. If the header cannot be converted to an integer, this method* throws a <code>NumberFormatException</code>.* <p>* The header name is case insensitive.** @param name*            a <code>String</code> specifying the name of a request header* @return an integer expressing the value of the request header or -1 if the*         request doesn't have a header of this name* @exception NumberFormatException*                If the header value can't be converted to an*                <code>int</code>*/public int getIntHeader(String name);/*** Returns the name of the HTTP method with which this request was made, for* example, GET, POST, or PUT. Same as the value of the CGI variable* REQUEST_METHOD.** @return a <code>String</code> specifying the name of the method with*         which this request was made*/public String getMethod();/*** Returns any extra path information associated with the URL the client* sent when it made this request. The extra path information follows the* servlet path but precedes the query string and will start with a "/"* character.* <p>* This method returns <code>null</code> if there was no extra path* information.* <p>* Same as the value of the CGI variable PATH_INFO.** @return a <code>String</code>, decoded by the web container, specifying*         extra path information that comes after the servlet path but*         before the query string in the request URL; or <code>null</code>*         if the URL does not have any extra path information*/public String getPathInfo();/*** Returns any extra path information after the servlet name but before the* query string, and translates it to a real path. Same as the value of the* CGI variable PATH_TRANSLATED.* <p>* If the URL does not have any extra path information, this method returns* <code>null</code> or the servlet container cannot translate the virtual* path to a real path for any reason (such as when the web application is* executed from an archive). The web container does not decode this string.** @return a <code>String</code> specifying the real path, or*         <code>null</code> if the URL does not have any extra path*         information*/public String getPathTranslated();/*** Returns the portion of the request URI that indicates the context of the* request. The context path always comes first in a request URI. The path* starts with a "/" character but does not end with a "/" character. For* servlets in the default (root) context, this method returns "". The* container does not decode this string.** @return a <code>String</code> specifying the portion of the request URI*         that indicates the context of the request*/public String getContextPath();/*** Returns the query string that is contained in the request URL after the* path. This method returns <code>null</code> if the URL does not have a* query string. Same as the value of the CGI variable QUERY_STRING.** @return a <code>String</code> containing the query string or*         <code>null</code> if the URL contains no query string. The value*         is not decoded by the container.*/public String getQueryString();/*** Returns the login of the user making this request, if the user has been* authenticated, or <code>null</code> if the user has not been* authenticated. Whether the user name is sent with each subsequent request* depends on the browser and type of authentication. Same as the value of* the CGI variable REMOTE_USER.** @return a <code>String</code> specifying the login of the user making*         this request, or <code>null</code> if the user login is not known*/public String getRemoteUser();/*** Returns a boolean indicating whether the authenticated user is included* in the specified logical "role". Roles and role membership can be defined* using deployment descriptors. If the user has not been authenticated, the* method returns <code>false</code>.** @param role*            a <code>String</code> specifying the name of the role* @return a <code>boolean</code> indicating whether the user making this*         request belongs to a given role; <code>false</code> if the user*         has not been authenticated*/public boolean isUserInRole(String role);/*** Returns a <code>java.security.Principal</code> object containing the name* of the current authenticated user. If the user has not been* authenticated, the method returns <code>null</code>.** @return a <code>java.security.Principal</code> containing the name of the*         user making this request; <code>null</code> if the user has not*         been authenticated*/public java.security.Principal getUserPrincipal();/*** Returns the session ID specified by the client. This may not be the same* as the ID of the current valid session for this request. If the client* did not specify a session ID, this method returns <code>null</code>.** @return a <code>String</code> specifying the session ID, or*         <code>null</code> if the request did not specify a session ID* @see #isRequestedSessionIdValid*/public String getRequestedSessionId();/*** Returns the part of this request's URL from the protocol name up to the* query string in the first line of the HTTP request. The web container* does not decode this String. For example:* <table summary="Examples of Returned Values">* <tr align=left>* <th>First line of HTTP request</th>* <th>Returned Value</th>* <tr>* <td>POST /some/path.html HTTP/1.1* <td>* <td>/some/path.html* <tr>* <td>GET http://foo.bar/a.html HTTP/1.0* <td>* <td>/a.html* <tr>* <td>HEAD /xyz?a=b HTTP/1.1* <td>* <td>/xyz* </table>* <p>* To reconstruct an URL with a scheme and host, use* {@link #getRequestURL}.** @return a <code>String</code> containing the part of the URL from the*         protocol name up to the query string* @see #getRequestURL*/public String getRequestURI();/*** Reconstructs the URL the client used to make the request. The returned* URL contains a protocol, server name, port number, and server path, but* it does not include query string parameters.* <p>* Because this method returns a <code>StringBuffer</code>, not a string,* you can modify the URL easily, for example, to append query parameters.* <p>* This method is useful for creating redirect messages and for reporting* errors.** @return a <code>StringBuffer</code> object containing the reconstructed*         URL*/public StringBuffer getRequestURL();/*** Returns the part of this request's URL that calls the servlet. This path* starts with a "/" character and includes either the servlet name or a* path to the servlet, but does not include any extra path information or a* query string. Same as the value of the CGI variable SCRIPT_NAME.* <p>* This method will return an empty string ("") if the servlet used to* process this request was matched using the "/*" pattern.** @return a <code>String</code> containing the name or path of the servlet*         being called, as specified in the request URL, decoded, or an*         empty string if the servlet used to process the request is*         matched using the "/*" pattern.*/public String getServletPath();/*** Returns the current <code>HttpSession</code> associated with this request* or, if there is no current session and <code>create</code> is true,* returns a new session.* <p>* If <code>create</code> is <code>false</code> and the request has no valid* <code>HttpSession</code>, this method returns <code>null</code>.* <p>* To make sure the session is properly maintained, you must call this* method before the response is committed. If the container is using* cookies to maintain session integrity and is asked to create a new* session when the response is committed, an IllegalStateException is* thrown.** @param create*            <code>true</code> to create a new session for this request if*            necessary; <code>false</code> to return <code>null</code> if*            there's no current session* @return the <code>HttpSession</code> associated with this request or*         <code>null</code> if <code>create</code> is <code>false</code>*         and the request has no valid session* @see #getSession()*/public HttpSession getSession(boolean create);/*** Returns the current session associated with this request, or if the* request does not have a session, creates one.** @return the <code>HttpSession</code> associated with this request* @see #getSession(boolean)*/public HttpSession getSession();/*** Changes the session ID of the session associated with this request. This* method does not create a new session object it only changes the ID of the* current session.** @return the new session ID allocated to the session* @see HttpSessionIdListener* @since Servlet 3.1*/public String changeSessionId();/*** Checks whether the requested session ID is still valid.** @return <code>true</code> if this request has an id for a valid session*         in the current session context; <code>false</code> otherwise* @see #getRequestedSessionId* @see #getSession*/public boolean isRequestedSessionIdValid();/*** Checks whether the requested session ID came in as a cookie.** @return <code>true</code> if the session ID came in as a cookie;*         otherwise, <code>false</code>* @see #getSession*/public boolean isRequestedSessionIdFromCookie();/*** Checks whether the requested session ID came in as part of the request* URL.** @return <code>true</code> if the session ID came in as part of a URL;*         otherwise, <code>false</code>* @see #getSession*/public boolean isRequestedSessionIdFromURL();/*** @return {@link #isRequestedSessionIdFromURL()}* @deprecated As of Version 2.1 of the Java Servlet API, use*             {@link #isRequestedSessionIdFromURL} instead.*/@SuppressWarnings("dep-ann")// Spec API does not use @Deprecatedpublic boolean isRequestedSessionIdFromUrl();/*** Triggers the same authentication process as would be triggered if the* request is for a resource that is protected by a security constraint.** @param response  The response to use to return any authentication*                  challenge* @return <code>true</code> if the user is successfully authenticated and*         <code>false</code> if not** @throws IOException if the authentication process attempted to read from*         the request or write to the response and an I/O error occurred* @throws IllegalStateException if the authentication process attempted to*         write to the response after it had been committed* @throws ServletException if the authentication failed and the caller is*         expected to handle the failure* @since Servlet 3.0*/public boolean authenticate(HttpServletResponse response)throws IOException, ServletException;/*** Authenticate the provided user name and password and then associated the* authenticated user with the request.** @param username  The user name to authenticate* @param password  The password to use to authenticate the user** @throws ServletException*             If any of {@link #getRemoteUser()},*             {@link #getUserPrincipal()} or {@link #getAuthType()} are*             non-null, if the configured authenticator does not support*             user name and password authentication or if the*             authentication fails* @since Servlet 3.0*/public void login(String username, String password) throws ServletException;/*** Removes any authenticated user from the request.** @throws ServletException*             If the logout fails* @since Servlet 3.0*/public void logout() throws ServletException;/*** Return a collection of all uploaded Parts.** @return A collection of all uploaded Parts.* @throws IOException*             if an I/O error occurs* @throws IllegalStateException*             if size limits are exceeded or no multipart configuration is*             provided* @throws ServletException*             if the request is not multipart/form-data* @since Servlet 3.0*/public Collection<Part> getParts() throws IOException,ServletException;/*** Gets the named Part or null if the Part does not exist. Triggers upload* of all Parts.** @param name The name of the Part to obtain** @return The named Part or null if the Part does not exist* @throws IOException*             if an I/O error occurs* @throws IllegalStateException*             if size limits are exceeded* @throws ServletException*             if the request is not multipart/form-data* @since Servlet 3.0*/public Part getPart(String name) throws IOException,ServletException;/*** Start the HTTP upgrade process and pass the connection to the provided* protocol handler once the current request/response pair has completed* processing. Calling this method sets the response status to {@link* HttpServletResponse#SC_SWITCHING_PROTOCOLS} and flushes the response.* Protocol specific headers must have already been set before this method* is called.** @param <T>                     The type of the upgrade handler* @param httpUpgradeHandlerClass The class that implements the upgrade*                                handler** @return A newly created instance of the specified upgrade handler type** @throws IOException*             if an I/O error occurred during the upgrade* @throws ServletException*             if the given httpUpgradeHandlerClass fails to be instantiated* @since Servlet 3.1*/public <T extends HttpUpgradeHandler> T upgrade(Class<T> httpUpgradeHandlerClass) throws java.io.IOException, ServletException;
}
/** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements.  See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You under the Apache License, Version 2.0* (the "License"); you may not use this file except in compliance with* the License.  You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/
package javax.servlet.http;import java.io.IOException;
import java.util.Collection;import javax.servlet.ServletResponse;/*** Extends the {@link ServletResponse} interface to provide HTTP-specific* functionality in sending a response. For example, it has methods to access* HTTP headers and cookies.* <p>* The servlet container creates an <code>HttpServletResponse</code> object and* passes it as an argument to the servlet's service methods (<code>doGet</code>, <code>doPost</code>, etc).** @see javax.servlet.ServletResponse*/
public interface HttpServletResponse extends ServletResponse {/*** Adds the specified cookie to the response. This method can be called* multiple times to set more than one cookie.** @param cookie*            the Cookie to return to the client*/public void addCookie(Cookie cookie);/*** Returns a boolean indicating whether the named response header has* already been set.** @param name*            the header name* @return <code>true</code> if the named response header has already been*         set; <code>false</code> otherwise*/public boolean containsHeader(String name);/*** Encodes the specified URL by including the session ID in it, or, if* encoding is not needed, returns the URL unchanged. The implementation of* this method includes the logic to determine whether the session ID needs* to be encoded in the URL. For example, if the browser supports cookies,* or session tracking is turned off, URL encoding is unnecessary.* <p>* For robust session tracking, all URLs emitted by a servlet should be run* through this method. Otherwise, URL rewriting cannot be used with* browsers which do not support cookies.** @param url*            the url to be encoded.* @return the encoded URL if encoding is needed; the unchanged URL*         otherwise.*/public String encodeURL(String url);/*** Encodes the specified URL for use in the <code>sendRedirect</code> method* or, if encoding is not needed, returns the URL unchanged. The* implementation of this method includes the logic to determine whether the* session ID needs to be encoded in the URL. Because the rules for making* this determination can differ from those used to decide whether to encode* a normal link, this method is separated from the <code>encodeURL</code>* method.* <p>* All URLs sent to the <code>HttpServletResponse.sendRedirect</code> method* should be run through this method. Otherwise, URL rewriting cannot be* used with browsers which do not support cookies.** @param url*            the url to be encoded.* @return the encoded URL if encoding is needed; the unchanged URL*         otherwise.* @see #sendRedirect* @see #encodeUrl*/public String encodeRedirectURL(String url);/*** @param url*            the url to be encoded.* @return the encoded URL if encoding is needed; the unchanged URL*         otherwise.* @deprecated As of version 2.1, use encodeURL(String url) instead*/@SuppressWarnings("dep-ann")// Spec API does not use @Deprecatedpublic String encodeUrl(String url);/*** @param url*            the url to be encoded.* @return the encoded URL if encoding is needed; the unchanged URL*         otherwise.* @deprecated As of version 2.1, use encodeRedirectURL(String url) instead*/@SuppressWarnings("dep-ann")// Spec API does not use @Deprecatedpublic String encodeRedirectUrl(String url);/*** Sends an error response to the client using the specified status code and* clears the output buffer. The server defaults to creating the response to* look like an HTML-formatted server error page containing the specified* message, setting the content type to "text/html", leaving cookies and* other headers unmodified. If an error-page declaration has been made for* the web application corresponding to the status code passed in, it will* be served back in preference to the suggested msg parameter.* <p>* If the response has already been committed, this method throws an* IllegalStateException. After using this method, the response should be* considered to be committed and should not be written to.** @param sc*            the error status code* @param msg*            the descriptive message* @exception IOException*                If an input or output exception occurs* @exception IllegalStateException*                If the response was committed*/public void sendError(int sc, String msg) throws IOException;/*** Sends an error response to the client using the specified status code and* clears the buffer. This is equivalent to calling {@link #sendError(int,* String)} with the same status code and <code>null</code> for the message.** @param sc*            the error status code* @exception IOException*                If an input or output exception occurs* @exception IllegalStateException*                If the response was committed before this method call*/public void sendError(int sc) throws IOException;/*** Sends a temporary redirect response to the client using the specified* redirect location URL. This method can accept relative URLs; the servlet* container must convert the relative URL to an absolute URL before sending* the response to the client. If the location is relative without a leading* '/' the container interprets it as relative to the current request URI.* If the location is relative with a leading '/' the container interprets* it as relative to the servlet container root.* <p>* If the response has already been committed, this method throws an* IllegalStateException. After using this method, the response should be* considered to be committed and should not be written to.** @param location*            the redirect location URL* @exception IOException*                If an input or output exception occurs* @exception IllegalStateException*                If the response was committed or if a partial URL is given*                and cannot be converted into a valid URL*/public void sendRedirect(String location) throws IOException;/*** Sets a response header with the given name and date-value. The date is* specified in terms of milliseconds since the epoch. If the header had* already been set, the new value overwrites the previous one. The* <code>containsHeader</code> method can be used to test for the presence* of a header before setting its value.** @param name*            the name of the header to set* @param date*            the assigned date value* @see #containsHeader* @see #addDateHeader*/public void setDateHeader(String name, long date);/*** Adds a response header with the given name and date-value. The date is* specified in terms of milliseconds since the epoch. This method allows* response headers to have multiple values.** @param name*            the name of the header to set* @param date*            the additional date value* @see #setDateHeader*/public void addDateHeader(String name, long date);/*** Sets a response header with the given name and value. If the header had* already been set, the new value overwrites the previous one. The* <code>containsHeader</code> method can be used to test for the presence* of a header before setting its value.** @param name*            the name of the header* @param value*            the header value If it contains octet string, it should be*            encoded according to RFC 2047*            (http://www.ietf.org/rfc/rfc2047.txt)* @see #containsHeader* @see #addHeader*/public void setHeader(String name, String value);/*** Adds a response header with the given name and value. This method allows* response headers to have multiple values.** @param name*            the name of the header* @param value*            the additional header value If it contains octet string, it*            should be encoded according to RFC 2047*            (http://www.ietf.org/rfc/rfc2047.txt)* @see #setHeader*/public void addHeader(String name, String value);/*** Sets a response header with the given name and integer value. If the* header had already been set, the new value overwrites the previous one.* The <code>containsHeader</code> method can be used to test for the* presence of a header before setting its value.** @param name*            the name of the header* @param value*            the assigned integer value* @see #containsHeader* @see #addIntHeader*/public void setIntHeader(String name, int value);/*** Adds a response header with the given name and integer value. This method* allows response headers to have multiple values.** @param name*            the name of the header* @param value*            the assigned integer value* @see #setIntHeader*/public void addIntHeader(String name, int value);/*** Sets the status code for this response. This method is used to set the* return status code when there is no error (for example, for the status* codes SC_OK or SC_MOVED_TEMPORARILY). If there is an error, and the* caller wishes to invoke an error-page defined in the web application, the* <code>sendError</code> method should be used instead.* <p>* The container clears the buffer and sets the Location header, preserving* cookies and other headers.** @param sc*            the status code* @see #sendError*/public void setStatus(int sc);/*** Sets the status code and message for this response.** @param sc*            the status code* @param sm*            the status message* @deprecated As of version 2.1, due to ambiguous meaning of the message*             parameter. To set a status code use*             <code>setStatus(int)</code>, to send an error with a*             description use <code>sendError(int, String)</code>.*/@SuppressWarnings("dep-ann")// Spec API does not use @Deprecatedpublic void setStatus(int sc, String sm);/*** Get the HTTP status code for this Response.** @return The HTTP status code for this Response** @since Servlet 3.0*/public int getStatus();/*** Return the value for the specified header, or <code>null</code> if this* header has not been set.  If more than one value was added for this* name, only the first is returned; use {@link #getHeaders(String)} to* retrieve all of them.** @param name Header name to look up** @return The first value for the specified header. This is the raw value*         so if multiple values are specified in the first header then they*         will be returned as a single header value .** @since Servlet 3.0*/public String getHeader(String name);/*** Return a Collection of all the header values associated with the* specified header name.** @param name Header name to look up** @return The values for the specified header. These are the raw values so*         if multiple values are specified in a single header that will be*         returned as a single header value.** @since Servlet 3.0*/public Collection<String> getHeaders(String name);/*** Get the header names set for this HTTP response.** @return The header names set for this HTTP response.** @since Servlet 3.0*/public Collection<String> getHeaderNames();/** Server status codes; see RFC 2068.*//*** Status code (100) indicating the client can continue.*/public static final int SC_CONTINUE = 100;/*** Status code (101) indicating the server is switching protocols according* to Upgrade header.*/public static final int SC_SWITCHING_PROTOCOLS = 101;/*** Status code (200) indicating the request succeeded normally.*/public static final int SC_OK = 200;/*** Status code (201) indicating the request succeeded and created a new* resource on the server.*/public static final int SC_CREATED = 201;/*** Status code (202) indicating that a request was accepted for processing,* but was not completed.*/public static final int SC_ACCEPTED = 202;/*** Status code (203) indicating that the meta information presented by the* client did not originate from the server.*/public static final int SC_NON_AUTHORITATIVE_INFORMATION = 203;/*** Status code (204) indicating that the request succeeded but that there* was no new information to return.*/public static final int SC_NO_CONTENT = 204;/*** Status code (205) indicating that the agent <em>SHOULD</em> reset the* document view which caused the request to be sent.*/public static final int SC_RESET_CONTENT = 205;/*** Status code (206) indicating that the server has fulfilled the partial* GET request for the resource.*/public static final int SC_PARTIAL_CONTENT = 206;/*** Status code (300) indicating that the requested resource corresponds to* any one of a set of representations, each with its own specific location.*/public static final int SC_MULTIPLE_CHOICES = 300;/*** Status code (301) indicating that the resource has permanently moved to a* new location, and that future references should use a new URI with their* requests.*/public static final int SC_MOVED_PERMANENTLY = 301;/*** Status code (302) indicating that the resource has temporarily moved to* another location, but that future references should still use the* original URI to access the resource. This definition is being retained* for backwards compatibility. SC_FOUND is now the preferred definition.*/public static final int SC_MOVED_TEMPORARILY = 302;/*** Status code (302) indicating that the resource reside temporarily under a* different URI. Since the redirection might be altered on occasion, the* client should continue to use the Request-URI for future* requests.(HTTP/1.1) To represent the status code (302), it is recommended* to use this variable.*/public static final int SC_FOUND = 302;/*** Status code (303) indicating that the response to the request can be* found under a different URI.*/public static final int SC_SEE_OTHER = 303;/*** Status code (304) indicating that a conditional GET operation found that* the resource was available and not modified.*/public static final int SC_NOT_MODIFIED = 304;/*** Status code (305) indicating that the requested resource <em>MUST</em> be* accessed through the proxy given by the <code><em>Location</em></code>* field.*/public static final int SC_USE_PROXY = 305;/*** Status code (307) indicating that the requested resource resides* temporarily under a different URI. The temporary URI <em>SHOULD</em> be* given by the <code><em>Location</em></code> field in the response.*/public static final int SC_TEMPORARY_REDIRECT = 307;/*** Status code (400) indicating the request sent by the client was* syntactically incorrect.*/public static final int SC_BAD_REQUEST = 400;/*** Status code (401) indicating that the request requires HTTP* authentication.*/public static final int SC_UNAUTHORIZED = 401;/*** Status code (402) reserved for future use.*/public static final int SC_PAYMENT_REQUIRED = 402;/*** Status code (403) indicating the server understood the request but* refused to fulfill it.*/public static final int SC_FORBIDDEN = 403;/*** Status code (404) indicating that the requested resource is not* available.*/public static final int SC_NOT_FOUND = 404;/*** Status code (405) indicating that the method specified in the* <code><em>Request-Line</em></code> is not allowed for the resource* identified by the <code><em>Request-URI</em></code>.*/public static final int SC_METHOD_NOT_ALLOWED = 405;/*** Status code (406) indicating that the resource identified by the request* is only capable of generating response entities which have content* characteristics not acceptable according to the accept headers sent in* the request.*/public static final int SC_NOT_ACCEPTABLE = 406;/*** Status code (407) indicating that the client <em>MUST</em> first* authenticate itself with the proxy.*/public static final int SC_PROXY_AUTHENTICATION_REQUIRED = 407;/*** Status code (408) indicating that the client did not produce a request* within the time that the server was prepared to wait.*/public static final int SC_REQUEST_TIMEOUT = 408;/*** Status code (409) indicating that the request could not be completed due* to a conflict with the current state of the resource.*/public static final int SC_CONFLICT = 409;/*** Status code (410) indicating that the resource is no longer available at* the server and no forwarding address is known. This condition* <em>SHOULD</em> be considered permanent.*/public static final int SC_GONE = 410;/*** Status code (411) indicating that the request cannot be handled without a* defined <code><em>Content-Length</em></code>.*/public static final int SC_LENGTH_REQUIRED = 411;/*** Status code (412) indicating that the precondition given in one or more* of the request-header fields evaluated to false when it was tested on the* server.*/public static final int SC_PRECONDITION_FAILED = 412;/*** Status code (413) indicating that the server is refusing to process the* request because the request entity is larger than the server is willing* or able to process.*/public static final int SC_REQUEST_ENTITY_TOO_LARGE = 413;/*** Status code (414) indicating that the server is refusing to service the* request because the <code><em>Request-URI</em></code> is longer than the* server is willing to interpret.*/public static final int SC_REQUEST_URI_TOO_LONG = 414;/*** Status code (415) indicating that the server is refusing to service the* request because the entity of the request is in a format not supported by* the requested resource for the requested method.*/public static final int SC_UNSUPPORTED_MEDIA_TYPE = 415;/*** Status code (416) indicating that the server cannot serve the requested* byte range.*/public static final int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;/*** Status code (417) indicating that the server could not meet the* expectation given in the Expect request header.*/public static final int SC_EXPECTATION_FAILED = 417;/*** Status code (500) indicating an error inside the HTTP server which* prevented it from fulfilling the request.*/public static final int SC_INTERNAL_SERVER_ERROR = 500;/*** Status code (501) indicating the HTTP server does not support the* functionality needed to fulfill the request.*/public static final int SC_NOT_IMPLEMENTED = 501;/*** Status code (502) indicating that the HTTP server received an invalid* response from a server it consulted when acting as a proxy or gateway.*/public static final int SC_BAD_GATEWAY = 502;/*** Status code (503) indicating that the HTTP server is temporarily* overloaded, and unable to handle the request.*/public static final int SC_SERVICE_UNAVAILABLE = 503;/*** Status code (504) indicating that the server did not receive a timely* response from the upstream server while acting as a gateway or proxy.*/public static final int SC_GATEWAY_TIMEOUT = 504;/*** Status code (505) indicating that the server does not support or refuses* to support the HTTP protocol version that was used in the request* message.*/public static final int SC_HTTP_VERSION_NOT_SUPPORTED = 505;
}

Servlet生命周期

  1. 客户端请求该 Servlet;

  2. 2.

    加载 Servlet 类到内存;

  3. 3.

    实例化并调用init()方法初始化该 Servlet;

  4. 4.

    service()(根据请求方法不同调用doGet() 或者 doPost(),此外还有doHead()、doPut()、doTrace()、doDelete()、doOptions()、destroy())。

  5. 5.

    加载和实例化 Servlet。这项操作一般是动态执行的。然而,Server 通常会提供一个管理的选项,用于在 Server 启动时强制装载和初始化特定的 Servlet。

Server 创建一个 Servlet的实例

第一个客户端的请求到达 Server

Server 调用 Servlet 的 init() 方法(可配置为 Server 创建 Servlet 实例时调用,在 web.xml 中 标签下配置 标签,配置的值为整型,值越小 Servlet 的启动优先级越高)

一个客户端的请求到达 Server

Server 创建一个请求对象,处理客户端请求

Server 创建一个响应对象,响应客户端请求

Server 激活 Servlet 的 service() 方法,传递请求和响应对象作为参数

service() 方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息

service() 方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如 doGet() 或 doPost() 或程序员自己开发的新的方法。

对于更多的客户端请求,Server 创建新的请求和响应对象,仍然激活此 Servlet 的 service() 方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用 init() 方法。一般 Servlet 只初始化一次(只有一个对象),当 Server 不再需要 Servlet 时(一般当 Server 关闭时),Server 调用 Servlet 的 destroy() 方法。

相关文章:

Java web与Java中的Servlet

一。前言 Java语言大多用于开发web系统的后端&#xff0c;也就是我们是的B/S架构。通过浏览器一个URL去访问系统的后端资源和逻辑。 当我在代码里看到这个类HttpServletRequest 时 让我想到了Servlet&#xff0c;Servlet看上去多么像是Java的一个普通类&#xff0c;但是它确实…...

Web开发 -前端部分-CSS3新特性

1 CSS概述 2 CSS3私有前缀 3 CSS3的长度单位 代码实现&#xff1a; <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…...

2025年PHP面试宝典,技术总结。

面试是进入职场的第一道坎&#xff0c;因为我本身学校太一般的问题在面试中遇到了各种不爽&#xff0c;和那些高学历的相比自己真是信心大跌。我面试的方向是php开发工程师&#xff0c;主要做网站后台、APP接口等。下面是我这段时间总结的面试方面的常考常问的知识点&#xff0…...

idea plugin插件开发——入门级教程(IntelliJ IDEA Plugin)

手打不易&#xff0c;如果转摘&#xff0c;请注明出处&#xff01; 注明原文&#xff1a;idea plugin插件开发——入门级教程&#xff08;IntelliJ IDEA Plugin&#xff09;-CSDN博客 目录 前言 官方 官方文档 代码示例 开发前必读 Intellij、Gradle、JDK 版本关系 plu…...

node.js 文件操作

在 Node.js 中&#xff0c;文件操作主要通过内置的 fs&#xff08;File System&#xff09;模块来实现。 1. 读取文件 const fs require("fs");// 异步读取文件fs.readFile("example.txt", "utf8", (err, data) > {if (err) {console.erro…...

模拟算法习题篇

在算法中&#xff0c;模拟是一种通过计算机程序来模拟现实世界中的过程或系统行为的方法。它的核心思想是根据题目给定的规则和逻辑&#xff0c;按照步骤细致地重现事件的发展流程&#xff0c;从而获得最终结果。 解题时如何使用模拟算法&#xff1a; 理解题目规则&#xff1a;…...

opencv对直方图的计算和绘制

【欢迎关注编码小哥&#xff0c;学习更多实用的编程方法和技巧】 1、直方图的计算 cv::calcHist 是 OpenCV 中用于计算图像直方图的函数。它可以处理多通道图像&#xff0c;并通过指定图像、通道、掩膜、直方图大小和范围等参数来生成直方图。 函数原型 void cv::calcHist(…...

暑期实习准备:C语言(持续更新)

1.局部变量和全局变量 局部变量的作用域是在变量所在的局部范围&#xff0c;全局变量的作用域是整个工程&#xff1b;局部变量的生命周期是作用域内&#xff0c;全局变量的生命周期是整个程序的生命周期&#xff0c;当两者命名冲突时&#xff0c;优先使用的是局部变量。 2.C语言…...

一文大白话讲清楚webpack基本使用——11——chunkIds和runtimeChunk

文章目录 一文大白话讲清楚webpack基本使用——11——chunkIds和runtimeChunk1. 建议按文章顺序从头看&#xff0c;一看到底&#xff0c;豁然开朗2. 啥是chunkIds3.怎么使用chunkIds4. 啥是runtimeChunk5. 怎么使用runtimeChunk 一文大白话讲清楚webpack基本使用——11——chun…...

linux下使用脚本实现对进程的内存占用自动化监测

linux系统中常用cat /proc/{pid}/status和pmap -x {pid}来监测某个进程的内存资源占用情况。 其中注意各参数的含义如下&#xff1a; VmSize&#xff1a;表示进程当前虚拟内存大小 VmPeak&#xff1a;表示进程所占用最大虚拟内存大小 VmRSS&#xff1a;表示进程当前占用物理内…...

MyBatis Plus 的 InnerInterceptor:更轻量级的 SQL 拦截器

在 Spring Boot 项目中使用 MyBatis Plus 时&#xff0c;你可能会遇到 InnerInterceptor 这个概念。 InnerInterceptor 是 MyBatis Plus 提供的一种轻量级 SQL 拦截器&#xff0c;它与传统的 MyBatis 拦截器&#xff08;Interceptor&#xff09;有所不同&#xff0c;具有更简单…...

[STM32 HAL库]串口中断编程思路

一、前言 最近在准备蓝桥杯比赛&#xff08;嵌入式赛道&#xff09;&#xff0c;研究了以下串口空闲中断DMA接收不定长的数据&#xff0c;感觉这个方法的接收效率很高&#xff0c;十分好用。方法配置都成功了&#xff0c;但是有一个点需要进行考虑&#xff0c;就是一般我们需要…...

会议签到系统的架构和实现

会议签到系统的架构和实现 摘要:通过定制安卓会议机开机APP呈现签到界面&#xff0c;并且通过W/B结构采集管理签到信息&#xff0c;实现会议签到的功能。为达到此目标本文将探讨使用Redis提供后台数据支持&#xff1b;使用SocketIo处理适时消息&#xff1b;使用Flask进行原型开…...

复位信号的同步与释放(同步复位、异步复位、异步复位同步释放)

文章目录 背景前言一、复位信号的同步与释放1.1 同步复位1.1.1 综述1.1.2 优缺点 1.2 recovery time和removal time1.3 异步复位1.3.1 综述1.3.2 优缺点 1.4 同步复位 与 异步复位1.5 异步复位、同步释放1.5.1 总述1.5.2 机理1.5.3 复位网络 二、思考与补充2.1 复…...

TL3562/3568移植无锡沐创N500L-AM4驱动进内核源码,报错及其解决方案

前言 创龙官方提供的资料无锡沐创N500L-AM4驱动是rnpgbe-0.1.0.rc60-dd9f3cf.tar.gz&#xff1b;无锡沐创官方&#xff0c;截止目前&#xff0c;最新驱动是rnpgbe-0.2.3-f26b9a4.tar.gz。考虑到开发的稳妥性&#xff0c;先选用创龙尝试过的rnpgbe-0.1.0.rc60-dd9f3cf.tar.gz来移…...

埃氏算法C++实现: 快速输出质数( 素数 )

目录 1.简介 算法原理 算法特点 应用场景 2.一般求素数方法 3.埃氏算法求素数 3.1.无动态分配 3.2.有动态分配 1.简介 ‌埃氏算法&#xff08;Eratosthenes Sieve&#xff09;‌&#xff0c;全称为埃拉托斯特尼筛法&#xff0c;是一种由古希腊数学家埃拉托斯特尼在公元…...

Kubernetes 集群中安装和配置 Kubernetes Dashboard

前言 上篇成功部署Kubernetes集群后&#xff0c;为了方便管理和监控集群资源&#xff0c;安装Kubernetes Dashboard显得尤为重要。Kubernetes Dashboard 是一个通用的、基于 Web 的 UI&#xff0c;旨在让用户轻松地部署容器化应用到 Kubernetes 集群&#xff0c;并对这些应用进…...

力扣-数组-414 第三大的数

解析 先利用set去重&#xff0c;然后用逆向遍历找到第三大的数 代码 class Solution { public:int thirdMax(vector<int>& nums) {set<int> numsToset;for(int i 0; i<nums.size(); i){numsToset.insert(nums[i]);}int index;if(numsToset.size() > …...

python实现答题游戏

有这样一个需求&#xff1a;使用python实现一个游戏&#xff0c;一共有10个问题&#xff0c;依次回答每个问题&#xff0c;每个用户可以输入问题的答案&#xff0c;但是互相不能看到&#xff0c;有一个管理员可以看到所有人的答案&#xff0c;并且当所有人都填写完成后可以公布…...

OneData体系架构详解

阿里巴巴的 OneData 体系架构方法论&#xff0c;主要分为三个阶段&#xff1a;业务板块、规范定义 和 模型设计。每个阶段的核心目标是确保数据的高效管理、共享与分析能力。 一. 业务板块&#xff08;Business Segment&#xff09; 业务板块是OneData体系架构中的第一步&…...

五、华为 RSTP

RSTP&#xff08;Rapid Spanning Tree Protocol&#xff0c;快速生成树协议&#xff09;是 STP 的优化版本&#xff0c;能实现网络拓扑的快速收敛。 一、RSTP 原理 快速收敛机制&#xff1a;RSTP 通过引入边缘端口、P/A&#xff08;Proposal/Agreement&#xff09;机制等&…...

解锁Java中的国密算法:安全保障的密钥

一、引言 在数字化浪潮席卷全球的当下&#xff0c;信息安全已然成为国家、企业乃至个人无法忽视的重要议题。国密算法&#xff0c;作为我国自主研发的密码算法体系&#xff0c;宛如坚固的盾牌&#xff0c;为国家信息安全筑起了一道坚不可摧的防线。它的诞生&#xff0c;不仅承载…...

docker-registry

安装依赖 apt install apache2-utils设置密码 htpasswd -Bbn 用户名 密码 >/data/registry_hub/passwd#docker私服部署 docker run -d -p 5000:5000 --name docker-registry -v /data/registry_hub/:/var/lib/registry -v /data/registry_hub/passwd:/auth/htpasswd \ -e …...

QTableWidget的简单使用

1.最简单的表格示例&#xff1a; ui->tableWidget->setRowCount(2);// 设置行数ui->tableWidget->setColumnCount(3);// 设置列数&#xff0c;一定要放在设置行表头之前QStringList rowHeaderList;// 行表头rowHeaderList << QStringLiteral("姓名"…...

第三天 学习JavaScript基础,掌握变量、数据类型、运算符、流程控制

学习JavaScript基础是成为一名前端开发者的重要一步。以下是关于变量、数据类型、运算符和流程控制的一些基础知识和示例代码。 1. 变量 变量用于存储数据。在JavaScript中&#xff0c;使用var、let或const关键字来声明变量。 // 使用 var 声明变量&#xff08;不推荐&#…...

Python - itertools- pairwise函数的详解

前言&#xff1a; 最近在leetcode刷题时用到了重叠对pairwise,这里就讲解一下迭代工具函数pairwise,既介绍给大家&#xff0c;同时也提醒一下自己&#xff0c;这个pairwise其实在刷题中十分有用&#xff0c;相信能帮助到你。 参考官方讲解&#xff1a;itertools --- 为高效循…...

C语言程序设计十大排序—选择排序

文章目录 1.概念✅2.选择排序&#x1f388;3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅5.十大排序 1.概念✅ 排序是数据处理的基本操作之一&#xff0c;每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法&#xff0c;排序后的数据更易于处理和查找。在…...

微前端qiankun的基本使用(vue-element-admin作为项目模版)

微前端qiankun的基本使用(vue-element-admin作为项目模版) qiankun架构特点主应用netmoni_master改造工程项目目录结构子项目配置:子应用注册配置项container:子应用挂载节点配置项activeRule:子应用路由子应用netmoni_child1改造目录结构项目配置:src/settings中配置子应…...

MySQL用户授权、收回权限与查看权限

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...

Ansible fetch模块详解:轻松从远程主机抓取文件

在自动化运维的过程中&#xff0c;我们经常需要从远程主机下载文件到本地&#xff0c;以便进行分析或备份。Ansible的fetch模块正是为了满足这一需求而设计的&#xff0c;它可以帮助我们轻松地从远程主机获取文件&#xff0c;并将其保存到本地指定的位置。在这篇文章中&#xf…...

skynet 源码阅读 -- 启动主流程

Skynet 启动主流程分析 Skynet 是一个轻量级、高并发的服务器框架。它在启动时会进行一系列初始化操作&#xff0c;并启动多个不同功能的线程&#xff08;Monitor、Timer、Worker、Socket&#xff09;&#xff0c;从而实现消息分发、定时器、网络I/O等核心功能。本文主要从 ma…...

【Linux】Linux入门(三)权限

目录 前提权限概念whoami指令 Linux权限管理文件访问者的分类&#xff08;人&#xff09;file指令权限信息权限的表示方法 chmod指令 更改权限chown指令 修改文件&#xff0c;文件夹所属用户和用户组 权限掩码umask&#xff08;权限掩码&#xff09; 粘滞位 前提 请先看下面这…...

FluentCMS:基于 ASP.NET Core 和 Blazor 技术构建的开源CMS内容管理系统

推荐一个基于 ASP.NET Core 和 Blazor 技术构建的、功能完善的开源CMS内容管理系统。 01 项目简介 FluentCMS 是一个基于强大的 ASP.NET Core 和创新的 Blazor 技术构建的现代内容管理系统&#xff08;CMS&#xff09;。 FluentCMS 设计为快速、灵活且用户友好&#xff0c;它…...

【阿里云】使用docker安装nginx后可以直接访问

一、创建目录 mkdir -p config/{cert,conf.d} html logs二、上传nginx.conf的配置文件 user nginx; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_connections 1024; }http {include /etc/ngin…...

leetcode-84-柱状图最大的矩形

柱状图中最大的矩形 已解答 算术评级: 7 同步题目状态 困难 相关标签 相关企业 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 1. stack 计算位置在…...

Vue | 搭建第一个Vue项目(安装node,vue-cli)

一.环境搭建&#xff1a; 1.安装node&#xff1a; 进入网站&#xff0c;下载对应版本的node.js Index of /dist/ (nodejs.org) 我这里下载的是&#xff1a; 解压到对应的目录下&#xff1a; 并新建两个文件夹node_cache和node_global&#xff1a; 2.配置环境&#xff1a; …...

Redis 持久化机制:RDB 和 AOF

Redis 持久化机制&#xff1a;RDB 和 AOF Redis 主要提供了两种持久化方式&#xff1a;**RDB&#xff08;Redis Database&#xff09;**和 AOF&#xff08;Append-Only File&#xff09;。它们各自的实现原理、优缺点以及适用场景如下。 1. RDB&#xff08;Redis Database&…...

ToDesk云电脑、顺网云、网易云、易腾云、极云普惠云横测对比:探寻电竞最佳拍档

一、云电脑&#xff1a;电竞新宠崛起 在电竞游戏不断发展的今天&#xff0c;硬件性能成为了决定游戏体验的关键因素。为了追求极致的游戏画面与流畅度&#xff0c;玩家们往往需要投入大量资金购置高性能电脑。然而&#xff0c;云电脑技术的出现&#xff0c;为玩家们提供了一种…...

GPT 结束语设计 以nanogpt为例

GPT 结束语设计 以nanogpt为例 目录 GPT 结束语设计 以nanogpt为例 1、简述 2、分词设计 3、结束语断点 1、简述 在手搓gpt的时候&#xff0c;可能会遇到一些性能问题&#xff0c;即关于是否需要全部输出或者怎么节约资源。 在输出语句被max_new_tokens 限制&#xff0c…...

【达梦数据库】两地三中心环境总结

目录 架构监视器位置异步备库同步频率配置&#xff1a;dmtimer.ini断网测试异地切换过程&回切&#xff1a;允许丢数据模式切换回切 架构 2&#xff08;1主1实时备库&#xff09;1&#xff08;实时备库&#xff09;1(异步备库)&#xff0c;分别为节点1、2、3、4监视器位置 …...

C语言进阶习题【1】指针和数组(4)——指针笔试题3

笔试题5&#xff1a;下面代码输出是是什么&#xff1f; int main() {int a[5][5];int(*p)[4];p a;printf( "%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);return 0; }分析 代码结果 笔试题6&#xff1a;下面代码输出是是什么&#xff1…...

Qt——引用第三方SDK lib库的使用方法

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》 《实用硬件方案设计》 《结构建模设…...

Grafana系列之Dashboard:新增仪表板、新增变量、过滤变量、变量查询、导入仪表板、变量联动、Grafana Alert

概述 关于Prometheus和Grafana的安装&#xff0c;略过。 写在前面 Dashboard&#xff1a;仪表板&#xff0c;可包含多个PanelPanel&#xff1a;面板&#xff0c;Dashboard中的组件 如有写得不对的地方&#xff0c;烦请指出。 新增仪表板 点击右上角的 选择New dashboard…...

管道符、重定向与环境变量

个人博客站—运维鹿: http://www.kervin24.top CSDN博客—做个超努力的小奚&#xff1a; https://blog.csdn.net/qq_52914969?typeblog 一、重定向 将命令和文件结合 标准输入重定向&#xff08;STDIN&#xff0c;文件描述符为0&#xff09;&#xff1a;默认从键盘输入&am…...

如何使用 Redis 作为高效缓存

如何使用 Redis 作为高效缓存 Redis&#xff08;Remote Dictionary Server&#xff09;是一个高性能的 内存存储系统&#xff0c;通常被用作 缓存 来加速数据访问&#xff0c;提高应用的吞吐量和响应速度。本文详细讲解如何使用 Redis 作为高效缓存&#xff0c;包括基本原理、…...

simulink入门学习01

文章目录 1.基本学习方法2.图形环境--模块和参数3.激活菜单---添加到模型3.1输入选项3.2添加到模型3.3更改运算3.4验证要求 4.乘以特定值--Gain模块4.1引入gain模块4.2更改增益参数4.3接入系统4.4大胆尝试 1.基本学习方法 今天突然想要学习这个simulink的相关知识&#xff0c;…...

接上篇基于Alertmanager 配置钉钉告警

Alertmanager 是一个用于处理和管理 Prometheus 警报的开源工具。它负责接收来自 Prometheus 服务器的警报&#xff0c;进行去重、分组、静默、抑制等操作&#xff0c;并通过电子邮件、PagerDuty、Slack 等多种渠道发送通知。 主要功能 去重&#xff1a;合并相同或相似的警报&a…...

【Elasticsearch】index.mapping.source.mode

在Elasticsearch中&#xff0c;当设置 index.mapping.source.mode 为 synthetic 时&#xff0c;Elasticsearch会自动生成和存储源文档的合成版本。这些合成版本的内容取决于你索引的字段和映射定义。具体来说&#xff0c;synthetic 模式会存储以下内容&#xff1a; ### 合成源文…...

GBase8c aes_encrypt和aes_decrypt函数

在数据库中&#xff0c;aes_encrypt和aes_decrypt函数进行加解密时使用的块加密模式。 GBase8c 与 MySQL 的aes_encrypt和aes_decrypt函数区别&#xff1a; 1、GBase8c 中的初始化向量init_vector不能为空 2、MySQL的加密模块block_encryption_mode 为aes-128-ecb&#xff0c;…...

【Unity】ScrollViewContent适配问题(Contentsizefilter不刷新、ContentSizeFilter失效问题)

最近做了一个项目&#xff0c;菜单栏读取数据后自动生成&#xff0c;结果用到了双重布局 父物体 尝试了很多方式&#xff0c;也看过很多大佬的文章&#xff0c;后来自己琢磨了一下&#xff0c;当子物体组件自动生成之后&#xff0c;使用以下以下代码效果会好一些&#xff1a; …...