Servlet
Servlet 的生命周期(重点)
Servlet 的创建过程----Tomcat 服务器
Servlet 初始化:init() init(SetvletConfig config)
Servlet 的服务方法:业务方法
Servlet 销毁过程
Servlet 是一个单实例多线程的普通的 java 类
校验多线程的安全问题的标准
Servlet 的两个重要对象
servletConfig:servlet 的配置对象
ServletContext:全局管理者对象(一个web application 只有一个ServletContext)
1)获取上下文路径: /项目名称/url-
2)可以请求转发
3)可以作为域对象使用:request servletContext
4)获取某个文件的真是路径
5)如果不借助于 servletContext 对象,要获取 classes 目录文件路径只能使用类加载器 classLoader
MyFirstServlet:
package com.bite.a_servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class MyFirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("hello,这是我的第一个Servlet...");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
回顾
http协议
http1.1/1.0
请求行 + 请求头
提交方式 uri:/xxxServlet htt协议的版本
常见请求头
referer:非法链接
判断如果当前 referer 为 null || 不包含一些广告页面
User-agent:当前浏览的类型————判断使用的浏览器的类型
Host:http://localhost
Connection:keep-alive
Request
1)Tomcat 服务器启动——>创建 Servlet 对象
2)将 request 对象封装到了 HttpServlet 中——>HttpServletRequest
3)解析 HttpServlet 中的一些内置方法:初始化
HttpServletRequest
Http://localhost:8080/hello
如何获取请求的参数数据(表单中提交过来的)
通过的方法获取参数数据
String value = getParameter(String name); 获取单个参数
获取所有参数名称:
getParameterName(); ----> Enurmation(类似于 Iterator)
hasMoreElement();
nextElement();
getParameterValue():获取一个参数对应的多个值(单选按钮/复选按钮)
响应信息:
通过状态码:判断响应是否成功
Status:
200 成功响应
500 服务器出现异常了
Servlet (和业务相关的数据)由Tomcat
404 请求 url 路径有问题
302 进一步请求
响应头
Location:一个地址 + 302:重定向
简写方式:response.sendRedirect("/项目名称/hello.html)
重定向的特点:
发送了 两次请求(产生两个 request 对象)
request:本身域对象(共享数据)
重定向/请求转发(ServletContext对象)跳转页面
reflesh:定时刷新或者经过 n 秒跳转页面
响应头(以下载方式打开)
文件下载:使用第三方 jar 包 commons-io
tomcat:启动--优先在 web.xml 寻找动态资源文件--->当前内部路径静态资源文件
\
伪代码
ServletContext 的其他作用:
1)作为域对象使用
2)请求转发
请求转发和重定向的区别?
使用 Servlet:login.html 用户登录案例
Servlet
数据库连接池:c3p0
MySQL 的驱动
Commons-dbutils:jdbc 封装的工具类
c3p0.xml 配置文件读取 MySQL 链接信息
JavaEE:会话管理技术
Cookie 和 Session
Cookie:存储到浏览器(只能存储 String 类型的数据)
相关API
Cookie cookie = new Cookie(String key,String value) ;
//有服务器将 cookie 信息携带给浏览器
response.add Cookie(cookie) ;
//携带一个set-Cookie:key=value
Session:存储到服务器 (JSESSIONID)
回顾
Servlet 生命周期
基于 Java 的反射机制
//获取构造器 getConstructor(Classparams...)
//创建实例对象:newInstance() ;
//获取 Method 对象:getDeclaredMethod(String name,参数的)
Method:里面的 invoke(实例对象,实际参数) ;
初始化:
Init(ServletConfig config)
Service(request,response):servlet 的业务服务方法
Servlet 的两个重要对象:
servletConfig:servlet 的配置对象
一个 servlet 可以有多个 Servletconfig 对象
Servlet 的初始化参数(web.xml servlet 的配置信息去设置)
获取 初始化参数:getInitParameter(String name) ;
getInitParameterName() ;
Servlet 的加载时机: 数字越大,优先级
服务器在启动时,servlet 对象就被创建
Servlet 是一个单实例多线程的
在内存中 servlet 对象只会创建一次,存在多线程安全问题
使用同步代码块/同步方法(非静态的同步:锁对象:this)
静态的同步方法:类名.class
ServletContext:
特点:一个项目中代表一个 ServletContext 对象(全局管理者对象)
1)获取上下文路径: /web application 项目名称/请求的 url-pattern
2)获取全局参数:
web.xml 中
什么是域对象?
(就是为了)共享数据 在不同的 jsp/servlet 之间保存数据,获取数据
域对象:
ServletContext 是最大的一域
ServletContext 的作用:保存数据,获取数据(共享数据)
获取文件真实路径 类加载器.getRealPath()
请求转发和重定向的区别:
1)地址是否发生变化
前者不会
后者进一步请求会发生变化
2)是否需要用到域对象
前者在业务中跳转页面,需要用域对象(request 域)
后者在跳转页面后,无法从 request 域中获取数据
3)从内存角度的 request 对象
前者始终只有一个 request 对象(还需要用到业务需求上)
后者会产生两个 request 对象