Servlet
约定大于配置
定义:
建立在服务器Tomcat基础之上,运行在服务器上的一个小程序。接受客户端发来的请求,响应数据给客户端。
Servlet是javaweb三大组件之一。servlet程序,filter过滤器,listener监听器
一. 实现Servlet接口步骤(不推荐)
-
编写类 实现Servlet接口
public class HelloServlet implements Servlet { -
重写service()方法,处理请求并相应数据
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println(“hello servlet被客户端访问了,现在我这里的Tomcat服务器正在响应。。”);
} -
web.xml配置servlet程序访问地址,配置如下:
<!-- servlet给Tomcat配置servlet程序-->
<servlet>
<!-- servlet程序起别名(类名)-->
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.lwt.HelloServlet</servlet-class>
</servlet>
<!-- servlet-mapping标签给servlet程序配置访问地址-->
<servlet-mapping>
<!-- servlet-name标签的作用:告诉服务器当前配置的地址给哪个servlet程序使用-->
<servlet-name>HelloServlet</servlet-name>
<!-- 配置访问地址 以斜杠打头-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
生命周期
1.执行servlet构造器方法(单例)
2.执行init初始化方法。前两步是在第一次访问时创建servlet程序调用一次
3.执行service方法。每次访问都会调用service()方法
4.执行destroy方法。关闭服务器时执行
public HelloServlet() { // 1
System.out.println("1.构造器方法");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException { // 2
System.out.println("2.初始化方法");
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { // 3
System.out.println("3.hello servlet被客户端访问了,现在我这里的Tomcat服务器正在响应。。");
}
@Override
public void destroy() { // 4
System.out.println("4.销毁方法");
}
请求分发处理
通过在service方法中获取post/get请求的方式,调用不同的请求方法。
表单提交时,method有get/post两种请求。
<!--表单提交默认method是get请求,所以才可以不写-->
<form action="http://localhost:8080/hello" method="get">
<input type="submit">
</form>
1.在实现servlet接口的类中需要将service方法中的参数servletRequset向下转型为HttpServletRequest子接口,该子接口有getMethod()方法。
2.获取请求的方式getMethod()方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { // 3
System.out.println("3.hello servlet被客户端访问了,现在我这里的Tomcat服务器正在响应。。");
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String method = httpServletRequest.getMethod();// 获取表单中的get/post请求方法
if ("GET".equals(method)) {
System.out.println("get请求");
} else if ("POST".equals(method)) {
System.out.println("post请求");
}
}
但以上两个步骤的代码是在一个方法中做get/post请求两件事,不推荐。
我们推荐:创建doGet()和doPost()两个方法
public void doGet(){
System.out.println("get请求");
System.out.println("get请求");
}
public void doPost(){
System.out.println("post请求");
System.out.println("post请求");
}
二.实现Servlet程序(推荐继承类)
HttpServlet类
开发中,推荐使用继承HttpServlet类的方式去实现Servlet程序
步骤:
- 编写类继承HttpServlet类
public class HelloHttpServlet3 extends HttpServlet {
- 根据业务重写doGet、doPost方法
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("hello httpServlet3的doPost方法");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("hello httpServlet3的doGet方法");
}
- 在web.xml中配置servlet程序的访问地址
<servlet>
<servlet-name>HelloHttpServlet3</servlet-name>
<servlet-class>com.lwt.HelloHttpServlet3</servlet-class>
</servlet>
<!--标签给servlet程序 配置访问地址-->
<servlet-mapping>
<servlet-name>HelloHttpServlet3</servlet-name>
<!-- 配置访问地址 以斜杠打头-->
<url-pattern>/hello3</url-pattern>
<!-- http://localhost:8080/hello3-->
</servlet-mapping>