JSP学习笔记

    JSP学了很久了,把以前的零散的学习笔记搬到BLOG上来 
       1、关闭数据库连接
  使用数据库连接时,记住要在finally中关闭,如果用到了连接池的话,实际上关闭操作实际上把连接归还给连接池;

        2、从1开始
  在使用ResultSet读取列值时,列是从左到右编号,第一列是1;比如"select id,name from student",可以使用rs.getString(2),也可以使用rs.getString("name")读取,但是前一种速度快些,后面一种可维护性强些,并且第二种方法中使用列名作为参数的时候,列名是不区分大小写的,所以也可是使用rs.getString("Name")读取;另外在用PreparedStatement的设置参数的时候,也是从1开始的;

          3、安全的提供文件下载
   在提供文件下载的时候,要防止盗连.内容被盗的损失不计,还加重了自己服务器的负担,而且还防止有人循环下载某一区间段的所有附件.解决问题的方法常见的有通过Apache Http Server来配置,只有满足一定条件的HTTP请求才允许下载;另一种是服务器生成一个随即的值,并放在Session对象中,当用户下载的文件的时候,必须把该随即值传回到服务器端,服务器断再判断该随即值是否和Session中的随即值一致;

       4、forword与sendRedirect的区别
  forword:RequestDispatcher dispatcher=request.getRequestDispatcher("/test.jsp");
    dispatcher.forword(request,response);
  sendRedirect:response.sendRedirect("/test.jsp");
  如果称forword是一个导水渠,那么redirect则是一个指路人.forword将上一个流程的数据转向下一个流程,而redirect只是提示浏览器需要访问的下一个页面.因此forword只可以在同一个context中使用;

       5、Action与DispatchAction
  如果很多操作都是触发同一个已定义的Action,只是所带的method参数不同,这样设计方便把功能类似的操作定义在同一个Action里面,然后根据不同的method参数调用不同的方法.在定义Action的时候继承DispatchAction;而且在应用服务器中,每个Servlet就是一个线程,后一种办法会导致系统中存在大量的处理用户请求的线程,线程之间的切换的开销回严重降低应用服务器的性能;

       6、sesson的关闭
  一般情况下session都是存储在内存里,当服务器进程被停止或者重启的时候,内存里的session也会被清空.但是并不是浏览器关闭的时候session就消失了,这是不正确的.一般说来,session在下列情况下会被删除:
   1)程序调用HttpSession.invalidate();
   2)距离上一次收到客户端发送的session id时间间隔超过了session的超时限制;
   3)服务器进程被停止或者重启;

       7、java函数值传递还是引用传递?
  java数据类型有两类:元数据类型和引用数据类型.在使用元数据类型进行传递的时候传递的是元数据类型本身的值,在传递引用数据类型的时候,传递的是这个引用对象的地址;

       8、使用Filter控制权限

建立Filter文件(放在包myPackage下):

public class MyFilter implements Filter {

    protected FilterConfig filterConfig;

   

    public void init(FilterConfig config) throws ServletException {

       System.out.print("init");

        this.filterConfig = config;

    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

       throws IOException,ServletException{

       HttpSession session=((HttpServletRequest)request).getSession(false);

       if(session==null||session.getAttribute("isLogon")==null){

    ((HttpServletResponse)response).sendRedirect(((HttpServletRequest)request).getContextPath()+"/logon.jsp");

       }else{

           chain.doFilter(request,response);

       }

    }

   

    public void destroy()

    {

       System.out.print("destroy");

        this.filterConfig=null;

    }

}

 

<filter>

    <filter-name>myFilter</filter-name>

    <filter-class>myPackage.MyFilter</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>myFilter</filter-name>

    <url-pattern>/myfile/*</url-pattern>

  </filter-mapping>

注:对于JSF,每个JSF生命周期它都要filter一次;而且不能根据Session为空来 判断是否已经登录,因为JSF就是用Session来实现交互的。

    9、防止JSP页面回退

((HttpServletResponse)response).setHeader("Cache-Control","no-cache");
((HttpServletResponse)response).setHeader("Cache-Control","no-store");
((HttpServletResponse)response).setDateHeader("Expires", 0);
//Causes the proxy cache to see the page as "stale"
((HttpServletResponse)response).setHeader("Pragma","no-cache");

    10、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值