首页 > 编程 > JSP > 正文

动态JSP页生成静态HTML的方法

2024-09-05 00:22:18
字体:大 中 小
来源:转载
供稿:网友

这篇文章主要介绍了动态JSP页生成静态HTML的方法,以实例形式较为详细的分析了JSP生成静态HTML页面的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了动态JSP页生成静态HTML的方法。分享给大家供大家参考。具体如下:

具体实现:

利用Filter的过滤功能把*.jsp过滤出来,判断是否存在对应的.html文件,如果不存在对应的.html文件,则将其内容读出写入指定的.html文件,再跳转到对应的.html即可。如果存在对应的.html文件,则直接跳转到对应的.html即可。

代码:

JspFilter.java:

 

 
  1. import java.io.BufferedReader; 
  2. import java.io.File; 
  3. import java.io.FileOutputStream; 
  4. import java.io.IOException; 
  5. import java.io.InputStream; 
  6. import java.io.InputStreamReader; 
  7. import java.net.HttpURLConnection; 
  8. import java.net.URL; 
  9. import javax.servlet.Filter; 
  10. import javax.servlet.FilterChain; 
  11. import javax.servlet.FilterConfig; 
  12. import javax.servlet.ServletException; 
  13. import javax.servlet.ServletRequest; 
  14. import javax.servlet.ServletResponse; 
  15. import javax.servlet.http.HttpServletRequest; 
  16. import javax.servlet.http.HttpServletResponse; 
  17. public class JspFilter implements Filter { 
  18. public void destroy() { 
  19. // TODO 自动生成方法存根 
  20. } 
  21. public void doFilter(ServletRequest request, ServletResponse response, 
  22. FilterChain chain) throws IOException, ServletException { 
  23. HttpServletRequest hreq = (HttpServletRequest) request; 
  24. HttpServletResponse hresp = (HttpServletResponse) response; 
  25. String name = hreq.getRequestURL().substring( 
  26. hreq.getRequestURL().lastIndexOf("/") + 1, 
  27. hreq.getRequestURL().lastIndexOf(".")); 
  28. if (hreq.getRequestURL().indexOf(".jsp") != -1 && (null == hreq.getParameter("type") || hreq.getParameter("type").equals(""))) { 
  29. hresp.sendRedirect(hreq.getContextPath()+"/conversion?name="+hreq.getRequestURL()); 
  30. return ; 
  31. } 
  32. chain.doFilter(request, response); 
  33. } 
  34. public void init(FilterConfig arg0) throws ServletException { 
  35. // TODO 自动生成方法存根 
  36. } 
  37. } 

ConversionServlet.java:

 

 
  1. import java.io.BufferedReader; 
  2. import java.io.File; 
  3. import java.io.FileOutputStream; 
  4. import java.io.IOException; 
  5. import java.io.InputStream; 
  6. import java.io.InputStreamReader; 
  7. import java.io.PrintWriter; 
  8. import java.net.HttpURLConnection; 
  9. import java.net.URL; 
  10. import javax.servlet.ServletException; 
  11. import javax.servlet.http.HttpServlet; 
  12. import javax.servlet.http.HttpServletRequest; 
  13. import javax.servlet.http.HttpServletResponse; 
  14. public class ConversionServlet extends HttpServlet { 
  15. public ConversionServlet () { 
  16. super(); 
  17. } 
  18. public void destroy() { 
  19. super.destroy(); // Just puts "destroy" string in log 
  20. // Put your code here 
  21. } 
  22. public void doGet(HttpServletRequest request, HttpServletResponse response) 
  23. throws ServletException, IOException { 
  24. response.setContentType("text/html"); 
  25. PrintWriter out = response.getWriter(); 
  26. //----获取请求的URL 
  27. String reqTarget = request.getParameter("name"); 
  28. //----指定对应JSP的HTML名称 
  29. String name = reqTarget.substring(reqTarget.lastIndexOf("/") + 1,reqTarget.lastIndexOf(".")); 
  30. //---判断是否存在对应的HTML文件 
  31. File file = new File(request.getRealPath("/") + name + ".html"); 
  32. if (!file.exists()) { //--------如果不存在对应的HTML文件 
  33. try { 
  34. file.createNewFile(); //--------创建HTML文件 
  35. //-------将JSP的内容写入对应的HTML文件内 
  36. InputStream in; 
  37. StringBuffer sb = new StringBuffer(""); 
  38. //----注意这里,不能直接访问请求的URL,如果直接访问的话,会陷入死循环 
  39. URL url = new java.net.URL(reqTarget.toString()+"?type=11"); 
  40. HttpURLConnection connection = (HttpURLConnection) url 
  41. .openConnection(); 
  42. connection.setRequestProperty("User-Agent", "Mozilla/4.0"); 
  43. connection.connect(); 
  44. in = connection.getInputStream(); 
  45. java.io.BufferedReader breader = new BufferedReader( 
  46. new InputStreamReader(in, "GBK")); 
  47. String currentLine; 
  48. FileOutputStream fos = new FileOutputStream(file); 
  49. while ((currentLine = breader.readLine()) != null) { 
  50. sb.append(currentLine); 
  51. fos.write(currentLine.getBytes()); 
  52. } 
  53. if (null != breader) 
  54. breader.close(); 
  55. if (null != fos) 
  56. fos.close(); 
  57. //---------------转到与JSP对应的HTML页 
  58. response.sendRedirect(request.getContextPath()+"/"+name + ".html"); 
  59. } catch (Exception e) { 
  60. e.printStackTrace(); 
  61. } 
  62. }else{ 
  63. //----------如果存在指定的HTML,直接跳转到指定的HTML页 
  64. response.sendRedirect(request.getContextPath()+"/"+name + ".html"); 
  65. } 
  66. } 
  67. public void doPost(HttpServletRequest request, HttpServletResponse response) 
  68. throws ServletException, IOException { 
  69. doGet(request, response); 
  70. } 
  71. public void init() throws ServletException { 
  72. // Put your code here 
  73. } 
  74. } 

WEB.XML配置:

 

 
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <web-app version="2.4" 
  3. xmlns="http://java.sun.com/xml/ns/j2ee" 
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
  6. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
  7. <filter> 
  8. <filter-name>jspfilter</filter-name> 
  9. <filter-class>com.beanutil.JspFilter</filter-class> 
  10. </filter> 
  11. <filter-mapping> 
  12. <filter-name>jspfilter</filter-name> 
  13. <url-pattern>*.jsp</url-pattern> 
  14. </filter-mapping> 
  15. <servlet> 
  16. <servlet-name>conversion</servlet-name> 
  17. <servlet-class>com.beanutil.ConversionServlet </servlet-class> 
  18. </servlet> 
  19. <servlet-mapping> 
  20. <servlet-name>conversion</servlet-name> 
  21. <url-pattern>/conversion</url-pattern> 
  22. </servlet-mapping> 
  23. </web-app> 

希望本文所述对大家的JSP程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表