【网络编程】Servlet | Maven | 创建程序的七个步骤 | 部署方式 | 访问出错


Servlet

  • 是Tomcat提供的一种api,也可以理解成是一个HTTP服务器框架

Tomcat支持静态页面和动态页面。并且提供了一组api,封装了HTTP协议。从而更方便的编写页面

静态页面:页面的内容是固定的

动态页面:根据用户输入的不同内容,产生不同的结果

  • 这组api就称为Servlet

Servlet的主要工作:

  • 允许程序员注册一个类,在Tomcat收到指定的HTTP请求时,执行这个类中的代码
  • 帮助解析HTTP请求,把HTTP请求从字符串解析成HttpRequest对象
  • 帮助构造HTTP响应。程序员只用给指定的HttpResponse对象填写一些属性字段,Servlet就会自动按照HTTP协议的方式构造出HTTP响应字符串,并通过Socket写回到客户端。

一、创建一个Servlet程序

1.创建项目

创建一个Maven项目

​ Maven是一个知名 的构建工具:帮助进行编译/打包代码的工具。Maven可以帮助我们管理好依赖关系,同时Maven的打包功能也非常强大,方便集成到自动化环境中。IDEA已经集成了Maven。

在这里插入图片描述

写代码的初心,是能够高效率的解决实际问题。问题的详细情况以及解决问题的具体过程就叫做“业务”

2.引入依赖

Servlet是Tomcat提供的api,是第三方库。不是JDK自带的,需要手动安装引入。

1.打开maven中央仓库,找到需要的servlet的jar包

https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api/3.1.0

​ 选择和Tomcat8匹配的版本3.1.0

2.借住maven,自动下载上述依赖

3.创建目录

对于Tomcat来说,对于项目的结构,还有一些额外的要求

在这里插入图片描述

  • 创建webapp目录,创建WEB-INF子目录,创建web.xml文件。
  • webapp 目录就是未来部署到 Tomcat 中的一个重要的目录. 当前可以往 webapp 中放一些静态资源, 比如 html , css 等
  • web.xml文件。Tomcat 找到这个文件才能正确处理 webapp 中的 动态资源.
<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>
</web-app>
4.编写代码
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hello servlet");//显示在tomcat的控制台上

        //打印到浏览器页面上。把字符串作为http响应的body部分
        resp.getWriter().write("hello servlet"); 
    }
}
  • 创建HelloServelt类,继承自HttpServlet

  • doGet:处理HTTP GET请求

    当tomcat收到一个GET请求的时候,就有可能执行到这个子类的方法中

  • HttpServletRequest :HTTP请求。tomcat自动把http请求字符串构造成HttpServletRequest对象

  • HttpServletResponse :HTTP响应。根据HttpServletRequest请求对象,构造成HttpServletResponse响应对象,tomcat会自动把响应对象,组织成HTTP格式的字符串。程序员只需要关注业务逻辑,而不用操心http的解析和构造。

  • @WebServlet(“/hello”) :“配置路由” 、让这个类和HTTP请求路径关联起来

    Tomcat不是收到所有的get请求都调用这个doGet。要同时满足请求是Get,并且请求的url路径是/hello

  • resp.getWriter() 会获取到一个流对象, 通过这个流对象写入的数据会被 构造成一个 HTTP 响应的 body 部分, Tomcat 会把整个响应转成字符串, 通过 socket 写回给浏览器.

5.打包程序

打包程序,把写好的代码打成war包,放在Tomcat上执行

1.修改pom.xml,设置打包的类型和名字。

    <packaging>war</packaging>
    <build>
        <finalName>hello</finalName>
    </build>
  • packaging默认打的是jar包。Tomcat要求的是war包

2.在右侧maven面板中,双击package按钮

BUILD SUCCESS //打包成功

在这里插入图片描述

打包完毕,会出现target目录。打好的hello.war包就显示在这个目录下。

6.部署程序
  • 把war包拷贝到webapps目录中

war包右键-> Open in -> Explorer,进行复制 ->粘贴到Tomcat的wabapps目录中->启动Tomcat

7.验证程序

通过浏览器,访问tomcat,获取到代码中返回的hello servlet

x

http://127.0.0.1:8080/hello/hello
  • 第一个hello是使用war包名的目录 :context path
  • 第二个hello是代码是注解规定内容
  • hello servlet就是代码中返回的内容

一个目录对于一个war包。这里的目录是Tomcat自动解压后生成的。

对内容进行修改

1.修改代码->重新打包->重新部署

  • 一般来说,更新war包后。Tomcat会自动识别到变化,自动重新部署

二、更方便的部署方式

插件(plugin)

Smart Tomcat

借住IDEA的插件,把tomcat集成到IDEA中。就可以通过IDEA一键打包部署

context path 默认是项目名,可以手动配置

出现乱码

IDEA中设置的字符集是utf-8.但是浏览器跟随windows,是GBK。

以在HTTP响应报文中,要显示的告诉浏览器,返回的body的字符集是什么

@WebServlet("/hello2")
public class HelloServlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        System.out.println("hello");
        resp.getWriter().write("你好hello wjm");
    }
}

  • http响应报文的header中,就有Content-Type.用来描述body的数据格式 和编码方式。

三、访问出错

1.出现404
  • 404表示用户访问的资源不存在,大概率是URL的路径写的不对

1.url路径写错了

少写了Context Path、少写Servlet Path、或者写错了

2.webapp没有正确加载

web.xml内容不对

2.出现405
  • 方法没有被实现

1.发送的get请求,但是Servlet没有重写doGet方法

2.写的代码中,没有删掉super.doGet()

3.出现500
  • 服务器内部错误(写的代码抛异常了,在日志或者响应中会携带异常信息)
4.出现空白页面
  • 检查服务器是否真的返回了带有正文的响应报文
  • 浏览器显示的内容,就是http响应的正文(body)
5.无法发访问此网站
  • 意味着Tomcat没有正常运行

    1.检查Tomcat的启动

    2.检查ip和端口号

点击移步博客主页,欢迎光临~

偷cyk的图

  • 32
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值