Servlet(1)

Servlet

一、简介

Servlet接口有两个默认的实现类HttpServlet和GenericServlet

  1. 用于开发动态web的技术,如果开发servlet程序,需要完成:编写一个类,实现servlet接口以及 将开发好的java类部署到web服务器中。

二、HelloServlet

  1. 构建maven项目,删掉里面的 【src】目录,以后在这里建立Module; 这个空的工程就是maven的主工程

  2. (如何从全局上修改maven)

  3. 关于MAven父子工程:如果父项目中添加一个module,会发现在子项目中会存在

    <parent>
            <artifactId>Javaweb-02-servlet</artifactId>
            <groupId>org.example</groupId>
            <version>1.0-SNAPSHOT</version>
     </parent>
    

    在父项目中存在

    <modules>
            <module>servlet-01</module>
        </modules>
    
  4. 将子项目中的web.xml中的内容更改成

    <?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">
    </web-app>
    
  5. 将maven的结构搭建完整,建立java的dictionary,并标记为sources root ; 建立resources的dictionary, 并标记为 resources root

  6. 编写一个Servlet程序

    1. 编写一个普通类
    2. 实现Servlet接口,这里我们直接继承HttpServlet
  7. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dobJIEFb-1613952347768)(C:\Users\AW\AppData\Roaming\Typora\typora-user-images\image-20210220111020002.png)]

  8. override一个doGet和doPost方法,并让doPost调用doGet
    (由于get或post只是请求实现的不同形式,可以互相调用,业务逻辑都一样)

  9. public class HelloServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            PrintWriter writer = resp.getWriter();//相应流
    
            writer.print("Hello ,Servlet");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
  10. 编写Servlet的映射
    为什么需要映射:我们写的是java程序,但需要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要再web服务中心注册我们写的Servlet,还需要给他一个浏览器能够访问的路径

        <!--注册Servlet-->
        <servlet>
            <servlet-name>hello</servlet-name>
            <servlet-class>com.wk.servlet.HelloServlet</servlet-class>
        </servlet>
    
        <!--Servlet的请求路径-->
        <servlet-mapping>
            <servlet-name>hello</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
    
  11. 配置tomcat

  12. 启动测试

三、Servlet原理

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5YPEyTeD-1613952347770)(C:\Users\AW\AppData\Roaming\Typora\typora-user-images\image-20210220122732976.png)]

四、Mapping问题

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

    <servlet-mapping>
            <servlet-name>hello</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
    
  2. 一个Servlet可以指定多个映射路径

    //方法1  
    <!--Servlet的请求路径-->
        <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>
     //方法2
            <servlet-mapping>
            <servlet-name>hello</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>hello</servlet-name>
            <url-pattern>/hello/*</url-pattern>
        </servlet-mapping>
    
    

    注意:如果像下面这样

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

    只有/*,但是没有其他的,则会优先执行这个

  3. 优先级问题:

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

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

    五、ServletContext

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

      • 共享数据
        我在这个Servlet保存的数据,能在类一个Servlet中拿到

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-llroua6t-1613952347771)(C:\Users\AW\AppData\Roaming\Typora\typora-user-images\image-20210221154106339.png)]

六、HttpServletResonse

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

  • 如果要获取客户端请求过来的参数:找HttpServletRequest
  • 如果要给客户端响应一些信息:找HttpServletResponse
  1. 简单分类
    负责向浏览

七、HttpServletRequest

需要导入到pom.xml中的依赖

<dependencies>
    <!-- Servlet 依赖-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    <!-- JSP依赖 -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.3.3</version>
    </dependency>
    <!-- JSTL表倒是的依赖-->
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl-api</artifactId>
        <version>1.2</version>
    </dependency>
    <!--standard 标签库-->
    <!-- https://mvnrepository.com/artifact/taglibs/standard -->
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>


</dependencies>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值