java – 正确编写servlet响应中的HTML页面
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 正确编写servlet响应中的HTML页面,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2278字,纯文字阅读大概需要4分钟。
内容图文
![java – 正确编写servlet响应中的HTML页面](/upload/InfoBanner/zyjiaocheng/802/2e48a1e965004b0bba7f488f9a87e05b.jpg)
我在http://ip:8080/simple下部署了一个servlet
servlet位于包a.b.c下
我在名为Test.html的a.b.resources中有一个html页面.
html有一个图像的img标签.
在我做的servlet中:
htmlFile = MyServlet.class.getResourceAsStream("/a/b/resources/Test.html");
resp.setContentType("text/html");
PrintWriter writer = resp.getWriter();
byte[] bytes=new byte[htmlFile.available()];
htmlFile.read(bytes);
resp.setContentLength(bytes.length);
writer.print(new String(bytes));
writer.flush();
writer.close();
html页面出现在浏览器上,但在图像的位置,我看到它的alt描述.
我试过了:
<img alt="Company A" src="./CompanyLogo.jpg">
<img alt="Company A" src="/a/b/resources/CompanyLogo.jpg">
<img alt="Company A" src="CompanyLogo.jpg">
但这些都不起作用.
jpg图像位于/ a / b / c / resources下,即与HTML页面位于同一目录中.
我正在使用嵌入式Jetty.
我在这里乱搞什么?
解决方法:
浏览器正在尝试解析与当前请求URI相关的资源(如浏览器地址栏中所示).当然,您的公共Web内容中不存在这些资源,因为您似乎已将它们放在类路径中.
为了解决这个问题,你真的需要解析HTML并更改< a>,< img>,< base>,< link>,< script>的所有域相对src和/或href属性;,< iframe>等元素让它们指向一个servlet,它将那些资源从类路径流式传输到HTTP响应.
这有点工作,但Jsoup让它变得简单.这是一个假设您的servlet映射到/ proxy / *的URL模式的示例.
String proxyURL = request.getContextPath() + "/proxy/";
InputStream input = MyServlet.class.getResourceAsStream("/a/b/resources" + request.getPathInfo());
if (request.getRequestURI().endsWith(".html")) { // A HTML page is been requested.
Document document = Jsoup.parse(input, "UTF-8", null);
for (Element element : document.select("[href]")) {
element.attr("href", proxyURL + element.attr("href"));
}
for (Element element : document.select("[src]")) {
element.attr("src", proxyURL + element.attr("src"));
}
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(document.html());
}
else { // Other resources like images, etc which have been proxied to this servlet.
response.setContentType(getServletContext().getMimeType(request.getPathInfo()));
OutputStream output = response.getOutputStream();
byte[] buffer = new byte[8192];
for (int length = 0; (length = input.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}
}
input.close();
在http://yourdomain:yourport/contextname/proxy/test.html之前打开它.
内容总结
以上是互联网集市为您收集整理的java – 正确编写servlet响应中的HTML页面全部内容,希望文章能够帮你解决java – 正确编写servlet响应中的HTML页面所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。