JavaWeb_Study

1.Servlet

1、servlet简介

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

2、快速入门

1.创建web项目,导入Servlet依赖坐标

<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
</dependency>

2.创建一个类实现Servlet接口,重写接口里的方法,并在service方法中输出一句话

public class ServletTest implements Servlet {
  @Override
  public void service(ServletRequest servletRequest,
                      ServletResponse servletResponse) throws ServletException, IOException {
    System.out.println("Servlet HelloWorld");
	}
  }

3.在类上使用@WebServlet(“/servlet”)注解,配置该注解的访问路径

@WebServlet("/servlet")

4.启动Tomcat,浏览器访问url

http://localhost:8080/servlet

3、Servlet执行流程

在这里插入图片描述

4、Servlet生命周期

1) 初始化阶段
当用户第一次向 Servlet 容器发出 HTTP 请求要求访问某个 Servlet 时,Servlet 容器会在整个容器中搜索该 Servlet 对象,发现这个 Servlet 对象没有被实例化,于是创建这个 Servlet 对象,然后调用该对象的 init() 方法完成初始化。

当用户第二次访问这个 Servlet 时,Servlet 容器仍然在容器中搜索该 Servlet 对象,结果找到了该对象的实例,则不去创建而直接使用该对象。

找到了对应的 Servlet 对象,随后 Servlet 进入到运行阶段。

需要注意的是:在 Servlet 的整个生命周期内,它的 init() 方法只被调用一次。
2) 运行阶段
这是 Servlet 生命周期中最核心的阶段。在该阶段中,Servlet 容器会为当前的请求创建一个 ServletRequest 对象和一个 ServletResponse 对象(它们分别代表 HTTP 请求和 HTTP 响应),并将这两个对象作为参数传递给 Servlet 的 service() 方法。

service() 方法从 ServletRequest 对象中获得用户的详细请求信息并处理该请求,通过 ServletResponse 对象生成响应结果。

需要强调的是:在 Servlet 的整个生命周期内,用户每次请求访问 Servlet 时,Servlet 容器都会调用一次 Servlet 的 service() 方法,并且创建新的 ServletRequest 和 ServletResponse 对象。
3) 销毁阶段
当服务器停止时,Servlet 容器需要回收 Servlet 对象所占用的内存,在回收之前,会自动调用该对象的 destroy() 方法做好回收内存前的准备,辟如关闭后台线程。

和 init() 方法类似,destroy() 方法也只会被调用一次。

注意:Servlet 对象一旦创建就会驻留在内存中一直等待客户端的访问,直到服务器关闭或项目被移除出容器时,Servlet 对象才会被销毁。

5、Servlet体系结构

在这里插入图片描述

6、Servlet urlPattern配置

1.精确匹配

  • 配置路径:@WebServlet(“/user/select”)

2.目录匹配

  • 配置路径:@WebServlet(“/user/*”)

3.扩展名匹配

  • 配置路径:@WebServlet(“*.do”)

4.任意匹配

  • 配置路径:@WebServlet(“/”)
    @WebServlet(“/*”)

7、xml配置方式编写Servlet

<servlet>
    <servlet-name>myServlet</servlet-name>
    <servlet-class>*.myservlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>myServlet</servlet-name>
    <url-pattern>/myServlet</url-pattern>
</servlet-mapping>

2.Request

1.Request继承体系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qjNSbgHq-1660049256336)(http://rc84v4b6q.hn-bkt.clouddn.com/a98c2bd7-38c9-4808-a9b3-3625477af713.png)]

2.Request获取请求数据

1.请求行

String getMethod():获取请求方式:GET

String getContextPath():获取虚拟目录(项目访问路径):/request-demo

StringBuffer getRequestURL:获取URL(统一资源定位符):http://localhost:8080/request-demo/req1

String getRequestURL():获取URL(统一资源标识符):/request-demo/req1

String getQueryString():获取请求参数(GET方式):username=zhangsan&password=123

2.请求头

String getHeader(String name):根据请求头名称,获取值

3.请求体

ServletInputStream getInputStream():获取字节输入流

BufferedReader getReader():获取字符输入流

3.Request请求转发

  • 一种在服务器内部的资源跳转方式
  • 实现方式
request.getRequestDispatcher("/requestB").forward(request,response);

请求转发间的共享数据:使用Request对象

  • void setAttribute(String name,Object o):存储数据到request域中
  • Object getArrtibute(STring name):根据key获取值
  • void removeArrtibute(String name):根据key删除该键值对
    请求转发的特点:
  • 浏览器地址栏路径不发生改变
  • 只能转发到当前服务器内部资源
  • 一次请求,可以在转发的资源间使用request共享数据

3.Response

1.Response设置响应数据功能介绍

响应数据分为3部分:

1、响应行:HTTP/1.1 200 OK

void set Status(int sc):设置响应状态码

2、响应头:Content-Type:text/html

void setHeater(String name,String value):设置响应头键值对

3、响应体:

PrintWriter getWriter():获取字符输出流

ServletOutputStream getOutputStream():获取字节输出流

2.Response完成重定向

重定向(Redirect):一种资源跳转方式
在这里插入图片描述

实现方式:

resp.setStatus(302);

resp.setHeader("location","资源B的路径");

重定向的特点:

1、浏览器地址栏路径发生变化

2、可以重定向到任意位置的资源(服务器内部、外部均可)

3、两次请求,不能在多个资源使用request共享数据

3.Response响应字符数据

使用:

1、通过Response对象获取字符输出流

PrintWriter writer = resp.getWriter();

2、写数据

writer.write("aaa");

注意:

1、该流不需要关闭,随着响应结束,response对象销毁,由服务器关闭

2、中文数据乱码:原因通过Response获取的字符输出流默认编码:ISO-8859-1

4.Response响应字节数据

使用:

1、通过Response对象获取字符输出流

ServletOutputStream outputStream = resp.getOutputStream();

2、写数据

outputStream.write(字节数据);

4.会话跟踪技术

会话跟踪技术是一种在客户端与服务器间保持HTTP状态的解决方案,管理浏览器客户端和服务器端之间会话过程中产生的会话数据。

从开发角度考虑,是使上一次请求所传递的数据能够维持状态到下一次请求,并且辨认出是否相同的的客户端所发送出来的。

1.Cookie的基本使用

  • Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
  • Cookie的基本使用
    1.创建Cookie对象,设置数据:
Cookie cookie = new Cookie("key","value");

2.发送Cookie到客户端:使用Response对象

response.addCookie(cookie);

3.获取客户端携带的所有Cookie,使用request对象

Cookie cookie = request.getCookies();

4.遍历数组,获取每一个Cookie对象:for
5.使用Cookie对象获取数据

cookie.getName();
cookie.getValue();

2.Cookie的使用细节

  • Cookie的存活时间
    ->默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则cookie销毁
    ->setMaxAge(int seconds):设置cookie的存活时间
    1.正数:将cookie写入浏览器所在的电脑硬盘,持久化存储。到时间自动删除
    2.负数:默认值,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则cookie销毁
    3.删除对应的cookie
  • Cookie存储中文
    ->默认不能存储中文
    ->如需要存储中文,则需要转码:URL编码
URLEncoder.encode(value,"UTF-8");//URL编码
URLDecoder.decode(value,"UTF-8");//URL解码

3.Session

1.session的基本使用

  • 服务端会话跟踪技术:将数据保存到服务器
  • JavaEE提供HttpSession接口,来实现一次会话的多次请求之间数据共享功能
  • 使用:
    获取session对象
HttpSession session = request.getSession();

Session对象功能

  • void setAttribute(String name,Object o):存储数据到session中
  • Object getArrtibute(STring name):根据key获取值
  • void removeArrtibute(String name):根据key删除该键值对

2.Session的使用细节

  • Session的钝化、活化:
    • 钝化:在服务器正常关闭后,Tomcat会自动将session数据写入硬盘的文件中
    • 活化:再次启动服务器时,从文件加载数据到Session中
  • Session的销毁
    • 默认情况下,无操作,30分钟自动销毁
    • 调用Session对象的invalidate()方法
<session-config>
      <session-timeout>30</session-timeout>
</session-config>

5.过滤器Filter

1.Filter快速入门

  • 定义类实现Filter接口,并重写其所有方法
  • 配置Filter拦截资源的路径,在类上定义@WebFilter注解
  • 在doFilter方法中输出一句话并放行
@WebFilter("/*")
public class FilterTest implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("-----------");
        //放行
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
    }
}

2.Filter的执行流程

在这里插入图片描述

3.过滤器的使用细节

  • Filter拦截路径配置
    过滤器的拦截路径一般有这4种方式
拦截所有资源:/*,访问所有的资源,过滤器都会被执行
具体资源路径:/myServlet/demo1,只有访问myServlet/demo1资源时,过滤器才会被执行
拦截目录:/myServlet/*,访问/myServlet下所有资源是,过滤器都会被执行
后缀名被拦截:*.jsp,访问后缀名为jsp资源时,过滤器都会被执行
  • 过滤器链
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值