zoukankan      html  css  js  c++  java
  • 如何处理java高并发问题---之页面静态化

    转载:如何处理java高并发问题---之页面静态化

    解决java中的高并发问题可以从硬件软件等方面入手,硬件如:服务器;软件如:系统缓存、页面静态化等。这里我写的是页面静态化的简单小例子。之所以将这个小例子记录下来是因为之前对页面静态化有误解,原以为静态化页面就是在项目编写中前端页面利用html就可以。但是在参考网上资料后发现理解误差很大,以下是我在参考了一些网上资料后写的实现页面静态化的简单实例:

    项目结构图

    1.业务处理类Servlet.java(这里为了方便采用的servlet,可根据项目需求在其他的架构中使用其中的业务逻辑)

    [java] view plain copy
     
    1. package com.servlet;  
    2.   
    3. import java.io.File;  
    4. import java.io.IOException;  
    5.   
    6. import javax.servlet.ServletException;  
    7. import javax.servlet.http.HttpServlet;  
    8. import javax.servlet.http.HttpServletRequest;  
    9. import javax.servlet.http.HttpServletResponse;  
    10.   
    11. public class Servlet extends HttpServlet{  
    12.       
    13.     public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{  
    14.         System.out.println("chapterId=====//===="+request.getParameter("chapterId"));  
    15.         if(request.getParameter("chapterId")!= null){  
    16.             String chapterFileName = "bookChapterRead_"+request.getParameter("chapterId")+".html";    
    17.             String chapterFilePath = getServletContext().getRealPath("/") + chapterFileName;   
    18.             System.out.println("chapterFilePath===//============="+chapterFilePath);  
    19.             File chapterFile = new File(chapterFilePath);  
    20.             System.out.println("chapterFile===//============="+chapterFile);  
    21.             if(chapterFile.exists()){//如果有这个文件就告诉浏览器转向  
    22.                 System.out.println("有此静态页面======");  
    23.                 response.sendRedirect(chapterFileName);  
    24.                 return;  
    25.               }  
    26.             System.out.println("没有此静态页面======");  
    27.             //======存放业务处理后得到的信息  
    28.             request.setAttribute("novelChapter", "测试单节信息");  
    29.             request.setAttribute("lastPageId", "lastPageId111");  
    30.             request.setAttribute("nextPageId", "nextPageId222");  
    31.             //============  
    32.             System.out.println("getServletContext()==========//========="+getServletContext());  
    33.             new CreateStaticHTMLPage().createStaticHTMLPage(request, response, getServletContext(),  
    34.                     chapterFileName, chapterFilePath, "/bookRead.jsp");  
    35.         }  
    36.           
    37.     }  
    38.   
    39. }  

    2.创建静态页面类CreateStaticHTMLPage.java
    [java] view plain copy
     
    1. package com.servlet;  
    2.   
    3. import java.io.ByteArrayOutputStream;  
    4. import java.io.FileOutputStream;  
    5. import java.io.IOException;  
    6. import java.io.OutputStreamWriter;  
    7. import java.io.PrintWriter;  
    8.   
    9. import javax.servlet.RequestDispatcher;  
    10. import javax.servlet.ServletContext;  
    11. import javax.servlet.ServletException;  
    12. import javax.servlet.ServletOutputStream;  
    13. import javax.servlet.http.HttpServletRequest;  
    14. import javax.servlet.http.HttpServletResponse;  
    15. import javax.servlet.http.HttpServletResponseWrapper;  
    16.   
    17. /**  
    18. * 创建HTML静态页面  
    19. * 功能:创建HTML静态页面  
    20. */    
    21. public class CreateStaticHTMLPage {  
    22.      /** 
    23.      * 生成静态HTML页面的方法  
    24.      * @param request 请求对象 
    25.      * @param response 响应对象 
    26.      * @param servletContext Servlet上下文 
    27.      * @param fileName 文件名称 
    28.      * @param fileFullPath 文件完整路径 
    29.      * @param jspPath 需要生成静态文件的JSP路径(相对即可) 
    30.      * @throws IOException 
    31.      * @throws ServletException 
    32.      */  
    33.     public void createStaticHTMLPage(HttpServletRequest request, HttpServletResponse response,ServletContext servletContext,String fileName,String fileFullPath,String jspPath) throws ServletException, IOException{    
    34.         response.setContentType("text/html;charset=utf-8");//设置HTML结果流编码(即HTML文件编码)     
    35.         RequestDispatcher rd = servletContext.getRequestDispatcher(jspPath);//得到JSP资源  
    36.         final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();//用于从ServletOutputStream中接收资源     
    37.         final ServletOutputStream servletOuputStream = new ServletOutputStream(){//用于从HttpServletResponse中接收资源     
    38.             public void write(byte[] b, int off,int len){  
    39.                 byteArrayOutputStream.write(b, off, len);    
    40.             }    
    41.             public void write(int b){  
    42.                 byteArrayOutputStream.write(b);  
    43.             }    
    44.         };    
    45.         final PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(byteArrayOutputStream));//把转换字节流转换成字符流     
    46.         HttpServletResponse httpServletResponse = new HttpServletResponseWrapper(response){//用于从response获取结果流资源(重写了两个方法)     
    47.             public ServletOutputStream getOutputStream(){  
    48.                 return servletOuputStream;    
    49.             }  
    50.             public PrintWriter getWriter(){  
    51.                 return printWriter;    
    52.             }  
    53.         };    
    54.         rd.include(request, httpServletResponse);//发送结果流     
    55.         printWriter.flush();//刷新缓冲区,把缓冲区的数据输出     
    56.         FileOutputStream fileOutputStream = new FileOutputStream(fileFullPath);    
    57.         byteArrayOutputStream.writeTo(fileOutputStream);//把byteArrayOuputStream中的资源全部写入到fileOuputStream中     
    58.         fileOutputStream.close();//关闭输出流,并释放相关资源     
    59.         response.sendRedirect(fileName);//发送指定文件流到客户端     
    60.     }  
    61.   
    62. }  

    3.web.xml配置文件
    [html] view plain copy
     
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <web-app version="2.5"   
    3.     xmlns="http://java.sun.com/xml/ns/javaee"   
    4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
    7.       
    8.     <servlet>  
    9.       <servlet-name>htmlServlet</servlet-name>  
    10.       <servlet-class>com.servlet.Servlet</servlet-class>  
    11.     </servlet>  
    12.     <servlet-mapping>  
    13.       <servlet-name>htmlServlet</servlet-name>  
    14.       <url-pattern>*.do</url-pattern>  
    15.     </servlet-mapping>  
    16.   
    17.   <welcome-file-list>  
    18.     <welcome-file>index.jsp</welcome-file>  
    19.   </welcome-file-list>  
    20. </web-app>  

    4.首页面index.jsp
    [html] view plain copy
     
    1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
    2. <%  
    3. String path = request.getContextPath();  
    4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    5. %>  
    6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    7. <html>  
    8.   <head>  
    9.     <base href="<%=basePath%>">  
    10.       
    11.     <title>首页面</title>  
    12.     <meta http-equiv="pragma" content="no-cache">  
    13.     <meta http-equiv="cache-control" content="no-cache">  
    14.     <meta http-equiv="expires" content="0">      
    15.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    16.     <meta http-equiv="description" content="This is my page">  
    17.     <!-- 
    18.     <link rel="stylesheet" type="text/css" href="styles.css"> 
    19.     -->  
    20.   </head>  
    21.     
    22.   <body>  
    23.    <form action="kanName.do">  
    24.      <input name="chapterId" type="text" value="122"/>  
    25.      <input name="userName" type="text" value="张庆伟"/>  
    26.      <input type="submit" value="提交"/>  
    27.    </form>  
    28.   </body>  
    29. </html>  

    5.跳转后的结果页面bookRead.jsp
    [html] view plain copy
     
    1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
    2. <%  
    3. String path = request.getContextPath();  
    4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    5. %>  
    6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    7. <html>  
    8.   <head>  
    9.   <%  
    10.     String lastPageId=(String)request.getAttribute("lastPageId");  
    11.   %>  
    12.     <base href="<%=basePath%>">  
    13.       
    14.     <title>book页</title>  
    15.     <meta http-equiv="pragma" content="no-cache">  
    16.     <meta http-equiv="cache-control" content="no-cache">  
    17.     <meta http-equiv="expires" content="0">      
    18.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    19.     <meta http-equiv="description" content="This is my page">  
    20.     <!-- 
    21.     <link rel="stylesheet" type="text/css" href="styles.css"> 
    22.     -->  
    23.   </head>  
    24.     
    25.   <body>  
    26.   这是跳转页面:  
    27.    <%=lastPageId %>  
    28.   </body>  
    29. </html>  

    以上代码是实例的所有代码,启动项目后点击提交按钮后,会看到跳转到一个html页面。

    以上代码参考自:http://blog.csdn.net/jimmy609/article/details/37810591

  • 相关阅读:
    确保消息产生前数据库操作已提交
    信息披露和公司简介总结
    1、清空所有,给当前添加/2、清空上一个,给当前添加。
    不能作为判断条件的:
    excel表格 函数功能
    一种ui app写法
    正则中使用变量及数组去重的方法
    鼠标锁定(消失),进入无限滚动状态
    transform 的旋转 ,3d效果,要添加3d效果的父级加上景深perspective。 3d效果的容器加上 transform-style:preserve-3d。
    rem布局,在用户调整手机字体大小/用户调整浏览器字体大小后,布局错乱问题
  • 原文地址:https://www.cnblogs.com/devin-ou/p/8082879.html
Copyright © 2011-2022 走看看