开发动态web的一门技术 1.编写一个类,实现Servlet接口 2.把开发好的Java类部署到web服务器中 把实现了Servlet接口的Java程序叫做Servlet
this.getInitParameter("需要的参数名");//获得初始化的参数, this.getServletConfig();//servlet配置 this.getServletContext();//servlet上下文 context.getResourcePaths();//获取资源的路径 context.getResourceAsStream();//获取资源把它变成流 context.getRequestDispatcher();//转发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);服务器收到请求后,针对这个请求创建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();用户登录实现
1.获取前端传递的参数 2.请求转发
用户打开一个浏览器,点击了很多链接,访问多个资源,这个过程可以称之为会话 有状态会话:曾经访问过的,有记录的客户端再次访问
一个网站,怎么证明你来过?
方法1:服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了;cookie
方法2:服务器登记你来过了,下次你来的时候我来匹配你;seesion
保存会话的两种技术: cookie 客户端技术(响应,请求)
session 服务器技术,利用这个技术,可以保存用户的会话信息。可以吧信息或者数据放在Session中
一个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在创建的时候,创建了一个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声明 EL表达式 定制错误页面 xml 当网站有公用的头部时 第一种: 第二种:
使用EL表达式取不存在的值,网页什么也不显示,使用jsp<%=%>取值,会显示null
使用场景
取参数:
菜鸟教程标签库 https://www.runoob.com/jsp/jsp-jstl.html 核心标签库引入语句
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>if标签测试 set标签、choose、when标签测试 遍历:
EL表达式获取表单中的数据
