当前位置:网站首页>Servlet简单项目操作

Servlet简单项目操作

2022-08-10 15:19:00 蕾峰

1.1Servlet简介

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

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

(1)编写一个类,实现Servlet接口

(2)把开发好的java类部署到web服务器中。

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

1.2HelloServlet

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

1.构建一个普通的Maven项目,(在前面的Maven详解里面已经详细阐释了如何创建Maven项目),删掉里面的src目录。以后我们的学习就在这个项目里面建立Moudle;这个空的工程就是Maven的主工程。

pom.xml为Maven的核心配置文件,后缀名为.iml的为IDEA的识别文件,.idea为IDEA的配置文件,这些都无法删除,src为java和Maven项目的一些东西,这个可以进行删除。 

主工程里面我们可以尽可能的将所需要的依赖导入进去。如下所示:

我们寻找所需要的最新版本的依赖,我们可以通过如下方式进行搜索。我们进行搜索

 我们发现其中的<artifactId>javax.servlet-api</artifactId>,它的包为javax.servlet-api,我们点击网址https://mvnrepository.com,进行搜索javax.servlet-api,如下所示:

 点击javax.servlet-api,之后我们发现如下所示:

 我们点击4.0.1,进入如下所示:

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

我们将代码复制下来即可,将其放入依赖里面:

我们还有一个需要导入:jsp-api,我们采用同样的方法进行搜索:

我们选择 <groupId>javax.servlet.jsp</groupId>,即为javax.servlet.jsp里面的,我们点击第一个里面的即可。我们选择2.3.3版本。

 我们复制代码如下所示:

<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.3</version>
    <scope>provided</scope>
</dependency>

我们复制完成之后,我们的核心代码是如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>untitled2</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>


</project>

如果在这个过程中出现爆红,我们点击刷新即可。

如果我们刷新之后仍然没有解决问题,我们可以删除<scope>provided</scope>, <artifactId>javax.servlet.jsp-api</artifactId>改为 <artifactId>jsp-api</artifactId>,即会自动进行下载。如果仍然有问题,我们可以降低版本进行下载。这是针对后一个依赖进行的。

如果仍然有问题,我们点击本地仓库,如下所示的文件夹,找到所对应的文件jar包,即可发现存在版本的jar包,进行修改对应的文件即可。

 如果对应文件没有,我们可以进行手动下载,点击jar包(罐子),进行下载即可:

 下载完成之后,丢到对应文件夹即可。

我们发现,文件已经成功导入 。

如果仍然没有得到解决,我们点击File,点击Project Structure.点击Problems,有问题的话点击修复(Fix)就可以啦。

 我们接下来创建一个Servlet项目,需要先new一个项目,在这个主项目里面进行创建模板的web项目。Servlet是一个Web项目。

 我们创建完成之后如下所示:

我们会发现多了一个项目。 

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

父项目中会有:

 <modules>
        <module>untitled</module>
    </modules>

子项目中会有:

<parent>
        <artifactId>untitled2</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

父项目中的java,子项目可以直接使用。

son extends father,son拥有父亲的全部指令,但是son自己的东西,father并不能全部使用。

对于这个web项目,我们第一步首先将webapp里面的web.xml进行修改,由于这个太老,我们可以从tomcat文件里面的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_3_1.xsd"
         version="3.1"
         metadata-complete="true">
</web-app>

之后我们将main项目结构创建好,缺java和resources,我们进行创建如下所示:

我们点击Directory,

3.Maven环境优化 

    1.修改web.xml为最新的

    2.将Maven的结构搭建完整

4.编写一个Servlet程序

如果是一个Servlet程序,我们一定要继承一个Servlet接口

我们点击这个Maven,进行刷新即可发现。

 我们进行创建即可如下所示:

 1.编写一个普通类

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

 我们点击public后面的HttpServlet,点击ctrl+鼠标左键,即可看到源码。

 我们从所继承的父类GenericServlet,我们来进行查看源码。

 这个源码我们看待实现了Servlet接口。

我们的结构如下所示:

 我们查看Servlet的代码如下所示:

我们对该代码进行分析:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package javax.servlet;

import java.io.IOException;

public interface Servlet {
    void init(ServletConfig var1) throws ServletException;  //init为初始化

    ServletConfig getServletConfig();   //获得Servlet配置

    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;   //Request为请求    Response为响应

    String getServletInfo();  //获得Servlet信息

    void destroy(); //销毁
}

我们经过对源码的分析,我们了解到需要对Helloservlet里面的方法进行重写。

我们点击ctrl+O,即可找到重写的方法,我们选择doGet和doPost,我们按住ctrl,即可进行选择多个方法。而按住shift键即可选择多个连在一起的需要重写的方法。

 这是我们可以互相调用代码的体现:

package com.rgf.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import javax.servlet.http.HttpServlet;
@WebServlet(name = "HelloServlet", value = "/HelloServlet")
public class HelloServlet extends HttpServlet {
    //由于get或者post只是请求实现的不同的方式,可以相互调用,业务逻辑都一样
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

我们进行new一个对象的时候的快捷键为alter+enter,

我们所创建的类如下所示:

package com.rgf.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
@WebServlet(name = "HelloServlet", value = "/HelloServlet")
public class HelloServlet extends HttpServlet {
    //由于get或者post只是请求实现的不同的方式,可以相互调用,业务逻辑都一样
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // ServletOutputStream outputStream = resp.getOutputStream();
        // 作为一个自学能力强的人来说,我们会联想到输出可以得到,输入难道不能得到么?
        //我们联想进行尝试如下所示:
        ServletInputStream inputStream = req.getInputStream();//输入流
        PrintWriter writer = resp.getWriter();//响应流,往外面写东西
        
        writer.print("Hello,Servlet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

5.编写Servlet的映射

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

下面代码为src文件夹下面的webapps里面的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_3_1.xsd"
         version="3.1"
         metadata-complete="true">
    <!--注册Servlet-->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.rgf.servlet.HelloServlet</servlet-class>
    </servlet>
    <!--Servlet的请求路径-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    
</web-app>

6.配置Tomcat. (我们在前一篇文章里面进行过详细见解)

点击此处Maven与IDEA的联系与详解_蕾峰的博客-CSDN博客_maven与idea的关系。我们即可知道。

点击上面的+号:

 

  我们设置完毕之后进入如下所示:

 注意:配置项目发布的路径就可以了。

7.启动测试

 我们点击运行之后,我们会发现多了一个文件夹,这个所出现的untitled.war即为我们的一个·网址,其中META-INF为项目的一些信息:

而WEB-INF为咱们所写的那个类。

web.xml为咱们的一些配置。

我们在网址里面输入http://localhost:9571/untitled_war/hello

 即成功进入里面。

我们进入后台进行查看发现成功出现了进入doGet方法。 

这即为成功的完成了一个Servlet项目。

 

原网站

版权声明
本文为[蕾峰]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_59448049/article/details/126144109