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(); }