日期:2014-05-16  浏览次数:20341 次

Jsp&Servlet实践备注

1.在web.xml中,<init-param>标签用于预置参数,在Servlet中可用 getServletConfig().getInitParameter("xx")获得;


2.在Servlet中覆盖service()方法时,要用super.service()调用HttpServlet的service()方法;


3. response.sendRedirect("1.jsp"); 此种跳转方式称为"请求重定向",产生了2个请求,地址栏内容发生变化,性能较差;


??? request.getDispatcher("1.jsp").forward(request,response);此种跳转方式称为"请求转发",只产生了1个请求,地址栏内容不变,性能较优;它与jsp中的<jsp:forward page="1.jsp"/>起相同的作用;


4. request.getDispatcher("1.jsp").include(request,response); -->在一个资源中包含另一个资源; 与jsp中的<jsp:include page="1.jsp"/>起相同的作用;


5. 在jsp文件 中include一个html文件,会出现乱码, 建议只include jsp文件;若要避免乱码可尝试使用过滤器;


6. 若使用frameset定义上下左右布局,或者使用"请求转发"并在request里设置了参数, 有时javascript可能会出现里的奇怪的"对象未定义"等错误, 此时只需在head标签中添加一句: <base href="<%=basePath%>xxx/xxx/">;


7.在比较字符串相等时, 变量.equals("abc")与"abc".equals(变量)是有所区别的, 区别就是后者不会出现空指针异常(NullPointException);


8. 在jsp中写<% int i=0; %> 与写<%! int i=0; %>的作用是不同的,区别虽然只有1个感叹号,编译出的Servlet里2个变量的位置却不同,一个是全局变量,另一个是局部变量;


9. 四种响应Ajax请求的方法: 自行序列化为xml; xml数据映射; 页面模板; JSON;? (前3个不是很理解);


10.如果try-catch块中有return语句, finally块中也有return语句,那么前者将会被无视掉,具体效果可自行做实验;

?

11.如何实现防盗链? 在A网站上获取B网站的图片资源,那么页面一定是先访问的www.A.com的某个url,然后访问的www.B.com的资源url,所以通过request.getHeader("referer")获得上一次访问的地址,如果结果为空或者网站名不是B,那么就将指定的防盗链声明的图片作为响应.

?

12. 各种过滤器的应用:? 防盗链过滤器,日志记录过滤器,权限验证过滤器,字符编码过滤器,防止缓存过滤器,文件上传过滤器,使用过滤器自动生成静态页面...

?

13. 防止页面缓存的过滤器:
?? 缓存带来的影响:可能使得web服务器不能正确地计算一个页面或一个广告被浏览的次数,或者导致页面的图片信息不能得到及时的更新.
?? (1)设置http-equiv属性的参数expires,控制网页的过期时间;
?? (2)设置http-equiv属性的参数pragma,禁止浏览器从本地计算机的缓存中访问页面内容;
?? (3)设置http消息头中的Cache-control参数,控制页面的缓存. 其常见值有private,no-cache,max-age,must-revalidate,默认值为private;
??? Cache-control的作用根据浏览方法的不同可以分为以下几种情况:
??? ①以打开新窗口的方式进行浏览:? 如果指定 Cache-control的值为private、no-cache或者must-revalidate,那么打开新窗口访问时就会重新访问服务器; 如果指定的值是max-age,那么在此值规定的时间内不会重新访问服务器.
??? ②在地址栏里按回车键进行浏览:? 如果值为private或must-revalidate, 则只有第一次访问时才会访问服务器,以后就不再访问; 如果值为no-cache,那么每次都会访问; 如果值为max-age,那么在过期之前不会重复访问服务器;
??? ③按后退键进行浏览:? 如果值为private、must-revalidate、max-age, 则不会重复访问; 如果值为no-cache,则每次都重复访问;
??? ④按刷新键:? 无论为何值,都会重复访问. 如果指定Cache-control值为no-cache,访问此页面不会在Internet临时文件夹中留下文件备份.
??? (以前从什么地方看到的,貌似按F5刷新和按Shift+F5刷新有所不同....)

?

14. 数据库对分页的支持: mysql有limit关键字,sql server有top关键字,oracle有rownum属性.

?

15.处理jspSmartUpload组件下载文件名乱码问题:
?

/**
* 将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名.
* @param s 原文件名
* @return 重新编码后的文件名
*/
public static String toUtf8String(String s) {
  StringBuffer sb = new StringBuffer();
 for (int i=0;i<s.length();i++)
{ char c = s.charAt(i);
  if (c >= 0 amp;amp; c <= 255) {
   sb.append(c);
}
 else {
    byte[] b;
    try {
    b = Character.toString(c).getBytes("utf-8");
    }
    catch (Exception ex) {
    System.out.println(ex);
    b = new byte[0];
    }
for (int j = 0; j < b.length; j++) {
    int k = b[j];
    if (k < 0) k += 256;
    sb.append("%" + Integer.toHexString(k).toUpperCase());
}
}
}
return sb.toString();
}

?


?
???

?