7-第一个Servlet项目

目录

1.Servlet是什么?

2.第一个Servlet项目

2.1.创建Maven项目

2.2.引入Servlet依赖(将Maven项目改为Servlet项目(尚不完整))

2.3.完善Servlet项目目录——源代码目录&单元测试目录(非必须)

2.4.编写代码

①继承HttpServlet

②设置url映射

③重写doGet / doPost...方法

2.5.打包项目

2.6.部署/发布项目到Tomcat中

2.7.启动Tomcat,访问网站

PS:更方便地运行Java Web项目

①安装Smart Tomcat插件

②配置Smart Tomcat插件

③运行项目

④调试项目:打断点,访问url,调试。

PS:访问出错怎么办?

①出现 404

②出现 405

③出现 500

④出现 "空白页面"

⑤出现 "无法访问此网站"

⑥中文乱码


1.Servlet是什么?

Servlet 是⼀款⽤来开发 Java Web 的框架。它是基于 Http 协议交换并且运⾏在 Tomcat ⾥的框架技术。

Servlet功能:

  1. 用户的url到程序的映射。(Servlet 允许程序猿注册⼀个类,在 Tomcat 收到某个特定的 HTTP 请求的时候,执⾏这个类中的⼀些代码。)
  2. 得到Request请求中的所有数据。(帮助程序猿解析 HTTP 请求,把 HTTP 请求从⼀个字符串解析成⼀个 HttpRequest 对象。)
  3. 将服务器端处理的结果返回给用户。(帮助程序猿构造 HTTP 响应。程序猿只要给指定的 HttpResponse 对象填写⼀些属性字段,Servlet 就会自动地按照 HTTP 协议的方式构造出⼀个 HTTP 响应字符串,并通过 Socket 写回给客户端。)

当然,Servlet 还⽀持⼀些其他的辅助功能,此处暂不介绍。

2.第一个Servlet项目

2.1.创建Maven项目

Servlet是基于Maven来创建的。

项目目录:

pom.xml文件:

项目打包类型:

  1. war包:web项目压缩包,包含了当前web项目的所有字节码,以及用到的一些前台文件。
  2. jar包:java项目的工具压缩包。

2.2.引入Servlet依赖(将Maven项目改为Servlet项目(尚不完整))

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

用3.1.0版本,与tomcat对应一致。

复制粘贴到pom.xml文件的<dependencies></dependencies>依赖中。点击重新导入按钮。

2.3.完善Servlet项目目录——源代码目录&单元测试目录(非必须)

2.4.编写代码

在 java 目录中创建⼀个类 HelloServlet(类名默认是:业务名+Servlet)

①继承HttpServlet

②设置url映射

③重写doGet / doPost...方法

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

@WebServlet("/hello") // http://ip:port/hello -> url映射到当前类
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //返回的类型
        resp.setContentType("text/html"); //返回的不是html静态页面,返回的是html里的内容
        //返回的数据
        resp.getWriter().println("<h1>Hello,Servlet.</h1>"); //打印器:打印数据给前端
    }
}

2.5.打包项目

2.6.部署/发布项目到Tomcat中

2.7.启动Tomcat,访问网站

PS:更方便地运行Java Web项目

①安装Smart Tomcat插件

a.Idea搜索

应用市场是国外的,如果第一次搜索不到,更换网络,关闭再试。

若还是搜索不到,则是Idea版本不兼容。

b.网页搜索

Tomcat网页下载https://plugins.jetbrains.com/plugin/9492-smart-tomcat

重启Idea。

②配置Smart Tomcat插件

③运行项目

若不成功,检查端口号是否被占用。

④调试项目:打断点,访问url,调试。

Idea是借助了外置的Tomcat来运行项目的。

运行时是运行Tomcat里的main方法的,在main方法里做了一个事件的监视,当有人访问网站时,进行拦截事件,根据url进行匹配,找到程序中对应的类,将请求直接映射到方法上。

PS:访问出错怎么办?

①出现 404

404 表示⽤户访问的资源不存在。

⼤概率是 URL 的路径写的不正确。

  • 错误实例1:少写了 Context Path

  • 错误实例2:少写了 Servlet Path 

  • 错误实例3:Servlet Path 写的和 URL 不匹配 

  • 错误实例4:web.xml(当前网站的配置文件)写错了 

②出现 405

405 表示对应的 HTTP 请求⽅法没有实现。

  • 错误实例:没有实现 doGet / doPost ⽅法。

如果写一个方法,会执行父类的 doGet / doPost 方法,浏览器啥都没有显示。

如果一个方法都没写,会出现 405。

 

③出现 500

往往是 Servlet 代码中抛出异常导致的。

@WebServlet("/hello") // http://ip:port/hello -> url映射到当前类
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        int num = 0;
//        int count = 10 / num;
        Object obj = null;
        System.out.println(obj.hashCode());
        //返回的类型
        resp.setContentType("text/html"); //返回的不是html静态页面,返回的是html里的内容
        //返回的数据
        resp.getWriter().println("<h1>Hello,Servlet.</h1>"); //打印器:打印数据给前端
    }
}

④出现 "空白页面"

没有使用resp.getWritter().write() 操作来输出内容。

⑤出现 "无法访问此网站"

⼀般是 Tomcat 启动失败。

⑥中文乱码

@WebServlet("/hello") // http://ip:port/hello -> url映射到当前类
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //返回的类型
        resp.setContentType("text/html"); //返回的不是html静态页面,返回的是html里的内容
        //返回的数据
        resp.getWriter().println("<h1>你好,Servlet.</h1>"); //打印器:打印数据给前端
    }
}

解决:设置编码

@WebServlet("/hello") // http://ip:port/hello -> url映射到当前类
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //返回的类型和编码格式
        resp.setContentType("text/html; charset=utf-8"); //返回的不是html静态页面,返回的是html里的内容
        //返回的数据
        resp.getWriter().println("<h1>你好,Servlet.</h1>"); //打印器:打印数据给前端
    }
}

Servlet中每次改动代码只能自己手动重启Tomcat。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值