JavaWeb(6:Servlet)

目录

 

6、Servlet

6.1 Servlet简介

6.2 HelloServlet

6.3 Sevlet原理

6.4 Mapping问题

6.5 ServletContext

6.6 HttpServletRequest

1、简单分类

2、常见应用


6、Servlet

6.1 Servlet简介

  1. Servlet 就是 sun 公司开发动态 web 的一门技术

  2. sun 公司在这些 API 中提供了一个接口叫做 Servlet,如果你想开发动态Web,只需要完成两个小步骤

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

    2. 将开发好的 Java 类 部署到 web 服务器中

把实现了 Servlet 接口的 Java 程序叫做,Servlet

6.2 HelloServlet

servlet 接口有两个默认的实现类

  1. 构建一个 Maven 项目

  2. 关于Maven父子工程的理解

    父项目中会有

     <modules>
            <module>servlet-01</module>
     </modules>

    子项目中会有

        <parent>
            <artifactId>javaweb-03</artifactId>
            <groupId>com.deng</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>

    父项目中的jar包,子项目可以直接引用(跟继承差不多)

  3. Maven环境优化

    1. 修改 web.xml 为最新的

    2. 将 maven 结构优化完整

  4. 编写一个servlet程序

    1. 编写一个普通类

    2. 实现一个接口,这里直接继承HttpServlet

  5. 编写Servlet的映射

        <servlet>
            <servlet-name>hello</servlet-name>
            <servlet-class>com.deng.servlet.HelloServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>hello</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
  6. 配置Tomcat(注意配置项目发布的路径)

  7. 启动测试

6.3 Sevlet原理

Servlet 是由 web 服务器调用,web 服务器在收到浏览器请求后会做的事情

6.4 Mapping问题

  1. 一个 Servlet 指定一个映射路径

        <servlet>
            <servlet-name>HelloServlet01</servlet-name>
            <servlet-class>com.deng.HelloServlet01</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>HelloServlet01</servlet-name>
            <url-pattern>/HelloServlet01</url-pattern>
        </servlet-mapping>
  2. 一个 Servlet 指定多个映射路径

        <servlet>
            <servlet-name>HelloServlet01</servlet-name>
            <servlet-class>com.deng.HelloServlet01</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>HelloServlet01</servlet-name>
            <url-pattern>/HelloServlet01</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>HelloServlet01</servlet-name>
            <url-pattern>/HelloServlet02</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>HelloServlet01</servlet-name>
            <url-pattern>/HelloServlet03</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>HelloServlet01</servlet-name>
            <url-pattern>/HelloServlet04</url-pattern>
        </servlet-mapping>
  3. 一个 Servlet 指定通用映射路径

        <servlet>
            <servlet-name>HelloServlet02</servlet-name>
            <servlet-class>com.deng.HelloServlet02</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>HelloServlet02</servlet-name>
            <url-pattern>/HelloServlet02/*</url-pattern>
        </servlet-mapping>
  4. 请求默认路径

        <servlet>
            <servlet-name>HelloServlet02</servlet-name>
            <servlet-class>com.deng.HelloServlet02</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>HelloServlet02</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
  5. 指定一些前缀或者后缀等等

总结一下: * 的作用就是可以模糊匹配

6.5 ServletContext

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

  • 共享数据(我在这个Servlet中保存从数据,可以在另一个servlet中拿到)

  • 配置初始化参数

  • 请求转发

  • 读取资源文件(项目中大量使用)

6.6 HttpServletRequest

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

  • 如果要获取客户端请求传过来的参数:找HttpServletRequest

  • 如果要给客户端响应一些参数:找HttpServletResponse

1、简单分类

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

ServletOutputStream getOutputStream() throws IOException;
PrintWriter getWriter() throws IOException;

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

void addCookie(Cookie var1);
​
boolean containsHeader(String var1);
​
String encodeURL(String var1);
​
String encodeRedirectURL(String var1);
​
/** @deprecated */
String encodeUrl(String var1);
​
/** @deprecated */
String encodeRedirectUrl(String var1);
​
void sendError(int var1, String var2) throws IOException;
​
void sendError(int var1) throws IOException;
​
void sendRedirect(String var1) throws IOException;
​
void setDateHeader(String var1, long var2);
​
void addDateHeader(String var1, long var2);
​
void setHeader(String var1, String var2);
​
void addHeader(String var1, String var2);
​
void setIntHeader(String var1, int var2);
​
void addIntHeader(String var1, int var2);
​
void setStatus(int var1);
​
/** @deprecated */
void setStatus(int var1, String var2);
​
int getStatus();
​
String getHeader(String var1);
​
Collection<String> getHeaders(String var1);
​
Collection<String> getHeaderNames();

响应的状态码

int SC_CONTINUE = 100;
    int SC_SWITCHING_PROTOCOLS = 101;
    int SC_OK = 200;
    int SC_CREATED = 201;
    int SC_ACCEPTED = 202;
    int SC_NON_AUTHORITATIVE_INFORMATION = 203;
    int SC_NO_CONTENT = 204;
    int SC_RESET_CONTENT = 205;
    int SC_PARTIAL_CONTENT = 206;
    int SC_MULTIPLE_CHOICES = 300;
    int SC_MOVED_PERMANENTLY = 301;
    int SC_MOVED_TEMPORARILY = 302;
    int SC_FOUND = 302;
    int SC_SEE_OTHER = 303;
    int SC_NOT_MODIFIED = 304;
    int SC_USE_PROXY = 305;
    int SC_TEMPORARY_REDIRECT = 307;
    int SC_BAD_REQUEST = 400;
    int SC_UNAUTHORIZED = 401;
    int SC_PAYMENT_REQUIRED = 402;
    int SC_FORBIDDEN = 403;
    int SC_NOT_FOUND = 404;
    int SC_METHOD_NOT_ALLOWED = 405;
    int SC_NOT_ACCEPTABLE = 406;
    int SC_PROXY_AUTHENTICATION_REQUIRED = 407;
    int SC_REQUEST_TIMEOUT = 408;
    int SC_CONFLICT = 409;
    int SC_GONE = 410;
    int SC_LENGTH_REQUIRED = 411;
    int SC_PRECONDITION_FAILED = 412;
    int SC_REQUEST_ENTITY_TOO_LARGE = 413;
    int SC_REQUEST_URI_TOO_LONG = 414;
    int SC_UNSUPPORTED_MEDIA_TYPE = 415;
    int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
    int SC_EXPECTATION_FAILED = 417;
    int SC_INTERNAL_SERVER_ERROR = 500;
    int SC_NOT_IMPLEMENTED = 501;
    int SC_BAD_GATEWAY = 502;
    int SC_SERVICE_UNAVAILABLE = 503;
    int SC_GATEWAY_TIMEOUT = 504;
    int SC_HTTP_VERSION_NOT_SUPPORTED = 505;

2、常见应用

  1. 向浏览器输出信息

  2. 下载文件(经常遇到)

    1. 要获取下载文件的路径

    2. 下载的文件名是什么

    3. 设置想办法让浏览器能够支持下载我们需要的东西

    4. 获取下载文件的输入流

    5. 创建缓冲区

    6. 获取OutputStream对象

    7. 将FileOutputStream流写入buffer缓冲区

    8. 使用OutputStream将缓冲区中的数据输出到客户端

  3. 验证码功能

    1. 前端实现

    2. 后端实现,需要使用到 Java 的图片类

  4. response重定向(最重要的)

    1. 重定向是什么?

    2. 转发是什么?

    3. 区分重定向和转发

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值