java 培训日记

一、servlet的service()方法
回顾Servlet的生命周期,通过查看源代码了解init()及service()方法的设计思想;
问:
(1)我们在编写Servlet类时,为什么不覆盖它的service()方法,通常覆盖doGet()之类的方法?
如果用覆盖servlet的service()方法,那么servlet在处理表单提交时,就会去调用父类的service方法,父类的service方法会根据提交的方式做出判断,然后调用对应的doXX()方法。如果是覆盖doGet()之类的方法,servlet就会根据提交的方式直接调用相应的doXX()方法。
(2)如果要覆盖service()方法,通常会覆盖下列方法中的哪一个方法?
service(HttpServletRequest req, HttpServletResponse resp)
service(ServletRequest req, ServletResponse res)

二、浏览器缓存内幕及解决方案
在下面三种不同的情况下,浏览器的缓存情况不同:
1).Servlet没有覆盖getLastModified方法,响应消息中无LastModified头字段,在浏览器缓存的文档无“上次修改时间”.   
2).有getLastModified方法,响应消息中有LastModified头字段,但返回时间晚于缓存文档“上次修改时间”    
3).有getLastModified方法,响应消息中有LastModified头字段,但返回时间早于等于缓存文档“上次修改时间”   
  后退、前进、转到(手工输入后按回车)    通过超链接访问      刷新
     1)不发请求,直接使用缓存              发出请求           发出请求
     2)不发请求,直接使用缓存              不发请求           发出请求,返回200
     3)不发请求,直接使用缓存               不发请求           发出请求,返回304
2、如何禁止Servlet的缓存?(张老师JavaWeb书第236页)
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
3、如何禁止JSP页面的缓存?
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">

4、如何禁止静态页面的缓存?(张老师JavaWeb书第238页)
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
静态页面被禁止后,刷新浏览器返回304
JSP页面被禁止后,刷新浏览器返回200
三、初始化参数
1、相对于单个Servlet:P178
在web.xml文件中配置
  <servlet>
    <servlet-name>ReadInitParam</servlet-name>
    <servlet-class>servlet.ReadInitParam</servlet-class>
    <init-param>
    <param-name>dbname</param-name>
    <param-value>mysql</param-value>
    </init-param>
  </servlet>
访问方法为:
getServletConfig().getInitParameter("keyname")
2、相对于整个Web应用程序:P201
在web.xml文件中配置
<context-param>
<param-name>company</param-name>
<param-value>itcast.cn</param-value>
</context-param>
访问方法为:
getServletContext().getInitParameter("keyname")

四、资源文件(.properties)的访问
1、使用Properties类来访问:
Properties prop = new Properties();

//方法一
//InputStream is = new FileInputStream("db.properties");
//db.properties要放在启动tomcat的bin目录中

//方法二
//InputStream is = new FileInputStream(this.getServletContext().getRealPath("/") + "WEB-INF/classes/config/db.properties");
//db.properties可以放在web工程的任意目录

//方法三
//InputStream is = this.getServletContext().getResourceAsStream("WEB-INF/classes/config/db.properties");
//db.properties可以放在web工程的任意目录,相对于工程的上下文路径

//方法四
//InputStream is = this.getClass().getClassLoader().getResourceAsStream("/config/db.properties");
InputStream is = ReadProp.class.getClassLoader().getResourceAsStream("/config/db.properties");
//db.properties只能放在类路径即classes目录中
prop.load(is);
is.close();
//读取key对应的value
prop.getProperty("keyname")

2、使用ResourceBundle类来访问:
//也只能放在类路径下
ResourceBundle rb = ResourceBundle.getBundle("config/db");
//读取key对应的value
rb.getString("keyname")

http://www.itcast.cn

你可能感兴趣的:(java,Web,servlet,浏览器,cache)