JavaWEB

Servlet

ServeltContext

web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前web应用;

  • 共享数据
    • 在这个servlet中保存的数据,可以在另外一个servlet中拿到
  • 获取初始化参数
    • 一边设置getServeltContext另一边设置setServeltContext

请求转发

getRequestDispatcher("地址")请求转发

`requestDispatcher.forword(上面写的) //调用forward请求转发

HttpServletResponse

web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse;

  • 如果要获取客户端请求过来的参数:找HttpServletRequest
  • 如果要给客户端响应一些信息:找HttpServletResponse

1,简单分类

负责向浏览器发送数据的方法

1. `getWriter()`写中文流用这个
2. `getOutputStream()`平常流用它

负责向浏览器发送响应头的方法

2,实现重定向

B一个web资源收到客户端A请求后,B他会通知A客户端去访问另外一个web资源C,这个过程叫重定向

sendRedirect()//重定向

HttpServletRequest

HttpServletRequest代表客户端的请求,用户通过http协议访问服务器,http请求中的所有信息会被封装到HttpServletRequest,通过这个HttpServletRequest的方法,获得客户端的所有信息

  1. 获取前端传递的参数

    getParamter()

  2. 请求转发

Cookie,Session

会话

会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话

有状态会话:你来过网站下次登陆我们会知道你曾经来过,称之为有状态会话

客户端 服务端

  1. 服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了;cookie
  2. 服务端登记你来过了,下次你来的时候我来匹配你;seesion

保存会话的两种技术

cookie

  • 客户端技术(响应,请求)

session

  • 服务器技术,利用这个技术,可以保存用户的会话信息,我们可以信息或者数据放在Session中!

常见场景:网站登录之后,你下次不用再登录,第二次访问直接就上去了

import com.sun.net.httpserver.HttpsServer;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

public class CookieDem01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost()
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        PrintWriter out = resp.getWriter();
        //Cookie,服务端从客户端获取
        Cookie[] cookies = req.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("name")){
                    //获取cookie中的值
                    long l = Long.parseLong(cookie.getValue());
                    Date date = new Date(l);
                    out.write(date.toLocaleString());
                }
            }
        }else {
            out.write("这是你第一次访问");
        }

        //服务器给客户端响应一个cookie
        Cookie cookie = new Cookie("name", "xiaoming");
         cookie.setMaxAge(60*60*24*1000);//设置时间保存时间
        resp.addCookie(cookie);
    }
}

Session

什么是session:

  • 服务器会给每一个用户(浏览器)创建一个session对象
  • 一个session独占一个浏览器,只要浏览器没有关闭,这个session就存在
  • 用户登录之后,整个网站它都可以访问-->保存用户信息,保存购物车信息

session和cookie区别

  • cookie是把用户的数据写给用户的浏览器,浏览器保存(可以存多个)
  • session把用户数据写到用户独占session中,服务器端保存(保存重要信息,减少服务器资源的浪费)
  • session对象由服务器创建;

使用场景:

  • 保存一个登陆用户的信息;

  • 购物车信息;

  • 整个网站中经常会使用的数据,我们将他保存在session中

  • import com.sun.net.httpserver.HttpsServer;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.*;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Date;
    
    public class CookieDem01 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.setCharacterEncoding("utf-8");
            resp.setCharacterEncoding("utf-8");
            resp.setContentType("text/html;charset=utf-8");
            //得到session
            HttpSession session = req.getSession();
            //给session中存东西
            session.setAttribute("name",new Person("xiaom",1));
            //获取session的ID
            String id = session.getId();
            //判断session是不是新创建的
            if(session.isNew()){
                resp.getWriter().write("创建成功"+id);
            }else {
                resp.getWriter().write("已存在"+id);
            }
        }
    }
    
    
    //得到session
            HttpSession session = req.getSession();
    Preson person=(Preson) session.getAttribute("name");
    System.out.println(person.toString());
    HttpSession session=req.getSession();
    session.removeAttribute("name");
    //手动注销session
    session.invalidate();
    

会话自动过期:web.xml配置

//设置session默认的失效时间
<session-config>
    //15分钟自动失效
    <session-timeout>15</session-timeout>
</session-config>

JSP

jsp:java服务器端页面,也和Servlet一样,用于动态web技术!

最大特点:

  • 写JSP就像写HTML
  • 区别
    • HTML只给用户提供静态的数据
    • JSP页面中可以嵌入java代码,为用户提供动态数据

jsp指令

<%@include file=""%>
这个会将两个页面合二为一
<jsp:include />
这个是拼接页面

九大内置对象

  • pageContext
  • Request
  • Respone
  • Session
  • Application(SerlvetContext) 存东西
  • config (SerlvetConfig)
  • out
  • page
  • exception

pageContext:保存的数据只在一个页面中有效

request://保存的数据只在一次请求中有效,请求转发会携带这个数据

session://保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器

application://保存的数据只在服务器中有效,从打开服务器到关闭服务器

JSP标签,JSTF标签,EL表达式

EL表达式:${}

  • 获取数据
  • 执行运算
  • 获取web开发的常用对象

JSTL表达式

JSTL标签库的使用就是为了弥补HTML标签的不足,它自定义许多标签,可以供我们使用,标签的功能和java代码一样!

javaBean

实体类

javaBean有特定的写法:

  • 必须要有一个无参构造
  • 属性必须私有化
  • 必须有对应的get/set方法;

一般用来和数据库的字段做映射ORM;

过滤器

Filter:过滤器,用来过滤网站的数据

监听器

实现一个监听器的接口;(有N种)

posted @ 2022-06-08 18:36  fieeDream  阅读(40)  评论(0)    收藏  举报