【JavaWeb】03 Servlet 其一 HelloServlet
什么是 Servlet?
Servlet = Server + Applet 即:服务应用程序
1、Servlet 是 JavaEE 规范之一。规范就是接口
2、Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。
3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。
手动实现 Servlet 程序
1、编写一个类去实现 Servlet 接口
2、实现 service 方法,处理请求,并响应数据

3、到 web.xml 中去配置 servlet 程序的访问地址

web.xml 代码
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!-- servlet标签给Tomcat配置Servlet类【Servlet程序】 --> <servlet> <!-- servlet-name 给我们的Servlet类设置一个别名 Alias --> <servlet-name>helloServlet</servlet-name> <!-- 这个Servlet类的完整限定名 --> <servlet-class>cn.dai.servlet.HelloServlet</servlet-class> </servlet> <!-- Servlet类的网路映射路径 --> <servlet-mapping> <!-- 我们所映射的别名 【告诉服务器当前配置的地址是给哪个Servlet程序使用的】--> <servlet-name>helloServlet</servlet-name> <!-- 访问路径 --> <url-pattern>/helloServlet</url-pattern> </servlet-mapping> </web-app>
启动服务器访问,可以看到service方法是一定被调用了

为什么访问失败?
常见的错误 1:url-pattern 中配置的路径没有以斜杠打头

常见错误 2:servlet-name 配置的值不存在:

常见错误 3:servlet-class 标签的全类名配置错误:

从url 地址到 Servlet 程序的访问

端口号占用问题:
找到占用端口,结束进程

根据PID提供的进程号,进入任务管理器找到该进程结束即可

Servlet的作用域:
1、执行 Servlet 构造器方法
2、执行 init 初始化方法
第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用。
3、执行 service 方法
第三步,每次访问都会调用。
4、执行 destroy 销毁方法
第四步,在 web 工程停止的时候调用
演示结果:

GET 和 POST 请求的分发处理
实际上远不止这两种请求的方式,共有7中请求方式
主要的常用的是这两种,而大部分的请求就是get请求
Post请求方式主要就是两种
一个是表单提交发送
二个是Ajax异步通信
首先编写一个Post表单提交的网页
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="http://localhost:8080/JavaWeb/helloServlet" method="post"> 测试 <input type="submit"> </form> </body> </html>
重写service方法
@Override public void service(ServletRequest servletRequest, ServletResponse servletResponse){ System.out.println("HelloServlet 被访问了"); // 类型强转,ServletRequest 是一个接口,而HttpServletRequest是一个实现类 HttpServletRequest httpServlet = ( HttpServletRequest) servletRequest; // 该请求对象可以获取请求的方式是哪种 String method = httpServlet.getMethod(); System.out.println(method); }
测试
使用表单提交访问就会呈现POST
反之直接URL访问则会是GET

由此我们可以这样对两种请求方式进行分别处理
// 服务方法 @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse){ System.out.println("HelloServlet 被访问了"); // 类型强转,ServletRequest 是一个接口,而HttpServletRequest是一个实现类 HttpServletRequest httpServlet = ( HttpServletRequest) servletRequest; // 该请求对象可以获取请求的方式是哪种 String method = httpServlet.getMethod(); System.out.println(method); // 我们可以做一个判断,然后分别对不同的请求分开处理 if (method.equals("POST")) doPost(); else if (method.equals("GET")) doGet(); } void doGet(){ System.out.println("doGet方法调用"); } void doPost(){ System.out.println("doPost方法调用"); }
虚拟网路位置,Servlet的后缀分为了新旧两种方式:
xxx/xxx.do xxx/xxx.action
这是官方的Servlet路由推荐写法


浙公网安备 33010602011771号