ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Servlet学习

2022-07-10 11:03:51  阅读:122  来源: 互联网

标签:HttpServlet 请求 web 接口 学习 Servlet hello


1、Servlet

1.1 、 什么是Servlet

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

  • Sun在这些API中提供一个接口叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤

    • 编写一个类,实现Servlet接口

    • 把开发好的Java类部署到web服务器中

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

1.2 、HelloServlet

Servlet接口Sun公司有两个默认的实现类:HttpServlet,

  1. 构建一个普通的Maven项目,删掉src目录,以后我们就在这个项目建立Module;

  2. Maven父子工程的理解:

    父项目中会有

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

     

    子项目会有

    <parent>
        <artifactId>javaweb-02-servlet</artifactId>
        <groupId>com.uestc</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

     

    父项目中的Java子项目可以直接使用

  3. Maven环境优化

    1. 修改web.xml为最新的

    2. 将maven结构搭建完整

  4. 编写一个Servlet程序

    1. 编写一个普通类

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

    public class HelloServlet extends HttpServlet {
    ​
        //由于get和post只是请求实现的不同的方式,可以相互调用,业务逻辑都一样
        
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //ServletOutputStream outputStream = resp.getOutputStream();
            PrintWriter writer = resp.getWriter();//响应流
            
            writer.print("Hello,Servlet");
            
        }
    ​
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            
        }
    }

     

  5. 编写Servlet的映射

    为什么需要映射,我们写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,我们需要在web服务中注册我们写的Servlet,还需给他一个浏览器访问的路径

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                          http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0"
             metadata-complete="true">
    ​
        <!-- 注册servlet -->
        <servlet>
            <servlet-name>hello</servlet-name>
            <servlet-class>com.uestc.servlet.HelloServlet</servlet-class>
        </servlet>
        <!-- servlet的请求路径 -->
        <servlet-mapping>
            <servlet-name>hello</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
    ​
    </web-app>

     

  6. 配置Tomcat

    注意:配置项目发布的路径。

  7. 启动测试

1.3 、Servlet原理

Servlet是由Web服务器调用,web服务器在收到浏览器请求之后,会:

1、首先简单解释一下Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet()、doPost()等等这些方法的,HttpServlet中定义了这些方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doGet或doPost等这些方法。

2、每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet的生命周期,分别是上文提到的init(),service(),destroy()方法。GenericServlet是一个通用的,不特定于任何协议的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口。所以我们定义Servlet的时候只需要继承HttpServlet即可。

3、Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类,所以HttpServlet中实现了service()方法,并将请求ServletRequest、ServletResponse 强转为HttpRequest 和 HttpResponse。

重点:自己编写实体类,重写里面的方法

  1. 接收并处理请求

  2. 给出响应的信息

1.4、 Mapping问题

  1. 一个请求可以指定一个映射路径

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

     

  2. 一个请求可以指定多个映射路径

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    ​
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>
    ​
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello3</url-pattern>
    </servlet-mapping>
    ​
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello4</url-pattern>
    </servlet-mapping>
    ​
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello5</url-pattern>
    </servlet-mapping>

     

  3. 一个请求可以指定通用映射路径

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello/*</url-pattern>
    </servlet-mapping>

     

  4. 默认请求路径

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

     

  5. 指定一些后缀或者前缀等等

<!-- 可以自定义后缀实现映射
 注意点,*前面不能加映射的路径
 /hello/spd.do
 -->
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

 

  1. 优先级问题

    指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求

<!-- 404 -->
<servlet>
    <servlet-name>error</servlet-name>
    <servlet-class>com.uestc.servlet.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>error</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

 

 

标签:HttpServlet,请求,web,接口,学习,Servlet,hello
来源: https://www.cnblogs.com/mhy123/p/16462766.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有