1.Cookie 和 Session:
相同点: 都可以用来保存数据
不同点:
Cookie的数据保存在浏览器端(客户端会话技术),有数据大小限制,相对不安全
Session保存的数据在服务器端(服务器端会话技术),没有数据大小限制,数据安全
会话: 一次会话中包含多次请求和响应
一次会话,即浏览器第一次给服务器资源发送请求,此时会话建立,直到有一方断开为止
功能: 在一次会话的范围内多次请求间,共享数据,如登录淘宝成功后,点击购物车,无需重复登录
2.Cookie: 作用: 存储少量的不太敏感的数据;不登录的情况下,完成服务器对客户端的身份识别
Cookie的使用:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 1. 创建Cookie对象,绑定数据 new Cookie(String name,String value)
* 2. 发送Cookie对象到浏览器 response.addCookie(Cookie cookie)
* 3. 获取Cookie,取数据 request.getCookies()
*/
Cookie cookie = new Cookie("localhost","128.0.0.1");
response.addCookie(cookie);// 可以创建多个Cookie对象,即多次调用addCookie方法
// Cookie[] cookies = request.getCookies();// 通过 .getName() 和 .getValue() 获取数据
}
cookie数据在浏览器中保存时间:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 1. 默认情况下,浏览器关闭后,Cookie中的数据被销毁
*
* 2. 设置cookie在浏览器端的失效时间: cookie对象.setMaxAge(时间);
* 正数: 将Cookie数据写到磁盘文件中,并指定存活时间,时间到后,cookie文件自动失效
* 负数: 默认值
* 零: 删除cookie信息
*/
Cookie cookie = new Cookie("localhost","128.0.0.1");
cookie.setMaxAge(24 * 3600);// 单位秒
response.addCookie(cookie);
}
cookie存储中文数据:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 使用URL编码存储,URL解码解析
// URL编码
String str_value = URLEncoder.encode(value,"utf-8");
// URL解码
str_value = URLDecoder.decode(value,"utf-8");
}
3.Session:
获取对象: request.GetSession();
存取数据: getAttribute(String name) setAttribute(String name,Object value)
注:
a.客户端关闭后,服务器不关闭,两次获取的session不同(如需相同,可以通过创建Cookie键为JSESSIONID,并延长cookie时间来实现)
b.客户端不关闭,服务器关闭,两次获取的session不同
4.Json:
导包:
JSONObject 和 JSONArray:
/*
* new JSONObject(参数):
*
* 可以将 JavaBean/map集合 变成一个 json规范的数据
*/
JSONObject jsonObject = new JSONObject();
/*
* new JSONArray(参数):
*
* 如果是List<实体类>或List<Map<String,Object>>时,使用JSONArray将其变成json规范
*/
JSONArray jsonArray = new JSONArray();
json工具类: fastjson
5.Filter: 过滤器: 当访问服务器的资源时,filter将请求拦截下来,完成一些业务操作
基本使用:
实现Fliter接口,并复写doFilter方法:
// @WebFilter("需要拦截的资源") // 使用注解就可以不用配置xml
public class _01_HelloFilter implements Filter {// 实现Filter接口
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
System.out.println("_01_HelloFilter start");
// chain.doFilter(): 放行
chain.doFilter(request, response);
System.out.println("_01_HelloFilter end");
}
/**
* 初始化数据
*
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// filterConfig可以获取xml中的全局参数和局部参数
}
/**
* 销毁方法
*
* @see javax.servlet.Filter#destroy()
*/
@Override
public void destroy() {
}
}
web.xml中进行注册: 注: /* 为拦截所有资源
注:
Filter可以有多个,即在xml中注册多个,哪个filter的mapping先写,在访问同一过滤资源时就先执行哪个
应用:
设置字符编码:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
// 获取xml中的全局变量
String encoding = request.getServletContext().getInitParameter("encoding");
if (encoding == null || encoding.trim().equals("")) {
encoding = "utf-8";// 设置utf-8编码
}
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
response.setContentType("text/html;charset=utf-8");
chain.doFilter(request, response);
}
检验用户是否登录: (登录成功后将用户名存入session域中,后期通过filter来判断是否登录,如没有登录,不能访问其他网页,直接跳转到登录页面)
6. Listener:(监听器)
ServletContextListener: (监听器之一)监听ServletContext对象的创建和销毁
// @WebListener // 使用注解,就可以不用配置xml
public class ContextLoaderListener implements ServletContextListener {
/**
*
* ServletContext对象创建后会调用该方法
*
* @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
*/
@Override
public void contextInitialized(ServletContextEvent sce) {
// 通常在contextInitialized()方法中,我们会进行资源文件的加载
// sce.getServletContext().getInitParameter("password");
}
/**
*
* ServletContext对象被销毁之前会调用该方法
*
* @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
*/
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
7.常见问题:
500: 服务器内部排错
404: 主要就是前后端路由的问题,肯定不一致
先看地址栏 , 地址栏的url是否和你写的一样
再看错误信息,会说明 哪个路径没有找到
405: 说明 你当前是get请求,而 后端是doPost方法