当应用服务器化servlet例子的后为客户端请求提供服务的前它会这个servletinit思路方法在个servlet生命周期中init思路方法只会被次通过在init思路方法中缓存Cache些静态数据或完成些只需要执行次、耗时操作就可大大地提高系统性能
例如通过在init思路方法中建立个JDBC连接池是个最佳例子假设我们是用jdbc2.0DataSource接口来取得数据库连接在通常情况下我们需要通过JNDI来取得具体数据源我们可以想象在个具体应用中如果每次SQL请求都要执行次JNDI查询话那系统性能将会急剧下降解决思路方法是如下代码它通过缓存CacheDataSource使得下次SQL时仍然可以继续利用它:
以下是引用片段:
public ControllerServlet extends HttpServlet{
private javax.sql.DataSource testDS = null;
public void init(ServletConfig config) throws ServletException {
super.init(config);
Context ctx = null;
try{
ctx = InitialContext;
testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS");
}catch(NamingException ne){ne.prStackTrace;}
}catch(Exception e){e.prStackTrace;}
}
public javax.sql.DataSource getTestDS{
testDS;
}
...
...
}
思路方法 2:禁止servlet和JSP 自动重载(auto-reloading)
Servlet/JSP提供了个实用技术即自动重载技术它为开发人员提供了个好开发环境当你改变servlet和JSP页面后而不必重启应用服务器然而这种技术在产品运行阶段对系统资源是个极大损耗它会给JSP引擎类装载器(loader)带来极大负担因此关闭自动重载功能对系统性能提升是个极大帮助
思路方法 3: 不要滥用HttpSession
在很多应用中我们需要保持客户端状态以便页面的间可以相互联系但不幸是由于HTTP具有天生无状态性从而无法保存客户端状态因此般应用服务器都提供了session来保存客户状态在JSP应用服务器中是通过HttpSession对像来实现session功能但在方便同时它也给系统带来了不小负担每当你获得或更新session时系统者要对它进行费时序列化操作你可以通过对HttpSession以下几种处理方式来提升系统性能
如果没有必要就应该关闭JSP页面中对HttpSession缺省设置 如果你没有明确指定话每个JSP页面都会缺省地创建个HttpSession如果你JSP中不需要使用session话那可以通过如下JSP页面指示符来禁止它:
以下是引用片段:
<%@ page session="false"%>
不要在HttpSession中存放大数据对像:如果你在HttpSession中存放大数据对像话每当对它进行读写时应用服务器都将对其进行序列化从而增加了系统额外负担你在HttpSession中存放数据对像越大那系统性能就下降得越快
当你不需要HttpSession时尽快地释放它:当你不再需要session时你可以通过HttpSession.invalidate思路方法来释放它尽量将session超时时间设得短点:在JSP应用服务器中有个缺省session超时时间当客户在这个时间的后没有进行任何操作话系统会将相关session自动从内存中释放超时时间设得越大系统性能就会越低因此最好思路方法就是尽量使得它值保持在个较低水平
思路方法 4: 将页面输出进行压缩
压缩是解决数据冗余个好思路方法特别是在网络带宽不够发达今天有浏览器支持gzip(GNU zip)进行来对HTML文件进行压缩这种思路方法可以戏剧性地减少HTML文件下载时间因此如果你将servlet或JSP页面生成HTML页面进行压缩话那用户就会觉得页面浏览速度会非常快但不幸是不是所有浏览器都支持gzip压缩但你可以通过在你中检查客户浏览器是否支持它下面就是有关这种思路方法实现个代码片段:
以下是引用片段:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
OutputStream out = null;
String encoding = request.getHeader("Accept-Encoding");
(encoding != null && encoding.indexOf("gzip") != -1){
request.Header("Content-Encoding" , "gzip");
out = GZIPOutputStream(request.getOutputStream);
}
(encoding != null && encoding.indexOf("comdivss") != -1){
request.Header("Content-Encoding" , "comdivss");
out = ZIPOutputStream(request.getOutputStream);
}{
out = request.getOutputStream;
}
...
...
}
最新评论