如何处理java高并发问题---之页面静态化
2017-08-22 10:56
411 查看
解决java中的高并发问题可以从硬件软件等方面入手,硬件如:服务器;软件如:系统缓存、页面静态化等。这里我写的是页面静态化的简单小例子。之所以将这个小例子记录下来是因为之前对页面静态化有误解,原以为静态化页面就是在项目编写中前端页面利用html就可以。但是在参考网上资料后发现理解误差很大,以下是我在参考了一些网上资料后写的实现页面静态化的简单实例:
项目结构图
1.业务处理类Servlet.java(这里为了方便采用的servlet,可根据项目需求在其他的架构中使用其中的业务逻辑)
2.创建静态页面类CreateStaticHTMLPage.java
3.web.xml配置文件
4.首页面index.jsp
5.跳转后的结果页面bookRead.jsp
以上代码是实例的所有代码,启动项目后点击提交按钮后,会看到跳转到一个html页面
项目结构图
1.业务处理类Servlet.java(这里为了方便采用的servlet,可根据项目需求在其他的架构中使用其中的业务逻辑)
package com.servlet; import java.io.File; 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 Servlet extends HttpServlet{ public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{ System.out.println("chapterId=====//===="+request.getParameter("chapterId")); if(request.getParameter("chapterId")!= null){ String chapterFileName = "bookChapterRead_"+request.getParameter("chapterId")+".html"; String chapterFilePath = getServletContext().getRealPath("/") + chapterFileName; System.out.println("chapterFilePath===//============="+chapterFilePath); File chapterFile = new File(chapterFilePath); System.out.println("chapterFile===//============="+chapterFile); if(chapterFile.exists()){//如果有这个文件就告诉浏览器转向 System.out.println("有此静态页面======"); response.sendRedirect(chapterFileName); return; } System.out.println("没有此静态页面======"); //======存放业务处理后得到的信息 request.setAttribute("novelChapter", "测试单节信息"); request.setAttribute("lastPageId", "lastPageId111"); request.setAttribute("nextPageId", "nextPageId222"); //============ System.out.println("getServletContext()==========//========="+getServletContext()); new CreateStaticHTMLPage().createStaticHTMLPage(request, response, getServletContext(), chapterFileName, chapterFilePath, "/bookRead.jsp"); } } }
2.创建静态页面类CreateStaticHTMLPage.java
package com.servlet; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; /** * 创建HTML静态页面 * 功能:创建HTML静态页面 */ public class CreateStaticHTMLPage { /** * 生成静态HTML页面的方法 * @param request 请求对象 * @param response 响应对象 * @param servletContext Servlet上下文 * @param fileName 文件名称 * @param fileFullPath 文件完整路径 * @param jspPath 需要生成静态文件的JSP路径(相对即可) * @throws IOException * @throws ServletException */ public void createStaticHTMLPage(HttpServletRequest request, HttpServletResponse response,ServletContext servletContext,String fileName,String fileFullPath,String jspPath) throws ServletException, IOException{ response.setContentType("text/html;charset=utf-8");//设置HTML结果流编码(即HTML文件编码) RequestDispatcher rd = servletContext.getRequestDispatcher(jspPath);//得到JSP资源 final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();//用于从ServletOutputStream中接收资源 final ServletOutputStream servletOuputStream = new ServletOutputStream(){//用于从HttpServletResponse中接收资源 public void write(byte[] b, int off,int len){ byteArrayOutputStream.write(b, off, len); } public void write(int b){ byteArrayOutputStream.write(b); } }; final PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(byteArrayOutputStream));//把转换字节流转换成字符流 HttpServletResponse httpServletResponse = new HttpServletResponseWrapper(response){//用于从response获取结果流资源(重写了两个方法) public ServletOutputStream getOutputStream(){ return servletOuputStream; } public PrintWriter getWriter(){ return printWriter; } }; rd.include(request, httpServletResponse);//发送结果流 printWriter.flush();//刷新缓冲区,把缓冲区的数据输出 FileOutputStream fileOutputStream = new FileOutputStream(fileFullPath); byteArrayOutputStream.writeTo(fileOutputStream);//把byteArrayOuputStream中的资源全部写入到fileOuputStream中 fileOutputStream.close();//关闭输出流,并释放相关资源 response.sendRedirect(fileName);//发送指定文件流到客户端 } }
3.web.xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>htmlServlet</servlet-name> <servlet-class>com.servlet.Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>htmlServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
4.首页面index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>首页面</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="kanName.do"> <input name="chapterId" type="text" value="122"/> <input name="userName" type="text" value="张庆伟"/> <input type="submit" value="提交"/> </form> </body> </html>
5.跳转后的结果页面bookRead.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <% String lastPageId=(String)request.getAttribute("lastPageId"); %> <base href="<%=basePath%>"> <title>book页</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> 这是跳转页面: <%=lastPageId %> </body> </html>
以上代码是实例的所有代码,启动项目后点击提交按钮后,会看到跳转到一个html页面
相关文章推荐
- 如何处理java高并发问题---之页面静态化
- 如何处理java高并发问题---之页面静态化
- javawebday57(图书在页面静态化 处理html 直接存储的乱码问题)
- 如何处理Java中的高并发问题
- 如何处理多页面重定向到同一页面后的返回问题
- 如何处理404页面的问题
- JAVA笔记3--如何Request,如何处理中文获取乱码问题
- IE6如何处理因页面大小改变而引起的报表问题 IE6兼容报表
- java 虚拟机与并发处理几个问题简要(二)
- java并发编程学习:如何等待多个线程执行完成后再继续后续处理(synchronized、join、FutureTask、CyclicBarrier)
- 电子商务中如何处理高访问高并发的问题-讲解一
- JAVA中如何处理中文的全角和半角问题- -
- Java如何处理多线程的数据同步问题
- 谈论高并发(十二)分析java.util.concurrent.atomic.AtomicStampedReference看看如何解决源代码CAS的ABA问题
- Java如何处理多线程的数据同步问题
- 如何处理web页面中下拉框一直显示在最前问题
- java处理高并发高负载类网站问题
- java web开发 高并发问题处理【总结】
- java 301处理页面存在和不存在的时候的问题
- java与flex交互时的乱码问题如何处理