Servlet学习笔记(一):实现Servlet接口的一个简单的HelloServlet程序、URL地址定位Servlet程序并访问的流程、Servlet的生命周期、Servlet的请求分发处理
Servlet学习笔记1、Servlet简介Servlet是JavaEE的规范之一,规范就是一个接口。Servlet是JavaWeb的三大组件之一,三大组件:Servlet程序,Filter过滤器,Listener监听器。Servlet是运行在服务器上的一个小型Java程序,它可以接收客户端发送过来的请求,并响应数据给客户端。2、HelloServlet注意项目的路径!我这里是http://loc
·
Servlet学习笔记
1、Servlet简介
- Servlet是JavaEE的规范之一,规范就是一个接口。
- Servlet是JavaWeb的三大组件之一,三大组件:Servlet程序,Filter过滤器,Listener监听器。
- Servlet是运行在服务器上的一个小型Java程序,它可以接收客户端发送过来的请求,并响应数据给客户端。
2、HelloServlet(实现Servlet接口)
注意项目的路径!我这里是http://localhost:8080/servletStudy
2.1、定义一个类实现Servlet接口
/**
* 一个简单的实现Servlet接口的小型Java程序
*
* @Author:xiezr
* @Creat:2021-07-27 9:35
*/
public class HelloServlet implements Servlet {
}
2.2、重写接口中的方法(service)
其他几个方法可以不理。
// 请求的分发处理
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
PrintWriter writer = servletResponse.getWriter(); // 获取响应输出流
writer.print("Hello Servlet!"); // 把Hello Servlet响应给浏览器
System.out.println("3、调用service方法"); // 打印在控制台
}
2.3、配置web.xml(配置servlet)
<!--servlet标签用于给Tomcat配置servlet程序-->
<servlet>
<!--servlet-name用于给sevlet程序起一个别名(一般是类名)-->
<servlet-name>HelloServlet</servlet-name>
<!--servlet-class是servlet程序的全类名-->
<servlet-class>com.solve.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet-mapping标签给servlet程序配置访问地址-->
<servlet-mapping>
<!--servlet-name标签的作用是用来告诉服务器,当前配置的地址给哪个servlet程序使用-->
<servlet-name>HelloServlet</servlet-name>
<!--url-pattern标签配置访问地址
/ 斜杠在服务器解析的时候,表示地址为:http://localhost:8080/项目路径
/hello 表示地址为:http://localhost:8080/项目路径/hello
这里我的项目路径为/servletStudy,所以访问地址为:http://localhost:8080/servletStudy/hello
-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
2.4、启动Tomcat
3、URL地址定位Servlet程序并访问的流程
4、Servlet的生命周期
- 调用构造器
- 调用init()初始化
第一步与第二步在第一次访问创建Servlet的时候会调用,之后在销毁之前的每次访问都不会调用。
- 调用service(),执行功能
每次访问servlet程序都会调用
- 调用destroy()销毁Servlet程序
第四步在web工程停止的时候会调用,至此,servlet生命周期结束。
public class HelloServlet implements Servlet {
public HelloServlet(){
System.out.println("1、调用构造器!");
}
// init():初始化方法
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2、Servlet程序初始化成功!");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
// 请求的分发处理
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
PrintWriter writer = servletResponse.getWriter();
writer.print("Hello Servlet!");
System.out.println("3、调用service方法");
}
@Override
public String getServletInfo() {
return null;
}
// 服务器关闭后,Servlet的销毁方法
@Override
public void destroy() {
System.out.println("4、Servlet程序销毁成功!");
}
}
当关闭Tomcat的时候,才调用destroy()销毁,中间多个调用service方法,是多次刷新访问造成的,而构造器和init()初始化方法只访问了一次。这就是一个Servlet的生命周期。
5、Servlet的请求分发处理
- Servlet通过getMethod(),获取客户端请求的方式,并根据请求方式的不同,调用不同的方法,并把数据响应给客户端。
- 请求的方式应该通过servletRequest这个对象调用,但是这个接口中并未声明getMethod()这个方法,但是其子接口HttpServletRequest中有声明getMethod(),所以我们可以做一个类型转换,通过HttpServletRequest的对象去调用getMethod()。
// 请求的分发处理
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
PrintWriter writer = servletResponse.getWriter();
writer.print("Hello Servlet!");
// 类型转换,servletRequest中没有getMethod(),但是其子类HttpServletRequest有
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
// 获取浏览器请求方式
String method = httpServletRequest.getMethod();
if ("GET".equals(method)){
System.out.println("3、调用service方法,请求方式为get");
doGet();
}
if ("POST".equals(method)){
System.out.println("3、调用service方法,请求方式为post");
doPost();
}
}
// doGet()和doPost()
public void doGet(){
System.out.println("调用doGet方法");
}
public void doPost(){
System.out.println("调用doPost方法");
}
hello.html中分别设置两种提交表单的方式,测试以下。
<form method="get" action="http://localhost:8080/servletStudy/hello">
<input type="submit">
</form>
<form method="post" action="http://localhost:8080/servletStudy/hello">
<input type="submit">
</form>
提交方式为get:
提交方式为post:
可以看出根据请求的方式不同,调用了不同的方法,实现Servlet的请求分发处理。
更多推荐
已为社区贡献2条内容
所有评论(0)