HelloServlet

今天初次接触了Servlet,跟着狂神写了第一个 HelloServlet 程序,故记录笔记在此~


(1)Servlet简介

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

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

    • 编写一个类,实现Servlet接口
    • 把开发好的Java类部署到web服务器中
  • 把实现了Servlet接口的 Java程序 叫做:Servlet
    Servlet接口在Sun公司有两个默认的实现类:HttpServlet,GenericServlet


(2) HelloServlet 程序步骤

1、构建一个普通的Maven项目(javaweb-03-servlet),删掉里面的src目录,以后我们的学习就在这个项目里面建立Module;这个空的工程就是Maven的主工程;

2、在pom.xml中放入项目所需要的依赖


<dependency>
    <groupId>javax.servletgroupId>
    <artifactId>javax.servlet-apiartifactId>
    <version>4.0.1version>
    <scope>providedscope>
dependency>


<dependency>
    <groupId>javax.servlet.jspgroupId>
    <artifactId>jsp-apiartifactId>
    <version>2.2version>
dependency>

3、在主工程下新建Module,选择webapp创建Maven项目

4、关于Maven父子工程的理解:

父项目的 pom.xml中会多出modules标签:

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

子模块的pom.xml中:

<parent>
    <artifactId>javaweb-03-servletartifactId>
    <groupId>org.examplegroupId>
    <version>1.0-SNAPSHOTversion>
parent>

注意:父项目中的jar包,子项目可以直接使用!,反之不行

5、Maven环境优化!把子模块的web.xml中的webapp版本换成Tomcat 9–>ROOT–>WIN-INF–>web.xml中的,把Maven结构搭建完整,main中新建java源码文件夹和resources资源文件夹


<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>

6、编写一个Servlet程序

  • 编写一个普通类(HelloServlet)
  • 实现Servlet接口,这里我们直接继承HttpServlet
    HelloServlet_第1张图片
package com.xiao.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

//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 {
     
        super.doPost(req, resp);
    }
}

7、编写Servlet的映射

为什么需要映射?

  • 我们写的是Java程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以我们需要在web服务中注册我们写的Servlet!还需要给他一个浏览器能够访问的路径!
 

	
    <servlet>
        <servlet-name>helloservlet-name>
        <servlet-class>com.xiao.servlet.HelloServletservlet-class>
    servlet>
    
    <servlet-mapping>
        <servlet-name>helloservlet-name>
        <url-pattern>/xiaourl-pattern>
    servlet-mapping>

8、IDEA中配置Tomcat(配置截图时是Tomcat 10,后来出错了换成Tomcat 9了,一样的配置,就没截图了)
HelloServlet_第2张图片
HelloServlet_第3张图片
HelloServlet_第4张图片
HelloServlet_第5张图片
HelloServlet_第6张图片
HelloServlet_第7张图片
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210610233749271.png#pic_center

9、启动Tomcat 9,进行浏览器访问测试

HelloServlet_第8张图片
HelloServlet_第9张图片


(3)Servlet原理

HelloServlet_第10张图片


(4)Mapping问题

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


<servlet-mapping>
    <servlet-name>helloservlet-name>
    <url-pattern>/xiaourl-pattern>
servlet-mapping>

2、一个Servlet可以指定多个映射路径

   
    <servlet-mapping>
        <servlet-name>helloservlet-name>
        <url-pattern>/xiaourl-pattern>
    servlet-mapping>
    <servlet-mapping>
        <servlet-name>helloservlet-name>
        <url-pattern>/xiao2url-pattern>
    servlet-mapping>
    <servlet-mapping>
        <servlet-name>helloservlet-name>
        <url-pattern>/xiao3url-pattern>
    servlet-mapping>
    <servlet-mapping>
        <servlet-name>helloservlet-name>
        <url-pattern>/xiao4url-pattern>
    servlet-mapping>
    <servlet-mapping>
        <servlet-name>helloservlet-name>
        <url-pattern>/xiao5url-pattern>
    servlet-mapping>

3、一个Servlet可以指定通用映射路径


<servlet-mapping>
    <servlet-name>helloservlet-name>
    <url-pattern>/xiao/*url-pattern>
servlet-mapping>

4、默认请求路径


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

5、指定一些后缀或者前缀等…


<servlet-mapping>
    <servlet-name>helloservlet-name>
    <url-pattern>*.xiaourl-pattern>
servlet-mapping>


6、优先级问题

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

<servlet>
    <servlet-name>errorservlet-name>
    <servlet-class>com.xiao.servlet.ErrorServletservlet-class>
servlet>
<servlet-mapping>
    <servlet-name>errorservlet-name>
    <url-pattern>/*url-pattern>
servlet-mapping>


第一个 HelloServlet 程序笔记到此结束~
跟着狂神学习java的第23天,加油鸭!坚持下去~

你可能感兴趣的:(Java,JavaWeb,java,maven,tomcat,servlet)