qiao88 2008-12-17 17:00
浏览 241
已采纳

大型门户网站的表现技术

最近在做一个门户网站,主要是1,2级的静态化,我用jsp表现,在用url,io转化成html,我想问的问题是,

在表现层(jsp),页面中有大量的模块(不同的类别为一个模块(或多个模块)),每个模块中又有小的模块,
为了方便,我每个大模块对应一个list,(小模块从大模块的list中生成,)这样我在dao中有个findAll()的方法,在findAll()中查询出每个模块的list,在把findAll()的每个list放在session中去(大量的代码),
随着模块的增加我的findAll() 越来越大,
我想有没有好解决的方法

问题的根本原因是,1,2级页面的模块太多,

解决的方向1:使findAll()的代码量减少,
2:减少jsp的表现逻辑,

我的jsp的逻辑大部分为:


    <%
    //显示饮食的1-3条新闻
    newss=(List)application.getAttribute("msNewss");
    newssT=newss.toArray();
                        for(int i=0;i<=newssT.length;i++){
                               m=(News)newssT[i];
                               String  isDate=m.getIsDate();
    
                       String[] isDates=isDate.split("-");
                       String fileName=null;
    
                       fileName=request.getContextPath()+"\\Html\\"+isDates[0]+"_"+isDates[1]+"\\"
                                                +isDates[2]+"\\"+m.getId()+".html";
    
    
    
                            %>
                            <li> <a href=<%=fileName %> target="_blank"><%=m.getHead() %></a></li>
                       <%
                       if(i==2) break;
    
                          }%>
    
                      </ul>
                    </span> </div>
                    <div class="food_a_b">
                      <ul>
                                       <%
                         //显示饮食的4-12条新闻
                         newss=(List<News>)application.getAttribute("msNewss");
                         newssT=newss.toArray();
    
    
                        for(int i=3;i<=newssT.length;i++){
                               m=(News)newssT[i];
                               String  isDate=m.getIsDate();
    
                       String[] isDates=isDate.split("-");
                       String fileName=null;
    
                       fileName=request.getContextPath()+"\\Html\\"+isDates[0]+"_"+isDates[1]+"\\"
                                                +isDates[2]+"\\"+m.getId()+".html";
    
    
    
                            %>
                            <li> <a href=<%=fileName %> target="_blank"><%=m.getHead() %></a></li>
                       <%
                       if(i==11) break;
    
                          }%>
    

    我的dao大部分为:
    /**
    * 查询出时尚的新闻
    /
    hql="from News n where n.newsType.type=:type order by n.isDate desc ";
    newss=(List)session.createQuery(hql).setString("type", "时尚").setFirstResult(0).setMaxResults(20).list();
    newssMap.put("ssNewss", newss);
    /
    *
    * 查询出时尚潮流的新闻
    /
    hql="from News n where n.newsType.type=:type and n.keyy like:co order by n.isDate desc ";
    newss=(List)session.createQuery(hql).setString("type", "时尚").setString("co", "%潮流%").setFirstResult(0).setMaxResults(6).list();
    newssMap.put("clNewss", newss);
    /
    *
    * 查询出时尚前沿的新闻
    */
    hql="from News n where n.newsType.type=:type and n.keyy like:co order by n.isDate desc ";
    newss=(List)session.createQuery(hql).setString("type", "时尚").setString("co", "%前沿%").setFirstResult(0).setMaxResults(6).list();
    newssMap.put("qyNewss", newss);

            /**
             * 查询出纤体的新闻
             */
            hql="from News n where n.newsType.type=:type order by n.isDate desc ";
            newss=(List<News>)session.createQuery(hql).setString("type", "纤体").setFirstResult(0).setMaxResults(6).list();
            newssMap.put("qtNewss", newss);
    

    我的 action为::

    /**
    * 查询出亲子的新闻
    /
    newss=newssMap.get("qzNewss");
    request.getSession().getServletContext().setAttribute("qzNewss", newss);
    /
    *
    * 查询出居家的新闻
    /
    newss=newssMap.get("jjNewss");
    request.getSession().getServletContext().setAttribute("jjNewss", newss);
    /
    *
    * 查询出美食的新闻
    */
    newss=newssMap.get("msNewss");
    request.getSession().getServletContext().setAttribute("msNewss", newss);

    [b]问题补充:[/b]
    大家说的清楚些,怎样拿掉page上的<%...%>,用jsp的标签吗??我用的是struts1.2
    [b]问题补充:[/b]
    这个我也考虑过,不过我放弃了,因为:jsp是用来表现的,我的那些数据就是被显示的,如果写在action中,我就要对上面的一个list划分成几个list,每个小list对应一个小模块,这样表现数据是方便了点,但这样的小list要有50多个,
    放在request中就有50多个,这样的list太多了,而且action的代码就特别庞大了,
    [b]问题补充:[/b]
    我的我的dao是用map 存放每一个list的,那时我为了jsp好表现,我在action
    中又把map的list拿出来放在request中了,现在想想还是不分解map了,

    我写了个方法,
    //i开始下标
    //结束下标
    //数据源
    public string getNewss(int i,int j,String mapNewss)
    ,这样应该好点,谢谢啊,
    但我已经写了四个模块了,这样改太辛苦了,唉,自己开始没有规划好。
    能交个朋友吗?
    我的msn:kulinglei@126.com

  • 写回答

5条回答 默认 最新

  • www88485400 2008-12-18 10:06
    关注

    你不是觉得在request中放置太多得list吗
    你可以写一个方法 将每一个list查询出来放在map中
    再action中调用该方法在request中保存map 没有必要将
    list再分开保存
    还有你对每个模块的查询如果他们之间基本上操作都一样得话
    你最好做一个方法传值进去 让他们有一个统一得调用方法
    否则最好是 将每一个查询做成一个方法 然后在一个总的方法中
    调用他们这样代码看上去也比较简练 维护也方便

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝