一。servlet的特点,生命周期
单实例 非线程安全的 性能高于多实例
比如统计访问人数
Integer i=0;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
synchronized (i) {
i++;
}
}
servlet实例化默认是在第一次访问时
loadOnStartup() default (int) -1; 第一次访问实例化
>=0任何值 都是在web服务器启动时
不带参数的init方法是在父类带参数的init方法中调用 如果重写了带参数的init方法 必须手工调用super.init(ServletConfig config)
public void init()
public void init(ServletConfig config) throws ServletException {
service方法 所有的请求都需要先经过service方法 service根据请求的类型决定调用doGet doPost
重写了service方法 添加 super.service(req, resp);
destroy方法
当容器销毁servlet实例时 自动调用 (容器关闭,自动reload模式启动后的源代码修改)
二。 工作中常用的快捷键
ctrl+H 搜索整个工作空间 找源代码
ctrl+O 搜索类中的方法
ctrl+L 通过异常 行号 定位源代码位置
ctrl+1 代码自动修正
ctrl+shift+R 通过名称找到某个资源
ctrl+shift+T 通过类名找到类的位置
ctrl+T 找到某个接口的实现类
alt+后退键
alt+/ 代码提示
三。请求转发和重定向
请求转发
一次请求 服务器端跳转 浏览器不知道跳转地址栏不会发生变化 参数可以传递 是同一个同一个请求对象
重定向
二次请求 客户端(浏览器)跳转 浏览器直到要跳转的路径 参数丢失 不是同一个同一个请求对象
跨域访问