目录
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功能:
- 用户的url到程序的映射。(Servlet 允许程序猿注册⼀个类,在 Tomcat 收到某个特定的 HTTP 请求的时候,执⾏这个类中的⼀些代码。)
- 得到Request请求中的所有数据。(帮助程序猿解析 HTTP 请求,把 HTTP 请求从⼀个字符串解析成⼀个 HttpRequest 对象。)
- 将服务器端处理的结果返回给用户。(帮助程序猿构造 HTTP 响应。程序猿只要给指定的 HttpResponse 对象填写⼀些属性字段,Servlet 就会自动地按照 HTTP 协议的方式构造出⼀个 HTTP 响应字符串,并通过 Socket 写回给客户端。)
当然,Servlet 还⽀持⼀些其他的辅助功能,此处暂不介绍。
2.第一个Servlet项目
2.1.创建Maven项目
Servlet是基于Maven来创建的。
项目目录:
pom.xml文件:
项目打包类型:
- war包:web项目压缩包,包含了当前web项目的所有字节码,以及用到的一些前台文件。
- 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。