day_01_Servlet

Servlet

学习地址

1. HTTP

超文本传输协议,规定了客户端和服务端的传输规则
客户端发送给服务器:请求
服务器返回给客户端:响应

2.1 Http的特点

  1. 支持客户/服务器模式
  2. 简单快速:只需请求方法和路径
  3. 灵活:传输类型不限定
  4. 无连接:处理完请求,接受应答后断开连接
  5. 无状态:无法处理之前的事务

2.2 HTTP-URL

http-url:是一种特殊的url
在这里插入图片描述
URI 在于I(Identifier)是统一资源标示符,可以唯一标识一个资源。URL在于Locater,一般来说(URL)统一资源定位符,可以提供找到该资源的路径,比如http://www.zhihu.com/question/21950864,但URL又是URI,因为它可以标识一个资源,所以URL又是URI的子集。

http://+IP:+端口(port)+/访问资源路径(abc_path)

  • http:// 通过http协议定位网络资源
  • host:主机域名/IP地址
  • port:端口号,缺省为80端口
  • abc_path:指定资源的URI

2.3 Http请求

Http请求有三部分组成:

  1. 请求行:请求方式+请求地址+请求版本
  2. 请求头:键值对
  3. 请求正文:get 没有post有

2.4 Http响应

  1. 响应行:协议版本、响应状态码、说明
  2. 响应头:键值对
  3. 响应正文:浏览器中看到的

2.5 消息头

2.5.1 请求头

referer : 请求是从哪个页面发出的(防盗链、百度竞价)
例如:邀请好友,点击好友的链接…

2.5.2响应头

Location:重定向接收者的新位置,常用于更换域名
Refresh : 自动跳转(秒)

3.Servlet创建

  1. 创建jiavaweb工程
  2. 创建类实现Servlet规范,继承HttpServlet类
  3. 业务实现,重写service方法,处理请求
  4. 设置注解@WebServlet("/ss") :ss:访问标记

3.1 Servlet生命周期

  1. 实例和初始化时机:请求到达容器
  2. 就绪、调用、服务阶段:调用Servlet的service反法
  3. 销毁时机:关闭容器、应用程序停止时,servlet实例会销毁
    在这里插入图片描述

4 Servlet的HttpServletRequest对象

HttpServletRequest:用于接受客户端请求信息,由服务器直接通过Servlet容器获取

4.1常用方法

获取请求时完整路径(http—>?): request.getRequestURL();
获取请求时部分路径(项目名—>?): request.getRequestURI();
获取请求时参数字符串(?之后):request.getQueryString();
获取请求方式(get 、post):request.getMethod();
获取协议版本:request.getProtocol();
获取项目站点名( 项目对外访问路径):request.getContextPath();

url:http://localhost:8080/ss/ss01
uri:/ss/ss01
qs:null
method:GET
pro:HTTP/1.1
cp:/ss

4.2获取指定名称的参数值

   String name = request.getParameter("name");
   String pwd = request.getParameter("pwd");
   String[] classes = request.getParameterValues("classes");
   System.out.println("name:" + name+"\n"+"password:"+pwd);
name:ys
password:ys116291

4.3表单提交:ss01为service所在的那个@WebServlet("/ss01")

<form action="ss01" method="post">
    姓名 <input type="text" name="name"> <br>
    密码 <input type="password" name="pwd"> <br>
    <button>登录</button>
</form>

设置接受请求的字符集(只针对post请求):

        //接受请求的字符集
        request.setCharacterEncoding("UTF-8");

4.4 请求转发

在这里插入图片描述

填写url:转发到哪个service

  request.getRequestDispatcher("ss02").forward(request,response);

也可以跳至html jsp

request.getRequestDispatcher("tz.html").forward(request,response);

1. 地址栏不变
2. ss01 ss02都执行了同一个请求,数据共享

4.5request作用域

通过该对象可以在一次请求中传递数据,作用范围:一次请求—>服务器跳转有效
让两个service传输数据
setAttribute() 设置域对象
getAttribute() 获取域对象

@WebServlet("/ss03")
        request.setAttribute("name","aaa");
        request.setAttribute("age",22);
        request.getRequestDispatcher("/ss04").forward(request,response);
@WebServlet("/ss04")
        Object name = request.getAttribute("name");
        Object age = request.getAttribute("age");
        System.out.println(name);
        System.out.println(age);

5. Servlet的HttpServletResonse对象

通过resonse对象向客户端输出数据

5.1 响应数据

5.1.1 getwrite(); 字符输出流(输出字符串)
5.1.2 getOutputStream(); 字节输出流(输出任意数据)
        //输出流
        PrintWriter writer = response.getWriter();
        writer.write("hello");
        
        ServletOutputStream outputStream = response.getOutputStream();
        outputStream.write("这是一个输出字节流".getBytes());

只能存在一种输出流
两种输出流都会乱码,因此需要设定服务端、客户端的编码格式。

5.1.3 设置客户端、服务端编码集
        //同时设定两端编码集
        response.setContentType("text/html;charset=UTF8");

6.重定向

服务器指导,客户端的行为。客户端请求1,服务器响应1,并给客户端一个新的url,客户端立刻自动访问这个url,发出请求2,服务器处理请求2,重定向完成。

在这里插入图片描述

      response.sendRedirect("ss04");
  1. 服务端指导,客户端行为
  2. 两次请求
  3. 地址栏发生改变,参数无法共享,区别于请求转发。

7.请求转发于重定向的比较

在这里插入图片描述
当前后两个页面有数据传递时,例如查询了数据需要在页面显示时,用请求转发
当没有数据传递,例如做了更新操作跳转到其他页面,就用重定
想要跳转的地址不是当前项目下的只能用重定向,即请求转发不能跨域

8 Cookie对象

将一些只需保存在客户端的数据,放到本地计算机中,不需要通过网络传输,Cookice是服务器端保存在客户端的信息,安全性较差。

8.1Cookie创建 及发送

        //创建cookie
        Cookie cookie = new Cookie("name","ys");
        //发送cookie
        response.addCookie(cookie);

8.2获取cookie

		//获取cookie数组
        Cookie[] cookies = request.getCookies();
        //遍历
        for (Cookie i:cookies
             ) {
            System.out.println("name:"+i.getName());
            System.out.println("nvalue:"+i.getValue());
        }
    }

8.3Cookie的到期时间

Cookie的默认到期时间为了浏览器关闭时失效
通过setMaxAge(int time)

  1. 负整数:关闭浏览器则失效
  2. 正整数:指定存活秒数,将数据存在磁盘中。
  3. 0:删除指定的cookie
        cookie.setMaxAge(30);
        cookie.setMaxAge(-1);
        cookie.setMaxAge(0);

8.4 Cookie的注意点

  1. 只存储在当前浏览器中,当前磁盘中
  2. COOkie不能存储中文
  3. 重复的Cookie会覆盖
  4. 有上限、有大小限制

8.5 Cookie的路径

四种情况:

  1. 当前服务器下任何项目都可以访问到Cookie
  2. 当前项目下的资源可以访问到Cookie
  3. 指定项目下的资源可以访问到Cookie
  4. 指定目录下的资源可以访问到Cookie

9.HttpSession对象

session是为了标记一次会话或者一个用户,并且再一次会话期间共享数据,session保存在当前浏览器中,并在相关页面获得。

9.1获取session

HttpSession session = request.getSession();

获取session时,若不存在则创建session
获取sessionid

String id = session.getId();
E68DAA7ED656C391EE9A7CEA417B5977
E68DAA7ED656C391EE9A7CEA417B5977
E68DAA7ED656C391EE9A7CEA417B5977

每当一次请求到达,如果开启了session,

  1. 服务器会查看从客户端传回的名为JSESSIONID的cookie,如果没有则创建新的session,
  2. 如果有则是否含有id与传回的id相同的session,没有则创建新的会话,
  3. 反之不创建,返回该重复的session对象实现数据共享。
    JSESSIONID:会话标识符

9.2Session域对象

创建session域对象

        session.setAttribute("sname","ys");
        session.setAttribute("spwd","ys116");

获取session域对象

String sname = (String) request.getSession().getAttribute("sname");
String spwd = (String) request.getSession().getAttribute("spwd");

结论:session域中的对象,无论是重定向,还是请求转发,都能共享数据,而request域中的对象,仅仅在请求转发时才能共享数据,重定向后就无法共享。即无法跨域。

9.3 Session对象的销毁,共享的数据失效

  1. 默认销毁时间:30分钟(不操作开始计时)
  2. 自定义 在tomcat 的web.xml的配置文件中ctrl-f :session-config 修改
  3. session.setMaxInactiveInterval();修改指定的session 参数是秒
  4. ** 立即销毁:session.invalidate(); (常用)**
  5. 关闭浏览器失效,因为session依赖的Jsessionid是一个cookie,而cookie默认为关闭浏览器失效。

10. ServletContext对象

10.1获取servletcontext对象

  1. 通过request获取(常用)
  ServletContext servletContext = request.getServletContext();
  1. 通过session获取
ServletContext servletContext1 = request.getSession().getServletContext();
  1. 通过servletConfig对象获取
 ServletContext servletContext2 = getServletConfig().getServletContext();
  1. 直接获取
ServletContext servletContext3 = getServletContext();

10.2常用方法

获取当前服务器版本信息

request.getServletContext().getServerInfo();
Apache Tomcat/9.0.56

获取项目的真是路径

request.getServletContext().getRealPath("/");
D:\servlet_learn\target\servlet_learn-1.0-SNAPSHOT\

10.4servletcontext域对象

整个应用程序有效,服务器关闭才失效,但是不推荐使用

Servlet的三大域对象

1. request域对象:仅仅在一次请求中有效,重定向失效
2. session域对象:在一次会话中有效。session销毁失效
3. servletcontext域对象:整个应用程序有效,服务器关闭失效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值