Servlet(三层架构思想)
1、Servlet概述
servlet是一种独立于平台和协议的服务器端的java应用程序,通过Servlet可以生成动态的Web页面。
同时,使用Servlet还可以在服务器端对客户端的请求进行处理,控制程序的执行。Servlet的主要作用就是交
互式的浏览和更新数据
2、Servlet的生命周期
tomcat启动的时候默认不会帮我们创建servlet,当第一次请求过来的时候tomcat帮我们创建servlet对象,
之后所有该servlet的请求共用同一个servlet对象(在servlet里面最好不要使用全局变量)
生命周期四个阶段:
实例化:servlet容器创建Servlet的实例
初始化:该容器调用init()方法
提供服务,请求处理:如果请求Servlet,容器调用service层方法处理请求
销毁:销毁实例之前调用destory()方法(destroy方法指明哪些资源可以被系统回收,而不是由destroy()方
法直接进行回收)
3、怎么通过URL访问Servlet
1、编写一个类,该类必须继承HttpServlet
2、重写doGet()以及doPost()方法 (doGet()方法处理get请求,doPost()方法处理post请求,所以在doPost()
方法中调用doGet()方法即可)
3、在web.xml里面给servlet配置请求路径(web.xml该配置文件中可以对整个应用进行全局配置,tomcat加
载该项目是首先读取的就是该配置文件)
1 | <?xml version="1.0" encoding="UTF-8"?> |
还可通过注解方式使用Servlet,这种方式使用不用手动配置,直接右键new–>Servlet
4、Servlet中怎么获取表单数据
1 | //获取表单中的密码password |
5、如何操作四大作用域
1、获取session作用域:request.getSession()
2、获取application作用域:
通过父类提供的方法获取:request.getServletContext()
通过session获取:request.getSession().getServletContext()
6、如何跳转页面
学到哪都两种跳转方式:请求转发:request.getRequestDispatcher(“跳转页面名”)
重定向:response.sendRedirect(“跳转页面名”);
7、过滤器
一般用途就两种:字符编码过滤器和用户是否登录过滤器
1、字符编码过滤器
1 | package com.wanglei.filter; |
注意:在web.xml文件中配置过滤器(千万别忘记)
1 | <?xml version="1.0" encoding="UTF-8"?> |
2、是否登录过滤器
1 | package com.wanglei.filter; |
8、EL表达式和jstl标签(C标签)
利用这两个来消除JSP页面的JAVA代码,提高代码的阅读性
8.1.EL表达式
EL表达式:负责从各种作用域中取值,以及一些简单的运算
1.取四大作用域值:${requestScope.req },如果省略作用域名称那么默认先从最小作用域中搜索,找到输出
2.取list集合:${news }
3.取list集合第二个元素:${news[1]}
4.取list集合第二个元素的title属性:${news[1].title} 直接写属性名称即可,不用get方法
5.取表单数据:${param.pg} 一定要用param.表单元素名
6.取cookie数据:${URLDecoder.decode(cookie.nameCookie.value,’utf-8’)}
格式为cookie.Cookie名字.value
7.一些运算:+ - * /
|| && !
8.2.jstl标签(C标签)
1.导入jstl的jar包
2.在页面引入c标签库:
1 | <%"c" uri="http://java.sun.com/jsp/jstl/core"%> prefix= |
常用标签:
1 | <c:out>标签用来显示数据,类似于<%=%>输出方式,但是可以进行选择性转义输出和设置默认值 |
1 | <c:set>标签用来对作用域内容的变量或者对象属性进行设置 |
1 | <c:remove>标签用来移除作用域范围内的变量 |
1 | <c:forEach>标签用来迭代输出,类似于foreach循环 |
1 | <c:if>标签类似于if单分支选择 |
1 | <c:choose>标签类似于多分支选择结构if-else if -else |
1 | 动态拼接URL标签 |
1 | 格式化日期 |
9、相对路径和绝对路径
绝对路径:http://localhost:8090/项目名/资源路径
相对路径:如果jsp页面有<%=basePath%>那么页面上的所有路径相对于项目根目录,如果没有
<%=basePath%>相对于访问该资源的路径(就是浏览器地址栏显示的路径)拼相对路径,在过滤器中的相对路径,
相对于该过滤器拦截到的请求
ADD
servlet 工作工作过程和原理
- 将 webapps 下的每个子文件夹发布为一个网站
- 读取每个网站的WEB-INF/web.xml配置文件, 获取每个网站对应的servlet类(类和对应的url地址),如果Servlet 类配置中有
, 创建servlet对象
Servlet 类的对象的创建
- 由 tomcat 服务器来创建
- 创建时间
- 当配置时有
:服务器启动时 - 没有
: 第一个请求对应地址时
- 当配置时有
- 创建对象个数:只有一个, Servlet 为单例对象
Servlet 类是线程不安全的, 所以要避免给 Servlet 类定义属性
Tomcat 启动过程
扫描 webapps 下面的所有网站
读取每个网站的 web.xml 获取 Servlet 类和对应的地址, 合并 conf/web.xml 中的 Servlet 类, 得到表格:
网站 | 地址 | Servlet类 |
---|---|---|
通用 | ×.jsp | jspServlet |
自定义Servlet | web.xml 映射的地址 | 自定义Servlet |
通用 | / | DefaultServlet |
Tomcat 的请求处理过程
创建请求对象
request
和配套的响应对象response
, 将请求数据包中的数据封装到request请求的对象中找到 servlet 类:按本次请求的地址到启动过程中建立的表格中一一对比, 找到 Servlet 对象
得到 Servlet 对象: 判断 Servlet 对象是否存在, 如果不存在, 则创建新的 Servlet 对象
调用 Servlet 对象的
doGet
/doPost
方法处理请求
Servlet开发过程中常用的内置对象
tomcat服务器已经创建的对象,我们直接使用就OK
request:请求对象,封装了请求数据包中的数据
response:响应对象,保存处理过程中产生的结果
servletConfig:初始化参数对象,保存配置文件中servlet配置中的初始化参数. 初始化参数配置在servlet中,适用于指定的servlet
- servletContext:上下文对象,域对象,保存配置文件中配置的初始化参数. 初始化参数配置在servlet之外,适用于所有的servlet