原则:从编写到显示的整个过程都采用同一种编码格式
1.eclipse默认编码改为utf-8
2.传输过程中的乱码
1.request请求乱码 request.setCharacterEncoding(“utf-8”);
2.response响应乱码 response.setCharacterEncoding(“utf-8”);response.setContentType(“text/html;charset=utf-8”);I上面还会出现乱码的解决方案
在配置文件server.xml中配置 URIEncodin=“UTF-8”
3.浏览器显示问题
4.数据库存储乱码
5./在web的前台代表的是tomcat的路径http://ip:端口号
/在web的后台是web应用路径http://ip:端口号/项目名
特点:
1.同一个请求
2.能够获取请求的数据
3.浏览器地址不会发生变化
用法:
1.获取转发器RequestDispatcherr
1.通过request获取转发器
2.通过ServletContext上下文获取转发器
2.进行跳转
1.通过forward跳转:会清空前一个response输出流的信息
2.通过include跳转:不会清空前一个response输出流的信息,
而且还会保存起来到跳转页面输出.
ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径;
而ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路.
因为ServletRequest具有相对路径的概念;而ServletContext对象无次概念。
2.重定向跳转 ,服务器外部跳转
通过response.sendRedireact(path);
path用绝对还是相对路径?
特点:
1.不是同一个请求,而是发送了多次请求
2.不能获取请求的数据
3.流浪器地址发生改变
4.能够访问其他的外部资源
用法:(就一种方式↓)
response.sendRedireact(path);
重定向中/不是代表资源路径
两者的注意点:
req.setAttribute("name", "张三");这个方法只对内部跳转有效果
使用request.setAttribute时不能使redirect而是forward。
即是将请求转发而不是重定向.
根本:都是相对tomcat下的路劲
在Servlet中使用绝对路径进行转发和重定向,他们的路径起算点是不相同的,转发时以项目名称作为起算点,重定向时以端口号作为起算点。而如果使用相对路径进行重定向或转发,他们都是以当前所在路径作为起算点。
会话跟踪技术:cookie,session
为什么要用cookie或者session?
http协议:无状态协议(不会保存前一个请求信息)
cookie:
主要保存在客户端,以文件的形式保存,在服务器端也有对应形式,但是方式不同.
1.原理:
cookie以文件形式保存于客户端,但是cookie由服务器端产生.
通过response响应给客户端.由客户端保存起来.
每次客户端发送请求时,会将cookie数据发送给服务器端.
所有服务器可以操作数据.
2.使用:自动登录功能
3.创建:cookie就是对象!
使用new 来创建 new cookie();
4.给客户端发送cookie;通过response发送
response.addCookie();//该发送吧cookie添加到响应
5.获取cookie
通过request.getCookies();
6.实践总结:
不同浏览器之间cookie不共享
关闭浏览器再次打开之后cookie就消失了.
7.设置cookie保存时间
cookie的有效期(存活期)单位:秒
默认就是浏览器开启不关闭期间,一旦关闭浏览器随之cookie消失
cookie对象提供了setMaxAge(int)来设置cookie有效时间
8.如果浏览器端禁用了cookie则无法保存cookie
9.在浏览器端保存的cookie只能是字符串文本形式.
session
是保存在服务器端的一个对象.客户端没有session
1.原理:
session由服务器端创建,保存在服务器端,由服务器端维护
以对象的形式保存.
每一个session对象都会创建一个对应的id,根据id来确定唯一的session
2.创建HttpSession
3.往session存储数据,任何数据类型都可以底层是个object
4.获取session数据
5.总结
1.JSESSIONID:cookie中的JSESSIONID和当前session的id保持一致
2.getSession(boolean) 可以传true或者false,
true是默认的如果是false不会创建新的session
6.session失效
1.关闭浏览器
2.手动使session失效,.通过invalidate()方法会让session失效
3.当session的不活动时间超过session最大存活期则失效
不活动时间:就是发呆时间,不累计
可以修改最大存活期
1.修改源码(不使用).源码中单位是秒
session.setMaxInactiveInterval();(不使用)
2.在配置文件中去配置web,xml(单位是分钟)
20
ServletContext是JavaWeb四大域对象之一:
在一个jsp页面有效
在内部跳转有效
使用:提示错误信息
不关浏览器都有效
不关服务器都有效
\获取ServletContext对象
ServletContext context = getServletContext();
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
第一阶段:类加载和实例化对象,主要工作就是调用构造器创建对象
servlet是单例模式
第二阶段:对象的初始化阶段,主要通过调用init方法给属性赋值
对象创建之后初始化操作也只会走一次
第三阶段:服务阶段,主要调用ervice来处理请求和响应
会多次调用
第四阶段:对象的销毁阶段,主要调用destory销毁对象,释放内存
tomcat正常关闭或重启会执行销毁对象释放内存
1.延迟加载(默认方式)
num
num>=0
都是预加载
,但是num越小,优先级越高
,num默认是-1
1.给固定的servlet类配置初始化.
.
.
.
...
name
value
....//可以有多个init-param
.......
public void init(ServletConfig paramservletConfig) throw Exception {
String name = paramservletConfig,getInitParameter("name");
System.out.println(name);
}
2.配置全局变量
name
value
.
.
.
public void init(ServletConfig paramservletConfig) throw Exception {
String name = paramservletConfig,getSerlvetContext().getInitParameter("name");
System.out.println(name);
}
synchronized(this) {
三个位置
在客户端和访问资源中间位置
在请求访问资源之前拦截
在响应客户端之前拦截
作用:
可以修改response和request中的数据
可以做日志输出
可以控制字符乱码
可以控制用户访问权限
三个方法
1.init方法:这个过滤器类被服务器创建的时候调用
2.destory方法:过滤器对象被销毁会调用
3.doFilter方法:当过滤器拦截到请求的时候,会调用
只有直接访问对应拦截的请求路径才会触发拦截器doFilter(),但是请求转发不会
<./filter-mapping>
filter的执行顺序就是web.xml的配置顺刷
拦截范围一定是由小到大
第一种精准匹配
第二种扩展匹配
第三种路径匹配
第四种匹配任意URL
假如使用同一个拦截器拦截多个地址
一个filter对应多个filter-mapping
TestFilter
com.briup.filter.TestFilter
TestFilter
/form/success.html
TestFilter
/form/login.html
注意:路径和扩展匹配不能同时使用
//error
作用:监听web中的一些事件的发生,一旦监听到,触发监听器内容操作,时刻监听
1.监听request相关接口
ServletRequestLinstenener接口针对request的创建与销毁
ServletRequestAttributeListener接口针对请求数据的添加,删除,替换
2.监听Session相关接口
HttpSessionListener接口针对session的创建与销毁
HttpSessiohAttributeLinstener接口针对session数据的添加,删除,替换
3.监听application相关接口
ServletContextListener接口
针对application的创建与销毁
ServletContextAttributeListener
针对application数据的添加,删除,替换