Servlet技术

一、JavaWeb概述

1. 什么是Javaweb

JavaWeb是指所有通过Java语言编写,可以通过浏览器访问的程序的总称。

JavaWeb是基于请求和响应来开发的。

请求:Request

响应:Response

客户端(浏览器) 服务器(Tomcat等)

2. Web资源分类

  • 静态资源:HTML,CSS,JS,txt,mp4,jpg等等
  • 动态资源:jsp页面,servlet程序

3. 常用Web服务器

  • Tomcat:提供对jsp和servlet的支持,是一种轻量级的JavaWeb容器
  • Jboss
  • GlassFish
  • Resin
  • WebLogic

4. Tomcat的使用

①Tomcat目录中的webapps文件夹存放部署的Web工程

②启动Tomcat,找到bin目录下的startup.bat文件。或者管理员权限下的cmd,输入startup。

③测试是否启动成功,访问本机真实地址或者(localhost:8080)

④停止Tomcat的方式:找到tomcat的bin目录下的shutdown.bat按钮

⑤如何修改Tomcat的端口号:
mysql默认3306,Tomcat默认8080
server.xml配置文件下的Connector标签,修改port属性,修改完端口号之后要重启Tomcat

⑥HTTP协议默认端口是80

部署Web工程到Tomcat服务器

Tomcat是一个服务器,供客户端访问Web工程。

  • 直接把Web工程拷贝到Tomcat的webapps下如何访问Web工程。先localhost:8080(这一步就相当于切入到webapps文件夹下)然后再加上这里面某个html文件的路径即可
image-20200608100549501.png

IDEA整合Tomcat服务器

  • 全局添加服务器
image-20200608100326929.png
  • 单个工程添加服务器

Server&Deployment

  • 配置工程输出路径
image-20200608100828701.png
  • 解决服务器控制台输出乱码
image-20200608100929905.png

二、Servlet

1. 什么是Servlet

  1. Servlet是JavaEE规范之一,规范就是接口
  2. Servlet是JavaWeb三大组件之一,三大组件分别是Servlet程序,Filter过滤器,Listener监听器
  3. Servlet是运行在服务器上的一个Java小程序它可以接收客户端发送过来的请求,并响应客户的请求。Tomcat等服务器相当于容器,里面装了许多Servlet。

2. 实现Servlet程序

  1. 编写一个类去实现Servlet接口

  2. 实现service方法,处理请求并响应请求得到数据(抽象类HttpServlet中service方法就包含了doGet,doPost,doDelete等等所有请求类型的方法

  3. 到web.xml文件中去配置Servlet程序的访问地址

    <-- servlet标签:给Tomcat配置Servlet程序-->
    
        <-- servlet-name标签:给servlet程序起一个别名(别名一般是该servlet实现类的类名)-->
        MyServletImpl
        <-- 上面那个servlet的全限定类名-->
        com.zt.MyServletImpl
    
    
    <-- servlet-mapping标签:给servlet程序配置一个访问地址-->
    
        <-- 该处servlet-name标签作用是:告诉服务器,当前mapping标签配置的地址给哪个servlet程序用
        一般和上面那个一致,就表示该地址就给该servlet程序用-->
        MyServletImpl
        <-- url-pattern标签:用来配置访问地址
        /:"/"在服务器解析的时候,被解析为:http://ip:port/工程路径/。其中工程路径就是配置Tomcat时的Deployment中的context
        /hello:这表示http://ip:port/工程路径/hello,即该servlet程序要去访问这个地址,然后执行service方法
        -->
        /hello  //在开发的时候一般遵守习惯:/xxx,xxx的内容与类名有关联
    
    

3. Servlet生命周期

  1. 执行Servlet构造方法
  2. 执行init()初始化方法
  3. 执行service()方法,每次调用Servlet都会调用该方法
  4. 执行destroy()方法

4. 通过继承HttpServlet实现Servlet程序

一般实际开发项目中,都是使用继承HttpServlet类(它实现了Servlet接口,它是个抽象类)去实现Servlet程序

①编写一个类继承HttpServlet

②根据业务需要重写doGet()doPost()等方法

③到web.xml文件中配置Servlet程序的访问地址


ServletConfig类

Servlet程序的配置类,它是某个servlet应用程序的config,不是全局的config

作用:

(1)可以获取Servlet程序的别名servlet-name

(2)获取初始化参数init-param

(3)获取ServletContext对象

ServletContext类

这是一个全局的对象,作用域为整个Web工程,可以用它去做一些全局性的配置,也可以获得全局的属性

image-20200608105748297.png
  1. ServletContex是一个接口,它表示Servlet上下文对象

  2. 一个Web工程只有一个ServletContext对象实例,相对于每个servlet程序而言

  3. ServletContext对象是一个域对象

  4. ServletContext在web工程部署的时候创建,在web工程停止的时候销毁

    存数据 取数据 删除数据
    Map put get remove
    域对象 setAttribute getAttribute removeAttribute
HttpServletRequest类(实现ServletRequest接口)
  • 作用
    每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到HttpServletRequest对象中,然后传递到service方法(doGet,doPost)中给我们使用。我们可以通过HttpServletRequest对象,获取到请求的所有信息

  • HttpServletRequest常用API

    String getContextPath():获取Web工程相对路径(Tomcat服务器中除去http://ip:port) 
    System.out.println(req.getContextPath());
    /Temp
    
    URI getRequestURI():获取请求的资源路径,相对路径,某Web工程下的路径
    System.out.println(req.getRequestURI());
    /Temp/hello
    
    URL getRequestURL():获取请求的统一资源定位符(绝对路径)
    System.out.println(req.getRequestURL());
    http://localhost:8080/Temp/hello
    
    String getRemoteHost():获取客户端的ip地址
    String getParameter():获取请求的参数
    String getParameterValues():获取请求的参数(多个值时)  可以用于获取用户输入的值,如用户名。
    String getHeader():获取请求头
    String getMethod():获取请求的方式GET或POST
    setAttribute(key,value):设置域数据
    Object getAttribute(key):获取域数据
    getRequestDispatcher("/+servlet名"):获取下一个转发对象。必须以斜杠开头
    RequestDispatcher rd = servletRequest.getRequestDispatcher("Two");
    rd.forward(servletRequest,servletResponse); //获取之后进入到下一个servlet总
    req.setCharacterEncoding("UTF-8")
    
HttpServletResponse类
  • 每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用,HttpServletResponse表示所有响应的信息。如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置

  • 两个输出流

    1. 字节流:getOutputStream(),常用于下载(传递二进制数据)

    2. 字符流:getWriter(),常用于回传字符串(常用)

      resp.setContentType("text/html; charset=UTF-8");  //同时设置服务器和客户端的字符集为UTF-8
      PrintWriter writer = resp.getWriter();
      writer.write("Hello World");
      
请求重定向

请求重定向是指,客户端给服务器发送请求,然后服务器给客户端一个新地址,客户端转发到新地址。

resp.sendRedirect("http://www.sina.com");

注意

  1. 不能重定向到自己,否则浏览器会报错
  2. 浏览器地址会发生变化,请求次数为两次,而不是请求转发的一次
  3. 两个servlet程序不共享HttpServletRequest域中的数据,因为每个HttpServletRequest只属于一个Servlet
  4. 不能访问WEB-INF下的内容
  5. 可以访问工程外的资源

三、HTTP协议

1. GET请求

  • 请求的方式 GET
  • 请求的资源路径
  • 请求的协议版本号 HTTP/1.1
  • 请求头 key:value 组成

2. POST请求

  • 请求方式POST
  • 请求资源路径
  • 请求的协议版本号 HTTP/1.1
  • 请求头 key:value
  • 请求体:发送给服务器的数据
<常见的GET请求和POST请求>
GET请求:
①
标签,method=get ②标签 ③标签引入css ④

你可能感兴趣的:(Servlet技术)