「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」。
Servlet 简介
Servlet 是sun 公司开发动态web 的一门技术。动态web 就是和后台有数据交互,每人请求网页的时候,可以根据程序的逻辑控制,展现出不同的效果。
sun 公司在这些api 中提供一个接口,接口叫做servlet。
所以说,如果你想开发一个动态web 程序(Servlet 程序),只需要完成两个小步骤:
- 编写一个类实现Servlet 接口
- 把开发好的java 类部署到web 服务器中
把实现了Servlet 接口的java 程序叫做Servlet。
servlet 的简单实现
Servlet 接口,sun 公司有两个默认的实现类。如HttpServlet
- 构建一个简单的Maven 项目,删掉里面的src 文件夹,以后的学习就可以在这个项目中建立Module。这个工程就是maven 的“主工程”。可以在这个主工程的依赖配置文件中添加一些通用的依赖。在主工程中可以尽可能地把需要的依赖进行导入。比如说servlet 的,jsp 的等等。
可以到这里去找一些依赖包的配置,比如说找jsp 的配置:mvnrepository.com/search?q=js…
- 关于maven 父子工程的理解:在父项目中会有modules,子项目中会有parent。父项目中的jar 包,子项目可以直接使用。
- maven 环境的优化
- 修改web.xml 为最新的
- 将maven 的结构搭建完整
- 编写一个Servlet 程序
- 编写一个普通类
- 实现Servlet 接口(由于有个HttpServlet 类,实现了Servlet 接口,所以可以直接继承HttpServlet 类)
这是Servlet 接口中的各个方法:
public interface Servlet {
public void init(ServletConfig config) throws ServletException;
public ServletConfig getServletConfig();
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException;
public String getServletInfo();
public void destroy();
}
重点的方法是service 方法。GenericService 实现了Service 方法,没有对Service 做什么操作。
HttpServlet 实现了GenericService 类,这里实现了service 方法。实现GenericService 类,内部做了一些事情。可以打开源码具体看看。
对于我们自定义的实现(继承了HttpServlet),重写doGet 方法或者doPost 方法就可以。
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
writer.print("hello, servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
- 编写Servlet 的映射。为什么需要映射:我们写的是java 程序,但是需要通过浏览器进行访问,而浏览器需要连接web 服务器,所以我们需要在web 服务中注册我们写的Servlet,还需要给它一个浏览器可以访问的路径。在web.xml 中进行如下配置
- 设置好服务器及发布路径。服务器配置Tomcat
- 启动测试。如图,会生成一个target 文件夹。同时会生成一个war 包,这个就是我们的网站。war 包上面的servlet 文件夹就是war 包的解压文件。启动之后,可以在浏览器进行访问。页面展示出的分别是默认的页面和自己编写的页面。
至此,完成了Sevlet 的基本概念介绍,同时完成了编写一个简单的Servlet 程序。