目录
什么是Servlet
手动实现Servlet程序
常见的配置错误
Servlet-url如何定位到Servlet程序去访问
Servlet生命周期
Servlet生命周期总结
Servlet 请求的分发处理
1、servlet是javaEE规范之一。规范就是接口
2、servlet就是javaweb三大组件之一。三大组件分别是:servlet程序、Filter过滤器、Listenter监听器。
3、servlet是运行在服务器上的一个java小程序,它可以接受客服端发送过来得请求,并响应数据给客服端。
步骤:
1、编写一个类去实现Servlet接口
2、实现service方法,处理请求,并相应数据
3、到web.xml中配置Servlet程序的访问地址
创建一个servlet模块,和步骤之前tomcat类似
在src下创建一个类去实现Servlet接口,快捷键Alt+insert选择实现方法,回车即可
新建的这个类如是:
package com.servlet;
import javax.servlet.*;
import java.io.IOException;
public class HelloServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* service方法是专门用来处理请求和响应的(只要执行这个类就会访问)
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello servlet被访问了");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
3.到web.xml配置,在web-app标签里写入如下
HelloServlet
com.servlet.HelloServlet
HelloServlet
/hello
4、我们在index.jsp下写入一些内容,然后启动
结果:
前面在Tomcat也说过了,只写到工程名,没有资源名默认访问index,index目录下的内容会呈现到浏览器上
我们前面给这个配置了路径为hello,我们在加上就会访问servlet程序
①起的路径名是随意起的,没有任何相关性,这虽然没有任何问题,但是不好分辨
②,路径没有以斜杆开头,如:
hello
这样会导致出错
所以一般起名字前得加/,正确写法:
hello
在idea还可以有提示,有些编辑器就不会给提示,运行之后
在servlet-mapping配置访问地址时,要和前面起的别名一致
④、标签的全类名写错、漏写
全类名是要写出实现Servlet接口那个类所在的位置,写错、少写都会报错,
圈起来的要一致
其中,一个端口号只能给一个工程,一个工程可以占用多个端口号,(工程就是文件夹,资源就是文件夹里的目录)
之前的类
package com.servlet;
import javax.servlet.*;
import java.io.IOException;
public class HelloServlet implements Servlet {
public HelloServlet() {
System.out.println("1 构造器");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2 init初始化方法");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* service方法是专门用来处理请求和响应的(只要执行这个类就会访问)
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3 Servlet==hello servlet被访问了");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("4 destroy销毁方法");
}
}
当我们启动,访问http://localhost:8080/01_servlet/hello时
一开始出现1 2 3,后面一直刷新就一直出现3,退出程序出现4
1.执行setvlet构造器方法
2.执行init初始化方法
第一和第二步是在第一次访问的时候创建servlet程序会调用,
3.执行servlet方法
第三步,每次访问都会调用
4.执行destroy销毁方法
第四步,在web工程停止的时候调用
我们使用表单提交时,有get(非加密)和post(加密)两种提交方式
创建一个表单a.html
Title
在实现的Servlet接口的类,中的重写的service方法中
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3 Servlet==hello servlet被访问了");
//类型转化,因为HttpServletRequest有getMethod方法
HttpServletRequest httpServletRequest= (HttpServletRequest) servletRequest;
//getMethod识别当前提交方式是get还是post,分别返回"GET"和"POST"
String method=httpServletRequest.getMethod();
if("GET".equals(method)){
//为了防冗余和更好的维护,定义方法
// System.out.println("get请求");
doGet();
}else if ("POST".equals(method)){
// System.out.println("post请求");
doPost();
}
}
public void doGet(){
System.out.println("get请求");
}
public void doPost(){
System.out.println("post请求");
}
启动服务器,后如图所示
运行在浏览器后,每次提交都会访问service方法,并打印出对应的method