目录
1. Tomcat基本结构
2. Servlet简介:
- 是一种web服务端编程技术
- 实现了特殊接口(HttpServlet)的java类
- 由支持servlet的web服务器调用和启动运行
- 一个servlet负责对应一个或一组URL访问请求,并返回响应内容
3. Servlet访问流程:
- 浏览器发送请求到服务器
- 服务器根据请求URL地址中的URI信息(虚拟项目名+servlet别名), 在webapps目录下找到对应的项目文件夹
- 在web.xml中检索对应的servlet
- 调用并执行servlet
4. Servlet生命周期
- 在servlet接受第一次请求的时候创建对象(单例)
- 在服务器关闭时销毁
- 可以通过配置web.xml:load-on-startup来控制在开启tomcat时就创建servlet对象
5. Servlet编码注意:
不需要编码service方法,只需实现doGet和doPost方法,service()的父类实现中调用了doGet和doPost方法
404: 访问资源不存在
- 请求路径与web.xml中的不一致
- 请求的项目虚拟路径填错
405: 不支持的URL
- 请求的方式与servlet支持的方式不一致
500: 服务器内部错误
- web.xml中servlet类名、包名不对
- servlet对应的处理方法中存在代码逻辑错误
6. 如何解决tomcat,URI中文乱码:
1.get:
获取字符串之后使用
new String(name.getBytes("iso-8895-1"),"utf-8");
设置request的编码格式,同时在server.xml中添加useBodyEncodingForURI="true"
在server.xml中添加URIEncoding="utf-8"
2.post:
request.setCharacterEncoding("utf-8")
3.response响应编码:
- response.setCharacterEncoding("gbk");
- response.setContentType("text/html;charset=utf-8");
7. Servlet 请求转发:
- 客户端只发送一次请求
- 浏览器的地址栏地址未发生变化
- 请求过程中只有一个request和response,几个servlet共享
- 对客户端透明
8. Servlet重定向:
- 浏览器发送多次请求
- 浏览器地址发生变化
- 请求过程中多个request、response对象
- 两个servlet不能共享同一个request、response对象
9.Cookie
1. 使用
//设置cookie
Cookie cookie = new Cookie("00001", "beijing");
response.addCookie(cookie);
cookie.setPath("/cookie/abc"); //设置固定路径 url
cookie.setMaxAge(3*24*3600); //单位是秒 int
//使用cookie
Cookie[] cookies = request.getCookies();
2. 特点
- cookie是保存在浏览器端的数据名称
- 每个cookie中只保存一个key-value对,如果需要存储多个键值对,需要创建多个cookie对象
3. 分类:
- 临时cookie:默认存储在内存中,当浏览器关闭时,cookie自动失效
- 持久化cookie:保存在浏览器的某个目录,当时间过期之后才会失效
10.Session
1. 概念:
- Session表示会话,在一段时间内,用户与服务器之间的一系列交互操作
- Session对象:用户发送不同请求时,在服务端保存不同请求共享数据的存储对象
2.特点:
- Session是依赖Session技术的服务端的数据存储技术
- 由服务器进行创建
- 每个用户独立拥有一个Session对象
- 默认存储时间是30分钟
- 每次关闭浏览器后,重新请求都会开启新的Session对象,因为返回的JSESSIONID保存在浏览器内存中,是临时cookie,所以关闭之后会消失
3.使用:
HttpSession session = request.getSession();
session.setMaxInactiveInterval(5); //设置Session有效时长,单位:秒
session.invalidate(); //强制失效
session.setAttribute("key", "value");
11.SevletContext
1.概念:
- 运行在JVM上的每一个web app都应该有一个与之对应的Servlet上下文(Servlet运行环境)
- Servlet API提供ServletContext接口用来表示Servlet上下文
- ServletContext可以被web app中的所有servlet访问
- ServletContext对象是web服务器中一个已知路径的根
2.作用域:
- ServletContext由服务器创建
- 一个项目只有一个对象,不管在任意位置获取到的都是同一个对象
- 不同用户发起的请求获取到的也是同一个对象,该对象由用户共同拥有
3.使用(详细见API文档):
//1.servlet1
ServletContext servletContext = this.getServletContext();
servletContext = this.getServletConfig().getServletContext();
servletContext = request.getSession().getServletContext();
servletContext.setAttribute("name", "zhangsan");
//2.在web.xml中设置ServletContext属性
<context-param>
<param-name>age</param-name>
<param-value>18</param-value>
</context-param>
//在其他servlet中使用
ServletContext context = this.getServletContext();
System.out.println(context.getAttribute("name"));
//获取web.xml中设置的属性
context.getInitParameter("age");
12.ServletConfig
1.作用:
每个Servlet对象都单独拥有一个ServletConfig对象,用来获取web.xml中的配置信息
2.使用:
- 获取ServletConfig对象
- 获取web.xml中的Servlet配置信息
ServletConfig config = this.getServletConfig();
13.JSP
1.常用的几种动态网页技术:
- JSP(Java Server Page)
- ASP(Active Server Page)
- PHP(Hypertext Preprocessor) 超文本预处理语言
2.本质:
JSP就是Servlet,也是Java类,通过JSP引擎将JSP翻译成Servlet。 JSP ~= Java + HTML
3.原理:
- 在Tomcat的web.xml配置文件中:
<!-- The mapping for the default servlet -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- The mappings for the JSP servlet -->
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
4.详细过程:
- 浏览器输入:localhost:8080/jsp/1.jsp
- tomcat收到*.jsp请求,则会到org.apache.jasper.servlet.JspServlet处理
- JspServlet调用相应的java类,jsp引擎根据_1_.jsp生成的java类(位于tomcat子目录work下面:_1_jsp.java,_1_jsp.class)
- 执行_1_.jsp.class,将HTML数据输出给tomcat,tomcat再将这些数据输出给客户端
5. 基本使用: JSP基本使用
14.EL(Expression Language)
- 作用:让JSP书写更方便,简化JSP在获取作用域或者请求数据的写法
- 语法:
- ${expression}
- 提供.和[]两种运算符来获取数据: 获取值时,直接使用属性的key,用.获取引用,用[]获取指定索引位置的对象
- 可以进行算数运算和关系运算
- 作用域: pageContext–>request–>session–>application
-可通过pageScope, requestScope,sessionScope,applicationScope获取指定作用域的数据
4.示例代码 : Link
15.JSTL
(Java server pages standarded tag library,即JSP标准标签库)
帮助我们在jsp页面中添加复杂的逻辑判断,避免逻辑代码和页面标签混为一谈, JSTL是EL的扩展,同时,JSTL依赖于EL
JSTL的导入: 添加jstl.jar,standard.jar到web-inf下的lib目录
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
16.Filter过滤器
1.概念:
- 过滤器是能够对web请求和web响应的头属性和内容体进行操作的一种特殊web组件
- 过滤器的特殊之处在于本身并不直接生成web响应,而是拦截web请求和响应,以便查看、提取或以某种方式操作客户机和服务器之间交换的数据
2.功能:
- 分析web请求,对输入数据进行预处理
- 阻止web请求和响应的进行
- 根据功能改动请求的头信息和数据体
- 与其他web资源协作
3.工作原理
4.生命周期
5.使用方式:
- 定义普通java类,实现Filter接口
- 重写其中的方法
init :完成初始化功能 tomcat启动的时候执行一次
dofilter:进行处理 每次发送请求都会执行
destory:销毁功能 tomcat关闭的时候执行
<filter>
<filter-name>filter</filter-name>
<filter-class>com.wangxshen.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- filterChain:表示过滤器链
- 在项目中可以定义N多个过滤器,当开始执行的时候,根据用户的请求把符合规则的过滤器挨个执行
- 建议:每个过滤器完成独立的功能,不要讲所有的逻辑处理放置到同一个过滤器中,耦合性高,不利于维护
- 在过滤器的web.xml配置文件中,可以指定过滤器过滤那些请求:
/* : 匹配所有请求 *
/*.do : 匹配所有后缀为do的请求
/filter.do :匹配请求为filter.do的请求
17.监听器
/**
* 监听器:
* 监听作用域对象的创建和销毁以及属性的相关配置,可以添加一些公共的属性配置,做逻辑判断
*
* 主要监听三种作用域:
* ServletContext(application) session request
*
* 1. request
* 接口:
* ServletRequestListener:监听request对象的创建和销毁
* public void requestDestroyed(ServletRequestEvent servletRequestEvent) request对象销毁时添加的逻辑代码
* public void requestInitialized(ServletRequestEvent servletRequestEvent) request对象创建时添加的逻辑代码
* ServletRequestAttributeListener:监听request作用域属性的添加,删除和更改
* public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) 属性添加时要做的事情
* public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) 属性删除时要做的事情
* public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) 属性更改时要做的事情
*
* 2. servletcontext:
* 接口:
* ServletContextListener 监听servletcontext对象的创建和销毁
* public void contextInitialized(ServletContextEvent servletContextEvent) 创建对象,当启动tomcat服务器的时候创建
* public void contextDestroyed(ServletContextEvent servletContextEvent) 销毁对象,关闭tomcat服务器的时候销毁
* ServletContextAttributeListener 监听servletcontext对象的属性的添加和删除和更改
* public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) 添加属性
* public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) 删除属性
* public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) 更改属性
*
* 3. Session:
* 接口;
* HttpSessionListener: 监听session对象的创建和销毁
* public void sessionCreated(HttpSessionEvent httpSessionEvent) session对象创建的时候执行
* public void sessionDestroyed(HttpSessionEvent httpSessionEvent) session对象销毁的时候执行
* HttpSessionAttributeListener :监听session对象中属性的添加,删除和更改
* public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) 添加属性时被调用
* public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) 删除属性时被调用
* public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) 修改属性时被调用
*
*/