目录
Servlet
简介
开发动态web的一门技术
1.编写一个类,实现Servlet接口
2.把开发好的Java类部署到web服务器中
把实现了Servlet接口的Java程序叫做Servlet
this.getInitParameter("需要的参数名");//获得初始化的参数,
this.getServletConfig();//servlet配置
this.getServletContext();//servlet上下文
context.getResourcePaths();//获取资源的路径
context.getResourceAsStream();//获取资源把它变成流
context.getRequestDispatcher();//转发
ServletContext
web容器在启动的时候,他会为每一个web程序都创建一个对应的ServletContext对象,他代表了当前的web应用;
作用:可以共享数据
ServletContext context = this.getServletContext();//servlet上下文
String username = "宋燚";//数据
context.setAttribute("username",username);//将一个数据保存在了Servletcontext中
//读取数据
ServletContext context = this.getServletContext();
String username = (String)context.getAttribute("username");
请求转发
访问一个页面地址,改地址可以显示其他网页,但是访问路径并不会改变
context.getRequestDispatcher("/DengLuUserServlet").forward(request,response);
读取资源文件
HttpServletletResponse(响应)
服务器收到请求后,针对这个请求创建response和request
简单分类
负责向浏览器发送数据的方法
response.getOutputStream();//发送数据流
response.getWriter();//一般中文用这个
负责向浏览器发送响应头的方法(我目前不知道方法的目的)
response.setCharacterEncoding();
response.setContentLength();
response.setContentType();
response.setDateHeader();
response.setHeader();
response.setIntHeader();
响应的状态码
常量,百度查询
常见应用
1.向浏览器输出消息(看前边)
2.下载文件
(1)获取下载文件的路径
(2)下载的文件名
(3)设置想办法让浏览器能够支持下载我们需要的东西
(4)获取下载文件的输入流
(5)创建缓冲区
(6)获取OutoutStream对象
(7)将FileOutputStream流写入到buffer缓冲区
(8)使用OutputStream将缓冲区中的数据输出到客户端
3.实现验证码
response重定向
response.sendRedirect();
用户登录实现
HttpServletletRequest(请求)
1.获取前端传递的参数
2.请求转发
Cookie、Session
会话
用户打开一个浏览器,点击了很多链接,访问多个资源,这个过程可以称之为会话
有状态会话:曾经访问过的,有记录的客户端再次访问
一个网站,怎么证明你来过?
方法1:服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了;cookie
方法2:服务器登记你来过了,下次你来的时候我来匹配你;seesion
保存会话的两种技术:
cookie
客户端技术(响应,请求)
session
服务器技术,利用这个技术,可以保存用户的会话信息。可以吧信息或者数据放在Session中
Cookie
一个Cookie只能保存一个信息;
一个web站点可以给浏览器发送多个cookie(浏览器接受上限大概为300个);
cookie大小有限制4kb;
删除Cookie:
1.不设置有效期,关闭浏览器自动失效
2.设置有效期时间为0
cookie文件一般保存在用户目录的appdata下;
例子:首次登陆某个网站后,再次登录就不需要输入密码
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException {
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter out= response.getWriter();
//保存用户上一次访问的时间
//服务器告诉你你来的时间,把这个时间封装成一个信件,你下次来的时候带来,我就知道你来过了
//cookie,服务器端从客户端获取
Cookie[] cookies = request.getCookies();//可能有多个cookie,所以用数组
//判断cookie是否存在
if (cookies!=null){
out.write("上次访问时间:");
for (int i=0 ;i < cookies.length;i++){
Cookie cookie = cookies[i];
//获取cookie的名字
if ( cookie.getName().equals("lastlogintime")){
//获取cookie的值
cookie.getValue();
Long l = Long.parseLong(cookie.getValue());
Date date = new Date(l);
out.write(date.toLocaleString());
}
}
}else {
out.write("这是您第一次访问本站");
}
//服务器给客户端响应一个cookie;
Cookie cookie = new Cookie("lastlogintime",System.currentTimeMillis()+"");
//cookie有效期为一天
cookie.setMaxAge(24*60*60);
response.addCookie(cookie);
}
Session(重点)
服务器会给每一个用户(浏览器)创建一个Session对象
一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在;
Session在创建的时候,创建了一个Cookie,并且发送过去
例子:用户登录之后,整个网站他都可以访问–>保存购物车、用户的信息。。。
Session可以替代Context在跨servlet传递数据,常用在用户登录后的用户信息上
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException {
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
response.setContentType("text/html");
//得到session
HttpSession session = request.getSession();
//给session存东西
session.setAttribute("name","宋燚");
//获取session的id
String sessionid = session.getId();
//判断session是不是新创建
if (session.isNew()){
response.getWriter().write("session创建成功:"+sessionid);
}else {
response.getWriter().write("服务器中存在:"+sessionid);
}
//
//
}
得到session
注销session
1.手动注销
2.在XML文件里配置session的过期时间
session与cookie的区别:
JSP
JSP基础语法和指令
JSP脚本片段
JSP声明
EL表达式
定制错误页面
xml
当网站有公用的头部时
第一种:
第二种:
内置对象
使用EL表达式取不存在的值,网页什么也不显示,使用jsp<%=%>取值,会显示null
使用场景
前端页面跳转
JSP标签、JSTL标签、EL表达式
JSP标签
取参数:
JSTL表达式
菜鸟教程标签库
https://www.runoob.com/jsp/jsp-jstl.html
核心标签库引入语句
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
if标签测试
set标签、choose、when标签测试
遍历:
EL表达式获取表单中的数据