一、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培训日志 个人收集
参加java培训后写的实习报告,里面含有代码,很详细!
在培训机构培训时做的项目,分享一下给大家
用Struts、Hibernate和Spring,...宠物信息察看(含该宠物的日记列表)。 3. 系统登录。 4. 宠物训练。 5. 写宠物日记 首页面 以宠物名称和密码登录。登录后才可对宠物进行训练,写宠物日记,否则只能查看。 宠物排行
日记 《剑指offer》Java版代码实现 android资料总结 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计、Java、Python、C++ 正在成为史上最全分类 Android 开源大全 android 有很多不错的案例 ...
MyJournalAlc MyJournalALc是一款安卓应用,可让用户写下自己的想法和感觉,就像写日记一样。 用户可以添加日期并写下他们想要记录的内容。 这是我在ALC培训中学到的东西的非常简单的演示。 这是Andela根据ALC ...
RunningMate 是用 Java 编写的跑步者日记。 功能包括营养数据库、培训计划、健康计算器等等!
│ │ 托福资料(完整带Java后台).zip │ │ 校内网小程序.zip │ │ 蒙台梭利幼教.zip │ │ 课程预约.zip │ │ │ ├─新闻资讯(8个) │ │ 今日头条.zip │ │ 会议精灵.zip │ │ 体育新闻.zip │...
也适合作为相关培训学校的android培训教材。... 目录 第1章 掀起你的盖头来——初识android. 1 1.1 认识android 1 1.2 android的背景 2 1.2.1 android的历史 2 1.2.2 android的发展 2 1.3 我的...
也适合作为相关培训学校的Android培训教材。 目录 第1章 掀起你的盖头来——初识Android 1.1 认识Android 1.2 Android的背景 1.2.1 Android的历史 1.2.2 Android的发展 1.3 我的Android我做主 1.3.1 开发基于Android...