javaWeb核心——Servlet

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

今天在研究JavaWeb目录时被一个小问题拖了很久的时间,所以要写一篇博文给自己长长记性。


提示:以下是本篇文章正文内容,下面案例可供参考

一、先来了解一下什么是Servlet

Servlet 是 Server Applet 的缩写,译为“服务器端小程序”。按我的理解,servlet就是连接服务端和你的浏览器的连接件。要获取服务器上的数据,首先你要在浏览器上输入URL,也就是一个请求,这个请求首先要传输给servlet,servlet对数据进行处理后才会发送到服务端,服务端收到请求,返回的数据也是通过servlet对数据进行处理之后才会显示在你的浏览器上。

1、servlet示例

我们直接使用上一篇文档中使用编译器自动化生成的默认代码

package com.example.demo;

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
    private String message;

    public void init() {
        message = "Hello World!";
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");

        // Hello
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>" + message + "</h1>");
        out.println("</body></html>");
    }

    public void destroy() {
    }

2、代码分析

我们不难看出其中有一个servlet容器继承自HttpServlet,有三个方法init、doGet和destroy,这部分代码比较简单,相信读者都能自行体会。
我认为其中最为关键的部分是

@WebServlet(name = "helloServlet", value = "/hello-servlet")

这一行代码极其关键,据我了解,短短一行代码几乎替代了一个文件,减少了很多的工作量,那么替代了哪个文件呢??

就是web.xml这个文件,对应关系如下

webservlet注释web.xml文件
nameservlet-name
valueurl-parttern

省略了很多连接步骤,极大的提高了开发效率!!!

在这个代码中name就表示这个servlet的名称叫做helloServlet,value表示的是其文件地址,注意!!!不是路径!!!
例如:我们访问的地址为:
http://localhost:8080/hello1/hello-servlet

其中 http://localhost:8080/hello1 这一部分我们在上一篇文章中讲过:这是由我们编译时设置的tomcat的属性决定的即application context中的内容决定的
但是这里最后一部分中的 **“/hello-servlet”**就是由我们设置的@webservlet注释中的value属性决定的

二、出现的错误

1.首先我先说一下我使用的版本

项目版本号
intellij-idea2021.2.1版本
jdk1.8
tomcat10.0.271
xml4.0

2.卡住我的地方

从创建项目->选择tomcat->运行程序
一直没有问题,最后在浏览器上也能看到运行结果,但是有一小点的缺陷,我一开始以为是我存放tomcat的路径问题,但是后来做到尝试控制台输出信息时一直找不到文件,这个适合我就意识到了问题的严重性。

在我正常运行程序时首先我们能看到成功运行的界面即:
在这里插入图片描述
但是当我点击下面的Hello Servlet后即出现404错误
在这里插入图片描述
我百思不得其解,走了一边流程后发现浏览器首先显示的文件是index.jsp
即:在这里插入图片描述
然后我们点击了其中的链接,即跳往a标签中的href属性所指代的地址,这里的地址为hello-servlet
在这里插入图片描述

我们可以按住ctrl按键再鼠标左键点击该地址找到所指的文件,最后发现其指向的地址为HelloServlet这一servlet容器
在这里插入图片描述
找到servlet容器后再执行其中的doget方法(因为我们访问地址是发出请求返回数据)其中doGet方法中的代码为:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");

        // Hello
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>" + message + "</h1>");
        out.println("</body></html>");
    }

解释一下:1、首先设置显示的类型为text/html超文本类型,即以网页格式显示结果

2、然后开始打印输出

3、其中有一个String类型的变量,从前文找可以发现 message = “Hello World!”;

4、故最后的结果应该是输出大标题格式的Hello World!

!!!!但是他没有

三、着手解决

1、第一步当然是踩在巨人的肩膀上当一名CV战士

但是很可惜,没有一个方法适合我
网上的大多数方法为:(1)可能是xml版本不支持注释,故要将xml版本修改为3.0以上,但是我看了又看,反复查看我的是4.0>3.0没有一点问题
在这里插入图片描述
(2)还有可能是metadata-complete属性设置为true即执行过程忽略注释,只有其值为false时才会读取注释,还有一种情况为不写默认为false,我一看我的!!!没有!!!为了确保不是这里出错,我给他加上了
在这里插入图片描述
经过我死马当活马医的操作,结局还是没有改变
在这里插入图片描述

2、思考可能出现错误的地方

经过我一通思考,突然:会不会是版本的问题??

由于我当前使用的tomcat版本为tomcat10,是属于比较新的tomcat版本了
于是我来到官网下载了tomcat8
在这里插入图片描述
然后就是来到intellij-idea换tomcat版本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后部署一下项目
在这里插入图片描述

点击apply->ok

运行程序
又是熟悉的画面
在这里插入图片描述

然后点击链接
喔哦!!!
在这里插入图片描述
!!!!!!!!!!成功啦!!!!!!!!

总结

提示:这里对文章进行总结:

  1. 我先回顾一下运行流程:浏览器->servlet->服务端->servlet->浏览器
  2. 版本很重要
  3. 版本很重要
  4. 关注各种软件的版本!!!!!!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值