1.前一天重点内容复习
什么是servlet
全名:Servlet Applet
作用:服务器的连接器,服务于前后端交互
范围:狭义是servlet接口,广义是所有继承了servlet的子实现类
servlet执行流程
1.浏览器通过url请求访问服务器,对服务器发送HttpServletRequest请求并携带url(统一资源定位符)参数
2.服务器接收到浏览器的请求之后,开始从HttpServletRequest请求的参数url(统一资源定位符)中解析出uri(项目地址+Servlet映射路径)
3.服务器通过uri得到Servlet映射路径,去web.xml文件的映射配置中寻找此路径对应的Servlet名称
4.服务器通过Servlet的名称找到该名称Servlet的基本配置,拿到此Servlet的全限定名称
5.通过Servlet全限定名称可以获取到Servlet的字节码文件对象
6.通过字节码文件对象可以创建当前Servlet的实例对象
7.通过Servlet字节码文件对象调用方法并传入参数的class就可以获取到该Servlet里面的doGet()或者doPost()方法对象
8.取消java语言访问限制,可以调用servlet里面的任何方法
9.方法对象调用invoke方法,传入对象和参数即可执行servlet中的方法
10.方法执行,返回给浏览器一段内容
jdbc工具类DBUtils操作步骤
导入dbutils包
创建QueryRunner对象
public QueryRunner(DataSource ds):参数为数据源对象,自动提交模式
public QueryRunner():手动提交模式
准备参数化sql语句
QueryRunner对象执行sql语句
public int update(String sql,Object、、、、params);:添加,删除,修改sql语句
参数1为参数化sql语句
参数2为给占位符赋值的实际参数
public<T> t query(String sql,ResultSetHandler<T> rsh, Object、、、params)
参数1为参数化sql语句
参数2为接口,ResultSetHandler:针对查询结果集数据表进行处理
子实现类
BeanListHandler<T>:将查询的每一条记录封装到T中,然后结果的多条记录封装到List<T>集合中
BeanHandler<T>:将查询的一条记录封装到T中,返回当前T
ScalarHandler<T>:查询单行单列数据封装到Object中
参数3为sql的实际参数
2.servlet本质
实现了servlet接口的普通的具体的java类,将HttpServlet中的具体doGet和doPost进行重写,以实现自己的业务
3.servlet架构体系
Servlet接口
构造servlet,然后使用init方法将其初始化
处理来自客户端对service方法的所有调用
从服务中取出servlet,使用destroy方法销毁它,最终进行垃圾回收并终止它
GenericServlet抽象类
重写了servlet接口中的部分功能,如init方法
提供自己的特有功能,如ServletContext方法
HttpServlet抽象类
重写service方法,通过判断提交方式来确定交由doGet方法处理还是由doPost方法处理
ServletDemo具体类
重写doGet和doPost方法,覆盖父类处理方法,处理方法中实现自己的业务逻辑
4.servlet的生命周期
1.创建:调用无参构造方法创建对象
2.初始化:调用init方法进行初始化
3.执行业务:调用service方法执行业务逻辑代码
4.销毁:服务器正常关闭,调用destroy方法销毁servlet对象
5.如何优化servlet
servlet是单列模式,内存中始终只有一个对象,可以在web容器启动时候,就创建一个servlet对象,在servlet基本配置中,设定servlet优先级load-on-startup为1
6.ServletConfig对象
介绍:servlet的配置对象‘,每一个servlet对象都有自己的配置对象
’ 作用:
public String getServletName():获取servlet类名
public String getInitParameter(String name):通过初始化参数名称获取参数内容
public Enumeration<E> getInitParameterNames():获取Servlet里面的所有参数内容
7.ServletContext全局对象的作用
作用一:获取上下文路径
public String getContextPath()
简单方式:通过请求对象request的getContextPath()方法获得
作用二:获取全局参数
public String getInitParameter(String name):通过参数名称获取参数值
public Enumeration<E> getInitParameterNames():获取全部参数名称
作用三:请求转发
public RequestDispatcher getRequestDispatcher(String path): 指定路径资源的包装器
public void forward(ServletRequest request,ServletResponse response):将请求从一个servlet转发到另外一个资源
直接方式:request.getRequestDispatcher(String path).forward(ServletRequest request,ServletResponse response);
原理:浏览器请求访问原来的servlet,原servlet里面将这个访问请求转发给另外一个资源,并将回应对象也给到另外一个资源,即可达到访问原来servlet时,实际访问访问另一个资源
特点:
1.地址栏没有变化,但是内容确实另外一个资源的
2.整个请求转发的过程中,两次request对象一致,第一次请求访问原servlet,原servlet将请求和相应对象都给了某个资源的包装器对象
3.某个jsp页面有业务需求,则在后台跳转页面时,都采用请求转发
4.请求转发可以访问当前web项目下所有资源文件
作用四:作为域对象在不同servlet中通信
setAttribute(String name.Object object):将name对应的值绑定到域对象中
getAttribute(String name):从域对象中获取指定name的值
removeAttribute(String name):将绑定的属性内容移除掉
8.域对象
pageContext:某个jsp页面有效
HttpServletRequest:一次请求中有效
HttpSession:一次会话中有效
ServletContext:全局对象,整个web应用程序有效
9.jsp中获取请求对象
jsp中的内置对象pageContext的request属性
10.jsp中的请求对象获得上下文路径
请求对象的contextPath属性