1 编写第一个Servlet
1.1 不使用任何IDE
- HelloWorld:实现HttpServlet,然后重写doGet方法
package socket;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWorld extends HttpServlet{
@Override
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
PrintWriter pw = response.getWriter();
pw.println("HelloWorld");
pw.flush();
}
@Override
public void doPost(HttpServletRequest request,HttpServletResponse response){
}
}
- webapps:在该文件夹下建立目录与文件
- webapps目录下建立目录first,表示项目名
- first下建立目录WEB-INF
- WEB-INF下建立目录classes、文件web.xml
- 在classes下,按servlet中所定义的正确的包名来建立目录socket
- 将Servlet程序编译后的.class文件放入socket目录中
- web.xml:添加请求与Servlet类的对应关系
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<servlet>
<!--此处必须使用Servlet的全限定类名(包名+类名)-->
<servlet-name>HelloWorld</servlet-name>
<servlet-class>socket.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld.do</url-pattern>
</servlet-mapping>
</web-app>
- 启动Tomcat
- 浏览器访问Tomcat
http://localhost:8080/first/HelloWorld.do
1.2 Eclipse
- 配置jdk:Windows–Preferences–Java
- 配置tomcat
- 创建web项目
注:如果选3.0,那么创建Servlet后,不会直接修改web.xml而是将配置信息放到别的地方,不建议使用3.0
- HelloWorld:创建Servlet类
- 部署项目
- 启动Tomcat
1.3 Intellij IDEA
- 创建项目
- 导入servlet-api.jar,该包在Tomcat的lib目录下存在
- 对于Intellij IDEA的导包,在这需要说明几点
- 通过下面方式,对web项目导入的jar包,只用来编译,真正执行时的jar包,是WEB-INF/lib下的jar包
- 因此如果Tomcat中不存在的jar包,想正确使用,必须在WEB-INF/lib中放入jar包,并删除out后,重新部署,并启动Tomcat
对号选中后,依次点击apply和ok
- 对于Intellij IDEA的导包,在这需要说明几点
- 添加Tomcat
配置虚拟项目名称,用于区分同一个Web Server下的不同项目,就相当于不使用ide时的那个first文件夹
2 Servlet介绍
2.1 Servlet简介
- Servlet是一种Web服务器端编程技术
- 是实现了特殊接口的Java类
- 由支持Servlet的Web服务器调用和启动运行
- 一个Servlet负责对应的一个或一组URL访问请求,并返回相应的响应内容
2.2 Intellij IDEA上的out目录
- Intellij IDEA中,将整个web项目,会放在project目录下的out/artifacts中,不会放在Tomcat的webapps下,但Tomcat启动后,会将该out/artifacts下的项目加载到Tomcat中(正常情况下可以通过修改server.xml实现),猜测这是为了方便移植才这样处理,因为一旦需要将这个web项目,由开发环境转到生产环境时,只需将out/artifacts目录下所有内容导入生产环境的Tomcat中的webapps下即可
2.3 Servlet生命周期
- 每种Servlet,都是只有一个实例,无法重复创建多个,多次同一个请求,是由同一个Servlet对象处理的
- 当一个Servlet接收到第一次请求时,创建该Servlet对象,并调用init方法
- 如果在web.xml中配置了<load-on-startup>标签,那么在Tomcat启动时,就会创建该Servlet对象,中间的数值表示优先级
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
- 服务器关闭后,先调用destroy方法,然后销毁Servlet对象
2.4 Servlet中的service、doGet、doPost方法之间的关系
- 自己编写的Servlet中的service、doGet、doPost都会覆盖HttpServlet中对应的方法
- 如果覆盖了service方法, 而新的service方法中没有调用doGet或doPost,那么接收到的请求,不再会进行doGet、doPost处理
- HttpServlet中没提供doGet、doPost的默认实现,因此如果自己编写的Servlet中不重写这两个方法, 就无法正确处理请求,响应码405
- 编写Servlet时,不需要重写service方法,只需重写doGet和doPost即可
//HttpServlet中的service方法代码片段
if (method.equals("GET")) {
...
this.doGet(req, resp);
}else if (method.equals("POST")) {
this.doPost(req, resp);
}
...
2.5 自定义jsp发送post请求
- method.jsp
<%--
Created by IntelliJ IDEA.
User: 含低调
Date: 2020/2/19
Time: 16:22
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<!--form为表单,action表示该表单提交后所发送的uri,method为请求方法-->
<form action="HelloWorld" method="post">
用户名:<input type="text" name="name" value=""><br/>
密码:<input type="text" name="pwd" value=""><br/>
<input type="submit" value="登录">
</form>
</body>
</html>
- 浏览器访问该jsp
http://localhost:8080/myfirstServlet/method.jsp