精华内容
下载资源
问答
  • Tomcat上部署项目后出现访问静态资源(例如:html文件,txt文件)乱码,主要分两种情况。 非Spring MVC项目 Spirng MVC项目 本文章所使用 Tomcat 版本分别为7.0.100和8.5.54 注意: 本文的 html 文件均带了<meta...

    注意: 非本人阅读请跳转到问题分析与解决一栏
    分类分析:

    • 非Spring MVC项目
    • Spirng MVC项目

    本文章所使用 Tomcat 版本分别为7.0.1008.5.54

    注意: 本文的 html 文件均带了<meta charset="utf-8">标签如果没带此标签,解析html和解析txt效果一样!!

    非Spring MVC项目

    在非spring mvc项目中出现访问静态资源乱码,如 txt 文本等,一般都是文件编码为非BOM的UTF-8,将文件编码改为UTF-8 BOM格式即可。具体信息查看下面表格:

    Tomcat文件类型文件编码是否正常访问
    7.0.100htmlUTF-8
    7.0.100htmlUTF-8 BOM
    7.0.100txtUTF-8
    7.0.100txtUTF-8 BOM
    Tomcat文件类型文件编码是否正常访问
    8.5.54htmlUTF-8
    8.5.54htmlUTF-8 BOM
    8.5.54txtUTF-8
    8.5.54txtUTF-8 BOM

    Spirng MVC项目

    如果配置了CharacterEncodingFilter且初始化了参数forceResponseEncodingforceEncodingtrue,此时每次请求静态资源时,CharacterEncodingFilter都会在响应头加上charset=UTF-8。参数为false,或未设置时,情况和上面非Spring MVC情况一致。

    <filter>
            <filter-name>characterEncodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
            <!--初始化forceResponseEncoding为true-->
            <init-param>
                <param-name>forceResponseEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>characterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    

    当设置了forceResponseEncodingforceEncodingtrue时,具体显示信息如下:

    Tomcat文件类型文件编码是否正常访问
    7.0.100htmlUTF-8
    7.0.100htmlUTF-8 BOM
    7.0.100txtUTF-8
    7.0.100txtUTF-8 BOM
    Tomcat文件类型文件编码是否正常访问
    8.5.54htmlUTF-8
    8.5.54htmlUTF-8 BOM
    8.5.54txtUTF-8
    8.5.54txtUTF-8 BOM

    问题分析与解决

    解决乱码只需加入fileEncoding参数,如下所示。(前提: 你的静态资源文件编码必须是UTF-8)

    <servlet>
            <servlet-name>default</servlet-name>
            <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
            <init-param>
                <param-name>debug</param-name>
                <param-value>0</param-value>
            </init-param>
            <init-param>
                <param-name>listings</param-name>
                <param-value>false</param-value>
            </init-param>
            <!--fileEncoding  
            Encoding to be used to read static resources 
            [platform default]-->
            <!--增加下面初始化参数-->
            <init-param>
            	<param-name>fileEncoding</param-name>
            	<param-value>UTF-8</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
    

    影响DefaultServlet解析静态资源编码主要有两个重要的参数fileEncodinguseBomIfPresent

    	/**
         * File encoding to be used when reading static files. If none is specified
         * the platform default is used.
         */
         //读取静态文件时要使用的文件编码,如果未指定,则使用平台默认值。
        protected String fileEncoding = null;
        private transient Charset fileEncodingCharset = null;
    
        /**
         * If a file has a BOM, should that be used in preference to fileEncoding?
         * Will default to {@code BomConfig.TRUE} in {@link #init()}.
         */
         //如果文件有BOM,是否应该优先使用BOM而不是fileEncoding?将在init()中默认设置为BomConfig.TRUE。
        private BomConfig useBomIfPresent = null;
    

    init()源码:

    		//获取初始化参数fileEncoding,若没有则返回null
            fileEncoding = getServletConfig().getInitParameter("fileEncoding");
            if (fileEncoding == null) {
            	//尝试输出fileEncoding得到结果为GBK----用命令行运行测试Charset.defaultCharset()
            	//IDEA或者Eclipse运行出来的结果可能是UTF-8
                fileEncodingCharset = Charset.defaultCharset();
                fileEncoding = fileEncodingCharset.name();
            } else {
                ……
            }
    		//获取初始化参数useBomIfPresent,若没有则返回null
            String useBomIfPresent = getServletConfig().getInitParameter("useBomIfPresent");
            if (useBomIfPresent == null) {
                // Use default
                //使用默认值BomConfig.TRUE
                this.useBomIfPresent = BomConfig.TRUE;
            } else {
                ……
                }
               
    

    枚举类BomConfig源码:

    static enum BomConfig {
            /**
             * BoM is stripped if present and any BoM found used to determine the
             * encoding used to read the resource.
             */
             //如果存在BOM,则会将其剥离,并使用找到的BOM来确定用于读取资源的编码。
            TRUE("true", true, true),
            /**
             * BoM is stripped if present but the configured file encoding is used
             * to read the resource.
             */
             //BOM(如果存在)将被剥离,但配置的文件编码(fileEncoding)用于读取资源。
            FALSE("false", true, false),
    ……
    

    综上,如果未指定fileEncoding初始化参数,Tomcat将使用平台默认编码解析静态资源,而Windows默认编码为GBK,所以解码UTF-8的文件出现乱码。为什么带BOM的文件Tomcat能正常解析,那是因为参数useBomIfPresent的默认值为BomConfig.TRUE,此情况下Tomcat解析到带有BOM的文件时BOM推断出的编码优先级高于fileEncoding属性,比如前三个字节为EF BB BF,Tomcat便知道这个静态资源是UTF-8编码,于是使用UTF-8解码(即使fileEncoding = GBK)。至于为什么html能普遍解析成功,个人猜测是因为<meta charset="utf-8">标签告诉Tomcat此文件是UTF-8编码,所以Tomcat能解析成功。

    关于获取Request域中数据乱码问题

    public void init() {
            messageGET = "GET-----你好";
            messagePOST = "POST-----你好";
        }
     public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
            //request
            //默认request.getCharacterEncoding()返回null
            if (null == request.getCharacterEncoding()) {
                System.out.println("charset == null");
            }
            //tomcat7 ---解码url用ISO-8859-1  ----解决方法->使用tomcat8+或者修改server.xml
            //<Connector connectionTimeout="20000"  (URIEncoding="UTF-8") port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
            //tomcat8 ---解码url用UTF-8
            //GET请求无法提供以下方法修改获取url参数的编码方式
    //        request.setCharacterEncoding("UTF-8");
            String s = request.getParameter("s");
            System.out.println("GET-----s: " + new String(s.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
            //response
            //tomcat响应默认用ISO-8859-1
            //response.getCharacterEncoding()默认返回ISO-8859-1
            System.out.println("response: " + response.getCharacterEncoding());
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.println("<html><body>");
            out.println("<h1>" + messageGET + "</h1>");
            out.println("</body></html>");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //request
            //默认request.getCharacterEncoding()返回null
            if (null == req.getCharacterEncoding()) {
                System.out.println("charset == null");
            }
            //POST请求通过以下方法修改读取请求体数据的编码
            req.setCharacterEncoding("UTF-8");
            if (null != req.getCharacterEncoding()) {
                System.out.println("charset == " + req.getCharacterEncoding());
            }
            //POST读取参数默认用ISO-8859-1
            String s = req.getParameter("s");
            System.out.println("POST------s: " + s);
            //response
            //响应默认用ISO-8859-1
            //response.getCharacterEncoding()默认返回ISO-8859-1
            System.out.println("response: " + resp.getCharacterEncoding());
            resp.setCharacterEncoding("UTF-8");
            resp.setContentType("text/html");
            PrintWriter out = resp.getWriter();
            out.println("<html><body>");
            out.println("<h1>" + messagePOST + "</h1>");
            out.println("</body></html>");
        }
    

    本文章仅个人学习记载,包含主观想法,并不确保正确性。如若有误,恳请指正!

    展开全文
  • Tomcat利用浏览器缓存,在第一次请求时,进行io操作读取文件内容返回给浏览器;第二次请求,如果文件没有修改过,则返回304状态码告知浏览器文件没有修改,可以直接从浏览器缓存中读取。第三次请求,此时文件修改了...

    一、前言

    Tomcat根据Servlet规范实现了Servlet容器,同时也具备HTTP服务器的功能。而Servlet在Tomcat中可以分为三种:普通ServletJspServletDefaultServlet。普通Servlet就是使用者自己根据业务定义的Servlet,后面两个Tomcat已经通过继承HttpServlet实现,JspServlet处理jsp页面,DefaultServlet处理静态资源。

    一个请求到达Tomcat后将由URI映射器根据请求URI进行建模,计算出该请求该发往哪个Host容器的哪个Context容器的哪个Wrapper处理,在路由到Wrapper容器时会通过一定的算法选择不同的Servlet进行处理,最后找不到对应的Servlet处理时就会匹配到DefaultServlet

    使用DefaultServlet需要在web.xml里配置:

    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping> 
    

    二、DefaultServlet响应流程

    DefaultServlet会先获取对应路径的静态资源映射WebResource,然后判断资源文件是否存在,可读,已修改等,最后读取文件内容响应给浏览器。

    如果这个过程完全没有缓存的话,每次都进行io操作,可想这个性能是非常差的。Tomcat利用浏览器缓存,在第一次请求时,进行io操作读取文件内容返回给浏览器;第二次请求,如果文件没有修改过,则返回304状态码告知浏览器文件没有修改,可以直接从浏览器缓存中读取。第三次请求,此时文件修改了,则io读取文件内容返回给浏览器。

    1、DefaultServlet如何判断文件是否修改

    如下摘取DefaultServlet的一段源码:

    org.apache.catalina.servlets.DefaultServlet#serveResource

    当判断获取的资源是文件时,会去判断请求的headerscheckIfHeaders()):

    org.apache.catalina.servlets.DefaultServlet#checkIfHeaders

    有四种判断headers的方法,因为默认Request Headers中有If-Modified-SinceIf-None-Match,所以暂时只看checkIfNoneMatch

    304

    首先判断request的headers中是否有If-None-Match,有则判断headerValueeTag是否相等,相等则说明文件没有修改,返回状态码304。

    protected boolean checkIfNoneMatch(HttpServletRequest request,
            HttpServletResponse response, WebResource resource)
            throws IOException {
    
        String eTag = resource.getETag();
        String headerValue = request.getHeader("If-None-Match");
        if (headerValue != null) {
    
            boolean conditionSatisfied = false;
    
            if (!headerValue.equals("*")) {
    
                StringTokenizer commaTokenizer =
                    new StringTokenizer(headerValue, ",");
    
                // 比较eTag  eTag 是contentLength和lastModified根据一个算法生成的一个字符串
                while (!conditionSatisfied && commaTokenizer.hasMoreTokens()) {
                    String currentToken = commaTokenizer.nextToken();
                    if (currentToken.trim().equals(eTag))
                        // 二者相等,则没有修改
                        conditionSatisfied = true;
                }
    
            } else {
                conditionSatisfied = true;
            }
    
            if (conditionSatisfied) {
                if ( ("GET".equals(request.getMethod()))
                     || ("HEAD".equals(request.getMethod())) ) {
                    // 没有修改,设置status=304,设置ETag给response的headers
                    response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
                    response.setHeader("ETag", eTag);
    
                    return false;
                }
                response.sendError(HttpServletResponse.SC_PRECONDITION_FAILED);
                return false;
            }
        }
        return true;
    }
    

    除了checkIfNoneMatch其他三个方法的逻辑也很简单,核心思路就是通过比较文件的lastModified或者contentLength+lastModified是否和上次的一样,一样就是没有修改,不一样就是修改了。

    整体思路就是,第一次请求,io读取文件内容,同时将EtagLast-Modified设置到response里返回给浏览器,下次请求浏览器在请求头里回传If-Modified-SinceIf-None-Match(内容上If-Modified-Since对应Last-ModifiedIf-None-Match对应Etag),DefaultServlet响应时判断这两个参数和资源文件当前的值是否相等。

    Tomcat利用浏览器缓存响应静态资源

    2、Tomcat对静态资源加缓存

    Tomcat对静态资源做了一层封装WebResource(接口),WebResource对文件基础信息的获取进行了包装再调用,同时对io操作进行了封装,方便直接获取文件内容。Tomcat对WebResource做了一层缓存(包括lastModifiedcontentLengthcanReadisFile等基础信息以及文件内容),默认缓存失效时长为5秒。获取WebResource时先尝试获取CachedResourceCachedResource为空或者已经失效则获取FileResourceFileResource存在则加缓存CachedResource,一个常规的缓存获取和更新操作。(CachedResourceFileResource都实现了接口WebResource

    三、后台线程定时清理资源缓存

    Tomcat中有一个后台线程(ContainerBackgroundProcessor)默认每10秒判断一次静态资源的缓存是否失效,失效则删除;

    每次请求时,如果获取到的是缓存,也会判断缓存是否失效,失效则清除缓存获取最新资源,最新资源存在则加缓存。

    四、Q&A

    1、浏览器已经缓存了静态资源的内容,为何Tomcat还要加一层缓存?

    不止一个浏览器访问Tomcat。在静态资源没有修改的情况下,一个浏览器多次请求建立了浏览器缓存,另一个浏览器第一次请求没有浏览器缓存,但是Tomcat有缓存且没有失效,则可以直接获取文件内容,不需要进行文件的io操作。

    2、Tomcat中静态资源的缓存失效时间为5秒,而后台线程定时清理是10秒,岂不是每次都被清理掉?

    (1)清理缓存的操作不只有后台线程,在每次请求时,如果获取的缓存不为空,也会去判断缓存是否失效。

    (2)后台线程的运行频率(backgroundProcessorDelay=“10” 单位秒)可以配置,静态资源的缓存失效时间(cacheTtl="5000"单位毫秒)也可以配置。

    3、获取资源时,缓存没有失效,而资源已经修改,是否会重新读取资源内容?

    虽然磁盘上的文件已经修改,但是缓存获取到的信息判断文件没有修改,所以不会重新读取资源内容,这样就导致浏览器没有及时获取最新的资源。默认失效时间为5秒比较合理,不宜将该时间调大。

    注:篇幅有限,涉及到的Tomcat源码细节只展示了少部分,或者一句话带过,以后会对Tomcat的实现原理进行详细研究讨论。如有疑惑,请留言!

    Tomcat源码详细注释链接(非推广,持续更新):https://gitee.com/stefanpy/tomcat-source-code-learning

    展开全文
  • 当资源是文件时,检查相关头部,其中checkIfHeaders方法中就对Etag和lastModified头进行检查:if (resource.isFile()) {// Checking If headersincluded = (request.getAttribute(RequestDisp...

    WebResource resource = resources.getResource(path);

    当资源是文件时,检查相关头部,其中checkIfHeaders方法中就对Etag和lastModified头进行检查:

    if (resource.isFile()) {

    // Checking If headers

    included = (request.getAttribute(

    RequestDispatcher.INCLUDE_CONTEXT_PATH) != null);

    if (!included && !isError && !checkIfHeaders(request, response, resource)) {

    return;

    }

    }

    protected boolean checkIfHeaders(HttpServletRequest request,

    HttpServletResponse response,

    WebResource resource)

    throws IOException {

    return checkIfMatch(request, response, resource)

    && checkIfModifiedSince(request, response, resource)

    && checkIfNoneMatch(request, response, resource)

    && checkIfUnmodifiedSince(request, response, resource);

    }可以看到checkIfHeaders方法检查了4个头:If-Match、If-Modified-Since、If-None-Match、If-Unmodified-Since;

    其中如果设置If-None-Match的话,If-Modified-Since会忽略,这两个头分别对应于Etag和Last-Modified,如果没有改变,返回304 Not Modified,对应的方法返回false;

    而If-Match头和If-Unmodified-Since头分别表示Etag和last-modified值未改变应该返回文件数据(200 OK),对应的方法返回true,如果不相等返回状态码412,方法返回false;

    PS:If-Modified-Since和If-None-Match方法会设置last-modified和Etag响应头;

    由此可见,只要这个4个方法任何一个返回了false,都直接返回,不返回文件数据,有两种可能:304, 412;

    如果上一步没有return,那么应当返回文件数据:

    获取资源对象的eTag和lastModifiedHttp并设置响应的头;

    String eTag = null;

    String lastModifiedHttp = null;

    if (resource.isFile() && !isError) {

    eTag = resource.getETag();

    lastModifiedHttp = resource.getLastModifiedHttp();

    }

    展开全文
  • 5 、此时可以测试看看 先是html页面 在看看图片 显然,nginx设置下静态页面和图片是可以访问成功的,下面开始tomcat访问设置 第二种方法:tomcat 1、查看jdk版本 java -version openjdk version "1.8.0_65" OpenJDK...

    生产环境下,有时候需要访问图片,正常需要应用ftp、nginx等配套使用,但是有时候为了简化,可以用以下的两种简单的访问,说实话,就是为了偷懒,但是效果是能有的,这就行了,所以今天做这个简化版的方便大家应急之用。

    第一种方法:nginx配置下

    1、创建文件路径:

    [root@localhost /]# mkdir /data/soft/

    [root@localhost ~]# cd /data/soft/

    [root@localhost soft]# mkdir html images

    2、在images目录下面放入图片

    [root@localhost soft]# cd images/

    [root@localhost images]# ll

    总用量 80

    -rw-r--r--. 1 root root 9503 4月 25 17:06 thPZFULFJN.jpg

    -rw-r--r--. 1 root root 16083 4月 25 17:06 thR2C5VCMZ.jpg

    -rw-r--r--. 1 root root 12218 4月 25 17:06 thRG3YX53T.jpg

    -rw-r--r--. 1 root root 15048 4月 25 17:06 thSUF51VTR.jpg

    -rw-r--r--. 1 root root 21799 4月 25 17:06 thVWSLF8ZE.jpg

    3、在html目录下面放入一个测试文件

    [root@localhost html]# cat index.html

    this is test page !!!!

    4、安装nginx,并启动

    选用yum还是编译看自己喜好,我选择编译,自己制定安装模块

    解压pcre-8.34.tar.gz zlib-1.2.8.tar.gz openssl-1.0.1g.tar.gz三个包并安装

    tar -zxvf pcre-8.34.tar.gz

    cd pcre-8.34

    ./configure && make && make install

    tar -zxvf zlib-1.2.8.tar.gz

    cd zlib-1.2.8

    ./configure && make && make install

    tar -zxvf openssl-1.0.1g.tar.gz

    cd openssl-1.0.1g

    ./config && make && make install

    安装Nginx

    tar -zxvf nginx-1.9.0.tar.gz

    cd nginx-1.9.0

    #./configure --prefix=/data/soft/nginx \

    --user=www \

    --group=www \

    --with-mail \

    --with-mail_ssl_module \

    --with-http_ssl_module \

    --with-http_flv_module \

    --with-http_dav_module \

    --with-http_sub_module \

    --with-http_spdy_module \

    --with-http_realip_module \

    --with-http_addition_module \

    --with-http_gzip_static_module \

    --with-http_stub_status_module \

    --with-pcre=/data/src/pcre-8.34 \

    --with-zlib=/data/src/zlib-1.2.8 \

    --with-openssl=/data/src/openssl-1.0.1g

    编译并安装

    make && make install

    groupadd www

    useradd -g www www

    修改nginx配置文件

    [root@localhost nginx]# vim conf/nginx.conf

    server {

    listen 80;

    server_name localhost;

    #charset koi8-r;

    #access_log logs/host.access.log main;

    location ~ .*\.(gif|jpg|jpeg|png)$ {

    expires 24h;

    root /data/soft/images/;#指定图片存放路径

    access_log /data/soft/nginx/logs/images.log;#日志存放路径

    proxy_store on;

    proxy_store_access user:rw group:rw all:rw;

    proxy_temp_path /data/soft/images/;#图片访问路径

    proxy_redirect off;

    proxy_set_header Host 127.0.0.1;

    client_max_body_size 10m;

    client_body_buffer_size 1280k;

    proxy_connect_timeout 900;

    proxy_send_timeout 900;

    proxy_read_timeout 900;

    proxy_buffer_size 40k;

    proxy_buffers 40 320k;

    proxy_busy_buffers_size 640k;

    proxy_temp_file_write_size 640k;

    if ( !-e $request_filename)

    {

    proxy_pass http://127.0.0.1;#默认80端口

    }

    }

    location / {

    root /data//soft/html; #html访问路径

    index index.html index2.htm; #html文件名称

    }

    }

    error_page 404 /404.html;

    5 、此时可以测试看看

    先是html页面

    3995166

    d844833760427d3de1dd09c8366758ff.png

    在看看图片

    1fc1715168a1b8a46626916fcf344d25.png

    显然,nginx设置下静态页面和图片是可以访问成功的,下面开始tomcat访问设置

    第二种方法:tomcat

    1、查看jdk版本

    java -version

    openjdk version "1.8.0_65"

    OpenJDK Runtime Environment (build 1.8.0_65-b17)

    OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)

    2、解压tomcat并启动

    tar -xvf apache-tomcat-8.5.30.tar.gz

    [root@localhost tomcat]# sh bin/startup.sh

    3、本地测试能不能访问

    6659e0235ca817bbed9e40a39dd2e164.png

    4、 上面正常,那么把页面文件夹放到wepapps下面去,注意,html文件夹里有inde.html页面的。

    [root@localhost soft]# cp -rp html/ /data/soft/tomcat/webapps/

    测试访问html页面

    d0dc95a21b2c8d01d78c29700dcf4e5e.png

    继续把图片文件夹放到wepapps下面去,images下面是有图片的。

    [root@localhost images]# cp -rp /data/soft/images/ /data/soft/tomcat/webapps/

    直接在浏览器上访问如下

    a2eff1c8a64a53eb2b1fa1168ce09ff0.png

    总结:这样,简单的图片访问和html页面访问就可以使用了,非常方便,这两个方法非常适用内网环境,对于运维来说是个不错的选择。

    展开全文
  • 一、什么是动静分离本文的动静分离主要是通过nginx+tomcat来实现,其中nginx处理图片、html等静态的文件,tomcat处理jsp、do等动态文件。二、结构图 三、安装1、安装、配置nginx下载nginx与pcre(如果需要使用正则,...
  • 对于静态资源,Tomcat最后会交由一个叫做DefaultServlet的类来处理,DefaultServlet处理静态资源的过程就是Tomcat响应静态资源。 可能你习惯性的打开Tomcat,在部署了一个应用之后,就开始查看其运行结果,或者更多...
  • 之前我有一台Tomcat服务器兼做文件下载的功能,后来我在上面部署了一个NodeJS来提供静态文件的下载,然后经过压力测试发现NodeJS在静态文件的服务能力上强于Tomcat很多,主要体现在支持的并发连接数多,...
  • 一、认识访问静态资源与访问动态资源的区别  静态资源:指存储在硬盘内的数据,固定的数据,不需要计算的数据。  如:图片、字体、js文件、css... Tomcat应用服务器是用来处理Servlet容器和JSP的,虽然它也可以处
  • 而所有请求就包括了静态资源, 今天我们就从源码层面上看看Tomcat静态资源处理过程: 1. DefaultServlet DefaultServlet 就是Tomcat中负责处理静态资源的Servlet, service() 方法是请求处理入口, 可以看到, 这里所有...
  • Apache、IIS、Nginx等绝大多数web服务器,都不允许静态文件响应POST请求,否则会返回“HTTP/1.1 405 Method not allowed”错误。例1:用Linux下的curl命令发送POST请求给Apache服务器上的HTML静态页[root@new-host ~...
  • Tomcat

    2021-03-08 14:27:05
    一、什么是Tomcat Tomcat 是由 Apache 软件基金会下属的 Jakarta 项目开发的一个 Servlet 容器。是开源的轻量级Web应用服务器。 二、tomcat结构目录 ①bin:启动和关闭tomcat的bat文件。 startup.bat , shutdown....
  • Tomcat8.5出现乱码的原因多数是Tomcat配置的问题。我们只需改下Tomcat的配置就行。 首先打开Tomcat的conf文件夹,具体位置在你们安装的路径下面。 选择server.xml编辑它,找到如下内容,并在8443后面添加 ...
  • Servlet模拟ServletTomcat安装配置问题:localhost:8080打开失败Tomcat目录介绍模拟开发程序本质的解释动态资源开发 WEB-INF Servelet 之前大概介绍了HTML+CSS和JavaScript,但是只能解决的是界面问题,当时虽然...
  • requestrequest作用域

    2021-05-12 22:34:46
    request对象可以获取请求携带的数据,分别获取请求行、请求头、请求体中的数据。 1、什么是HttpServletRequest ​ HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求中的所有...
  • 文章目录一、web相关概念回顾1.1 软件架构1.2 资源分类1.3 网络通信三要素二、web服务器软件三、Servlet:server applet四、IDEA与tomcat的相关配置 一、web相关概念回顾 1.1 软件架构 C/S:客户端/服务器端 B/S:...
  • Tomcat_Servlet

    2021-01-18 09:57:40
    void service(ServletRequest request, ServletResponse response); 第一个带有Servlet的WebApp WebAp的目录结构: 最重要的:WEB-INFO文件夹、以及html文件夹、css文件夹、js文件夹等文件夹 WEB-INF文件夹里面有: ...
  • Tomcat漏洞总结复现

    2021-09-24 20:53:24
    Tomcat漏洞总结复现简介 简介
  • 在k8s部署tomcat

    千次阅读 2020-12-21 17:35:29
    小试牛刀准备编排文件tomcat.yaml:(包含两部分,副本rc和service配置可为两个文件,不过我们此处合并为一个)#rc副本相关apiVersion:extensions/v1beta1#表示Deployment调度配置kind:Deploymentmetadata:#调度对象的...
  • Tomcat服务部署和优化

    2021-10-18 22:18:30
    一、Tomcat介绍 1.1 什么是Tomcat 1.2 Tomcat的构成组件 1.2.1 Java Servlet 介绍 1.3四个子容器的作用分别是: 1.4 Tomcat请求过程 二、Tomcat服务部署 2.1 Tomcat服务部署的步骤(理论) 1.关闭防火墙,将...
  • 具体表现为:Response to preflight request doesn‘t pass access control check: No 'Access-Control-Allow-Origin' 分析 这个是tomcat项目的接口,先从后端分析处理,通过修改tomcat的配置达到跨域解决方案。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,644
精华内容 23,457
关键字:

tomcat静态获取request