如何根据数据库字段动态的生成一个页面?

如何根据数据库字段动态的生成一个页面?,第1张

根据数据库字段动态的生成一个页面,利用Filter和定制Response,把服务器返回的JSP响应输出到我们自己的Response中,就可以将响应快速写入Html文件,然后再发送给客户。

import java.io.*

import javax.servlet.*

import javax.servlet.http.*

import java.util.Calendar

public class CacheFilter implements Filter {

ServletContext sc

FilterConfig fc

long cacheTimeout = Long.MAX_VALUE

public void doFilter(ServletRequest req,

ServletResponse res,

FilterChain chain)

throws IOException, ServletException {

HttpServletRequest request =

(HttpServletRequest) req

HttpServletResponse response =

(HttpServletResponse) res

// check if was a resource that shouldn't be cached.

String r = sc.getRealPath("")

String path =

fc.getInitParameter(request.getRequestURI())

if (path!= null &&path.equals("nocache")) {

chain.doFilter(request, response)

return

}

path = r+path

String id = request.getRequestURI() +

request.getQueryString()

File tempDir = (File)sc.getAttribute(

"javax.servlet.context.tempdir")

// get possible cache

String temp = tempDir.getAbsolutePath()

File file = new File(temp+id)

// get current resource

if (path == null) {

path = sc.getRealPath(request.getRequestURI())

}

File current = new File(path)

try {

long now =

Calendar.getInstance().getTimeInMillis()

//set timestamp check

if (!file.exists() || (file.exists() &&

current.lastModified() >file.lastModified()) ||

cacheTimeout <now - file.lastModified()) {

String name = file.getAbsolutePath()

name =

name.substring(0,name.lastIndexOf("/"))

new File(name).mkdirs()

ByteArrayOutputStream baos =

new ByteArrayOutputStream()

CacheResponseWrapper wrappedResponse =

new CacheResponseWrapper(response, baos)

chain.doFilter(req, wrappedResponse)

FileOutputStream fos = new FileOutputStream(file)

fos.write(baos.toByteArray())

fos.flush()

fos.close()

}

} catch (ServletException e) {

if (!file.exists()) {

throw new ServletException(e)

}

}

catch (IOException e) {

if (!file.exists()) {

throw e

}

}

FileInputStream fis = new FileInputStream(file)

String mt = sc.getMimeType(request.getRequestURI())

response.setContentType(mt)

ServletOutputStream sos = res.getOutputStream()

for (int i = fis.read()i!= -1i = fis.read()) {

sos.write((byte)i)

}

}

public void init(FilterConfig filterConfig) {

this.fc = filterConfig

String ct =

fc.getInitParameter("cacheTimeout")

if (ct != null) {

cacheTimeout = 60*1000*Long.parseLong(ct)

}

this.sc = filterConfig.getServletContext()

}

public void destroy() {

this.sc = null

this.fc = null

}

}

这个你要做一个列表页和一个详细页

列表页显示的是根据条件查询出来的商品信息

关键是详细页

在列表页点击商品后可以获取到商品的ID值(用比如gridview之类的控件)然后通过传值

传到详细页

那么知道id了

在根据id读取不就得了么

现在很多看似是静态页面其实是使用了URL重定向组件 Isapirewrite这个东西,里面一样的是动态的页面。

如果非要生成静态页面可以写一个生成的母版页再加载数据库数据生成。

首先在模板页里把页面布局啊什么的都做好。然后在后台页面里提取该页面,再把数据库数据写入到里面的对应标签里。最后再生成一个新的页面就行了。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/561186.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-01
下一篇2023-07-01

发表评论

登录后才能评论

评论列表(0条)

    保存