JSP页面输出的XML报文无法正常在chrome浏览器中显示

本文介绍了一种在Chrome浏览器中无法正确显示由JSP页面输出的XML文件的问题,并提供了具体的解决方案。通过调整JSP页面中contentType设置的位置,成功消除了XML文件前的空行,使XML文件能在Chrome中正常展示。

今天遇到一个比较奇怪的情况,生产上一个非常简单的JSP页面报错了。在本地上测试了很多遍都ok,但是在生产上不行。而且在预生产又没有对应测试环境,因此解决起来提交头疼,因为改过的东西只能拿到生产环境测试,而生产上又不能拿来测试玩。

 

JSP页面输出的XML报文在IE中正常显示,但是在chrome中不能正常显示,报如下错误:


使用chrome浏览器进行调试,发现在输出的xml报文上方有空行,如下:

正是由于有空行,XML报文才无法正常在chrome浏览器显示。但是JSP页面输出只是字符串,为什么会有空行呢? 不知道

 

经过测试只要改变JSP页面的排版就能让Chrome浏览器正常显示了,只需要将如下这行代码放到jsp页面的第一行部分,就OK了

 

response.setContentType("text/XML");

 

放到第二行,在IE中能够正常显示XML报文,但是在Chrome浏览器中不能正常显示。到此问题解决了。

再使用chrome查看,发现空行消失了,报文也能正常显示了,如下:

 

# 企业Web应用服务器Tomcat相关技术解析 ## 一、HTTP协议解析 HTTP(HyperText Transfer Protocol,超文本传输协议)是Web通信的基础协议,定义了客户端与服务器之间的数据交互规则。 ### 1. 核心特点 - **无状态**:协议本身不保存客户端状态,每次请求都是独立的(需通过Cookie、Session等机制实现状态跟踪)。 - **基于请求-响应模式**:客户端发送请求,服务器返回响应。 - **应用层协议**:运行在TCP/IP协议之上,默认端口为80(HTTPS为443)。 ### 2. 请求与响应结构 - **请求报文**: - 请求行:包含方法(GET/POST等)、URL、协议版本 - 请求头:Host、User-Agent、Cookie等键值对 - 请求体:POST等方法传递的参数数据(如表单数据) - **响应报文**: - 状态行:协议版本、状态码(200成功/404未找到/500服务器错误等) - 响应头:Content-Type、Set-Cookie、Server等 - 响应体:返回的实际数据(HTML/JSON/图片等) ## 二、B/S结构详解 B/S(Browser/Server,浏览器/服务器)结构是一种基于网络的软件架构模式。 ### 1. 核心组成 - **浏览器(客户端)**:负责用户交互和数据展示(如Chrome、Edge),无需安装专用软件。 - **Web服务器**:处理客户端请求,返回响应数据(如Tomcat、Nginx)。 - **数据库服务器**:存储和管理应用数据(如MySQL、Oracle)。 ### 2. 工作流程 1. 客户端通过浏览器发送HTTP请求到Web服务器。 2. Web服务器接收请求并进行处理(如调用后端程序)。 3. 如需数据,Web服务器与数据库服务器交互获取数据。 4. Web服务器将处理结果封装为HTTP响应返回浏览器。 5. 浏览器解析响应并展示给用户。 ### 3. 优势 - 无需安装客户端软件,降低维护成本。 - 跨平台性强,支持不同操作系统和设备。 - 升级集中在服务器端,便于统一管理。 ## 三、Web架构体系 Web架构是支撑Web应用运行的技术框架,常见分层架构如下: ### 1. 四层架构模型 - **表现层**:负责用户界面展示(HTML/CSS/JS、Vue/React等前端框架)。 - **应用层**:处理业务逻辑(Java Servlet、Spring Boot等后端框架)。 - **数据访问层**:负责与数据库交互(MyBatis、JPA等持久层框架)。 - **数据存储层**:存储应用数据(关系型数据库、NoSQL数据库等)。 ### 2. 关键组件 - **Web服务器**:处理静态资源(HTML/CSS/JS)和反向代理(如Nginx)。 - **应用服务器**:运行动态业务逻辑(如Tomcat、JBoss)。 - **负载均衡器**:分发请求到多个服务器,提高可用性(如Nginx、F5)。 - **缓存服务器**:减少数据库访问压力(如Redis、Memcached)。 ## 四、Tomcat功能及文件结构 Tomcat是Apache基金会开发的开源Servlet容器,主要用于运行Java Web应用(JSP、Servlet等)。 ### 1. 核心功能 - 作为Servlet容器,解析和运行Servlet、JSP程序。 - 提供HTTP服务,处理客户端的HTTP请求与响应。 - 支持虚拟主机配置,可部署多个Web应用。 - 集成日志系统,记录访问和错误信息。 - 支持SSL/TLS加密,实现HTTPS通信。 ### 2. 文件结构组成 ``` tomcat/ ├── bin/ # 可执行文件(启动/关闭脚本) │ ├── startup.sh # Linux启动脚本 │ ├── shutdown.bat # Windows关闭脚本 │ └── catalina.sh # 核心控制脚本 ├── conf/ # 配置文件 │ ├── server.xml # 核心配置(端口、虚拟主机等) │ ├── web.xml # Web应用默认配置 │ └── tomcat-users.xml # 管理用户配置 ├── lib/ # Tomcat依赖的jar包 ├── logs/ # 日志文件(访问日志、错误日志) ├── webapps/ # 部署的Web应用目录 │ ├── ROOT/ # 默认应用(访问IP:端口时直接访问) │ └── 应用目录/ # 自定义Web应用(包含WEB-INF等) ├── work/ # JSP编译后的class文件 └── temp/ # 临时文件 ``` ### 3. 关键配置说明 - **server.xml**:配置端口(默认8080)、连接器(Connector)、虚拟主机(Host)等。 - **web.xml**:定义Servlet映射、过滤器、MIME类型等全局配置。 ## 五、结合反向代理实现Tomcat部署 反向代理(如Nginx)可作为Tomcat的前置服务器,实现负载均衡、静态资源处理等功能,提升系统性能。 ### 1. 部署架构 ``` 客户端 → Nginx(反向代理/负载均衡) → 多个Tomcat实例 → 数据库 ``` ### 2. 部署步骤 #### (1)安装配置Nginx 1. 安装Nginx并修改配置文件(`nginx.conf`): ```nginx http { upstream tomcat_servers { server 192.168.1.101:8080; # Tomcat实例1 server 192.168.1.102:8080; # Tomcat实例2 } server { listen 80; server_name example.com; # 静态资源交给Nginx处理 location ~ .*\.(html|css|js|jpg)$ { root /usr/local/nginx/static; expires 30d; # 缓存30天 } # 动态请求转发到Tomcat集群 location / { proxy_pass http://tomcat_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } ``` #### (2)配置Tomcat集群 1. 在多台服务器安装Tomcat,确保应用部署一致。 2. 修改`server.xml`,避免端口冲突(如关闭AJP端口,调整SHUTDOWN端口)。 3. 如需Session共享,可配置Redis存储Session: ```xml <Valve className="org.apache.catalina.session.PersistentValve"/> <Manager className="org.apache.catalina.session.RedisSessionManager" host="redis-server-ip" port="6379" database="0"/> ``` #### (3)启动服务并验证 1. 启动Nginx和所有Tomcat实例。 2. 通过`http://example.com`访问应用,验证负载均衡和静态资源加载是否正常。 ### 3. 优势 - Nginx处理静态资源更高效,减轻Tomcat压力。 - 负载均衡提高系统并发能力和可用性(单台Tomcat故障不影响服务)。 - 便于横向扩展(新增Tomcat实例只需在Nginx配置中添加)。 通过以上架构,可构建高性能、高可用的企业级Web应用系统,满足业务增长需求。整理格式
最新发布
07-31
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值