Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。使用Servlet可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
新建项目(不要中文路径)


弄好后就会创建一个模板,然后运行就会起一个tomcat网站

现在我们自己进行一些编写代码
比如我们现在新建一个 IndexServlet 类,并通过另外的路由来访问这个类的代码
package com.example.servlet;
public class IndexServlet {
}
我们对这个类进行继承 HttpServlet
package com.example.servlet;
import javax.servlet.http.HttpServlet;
public class IndexServlet extends HttpServlet {
}
<?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>
<servlet-name>index</servlet-name>
<servlet-class>com.example.servlet.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
</web-app>
<servlet> 用于定义一个 Servlet 其中会包含两个标签
<servlet-name>:Servlet 的名称,在 <servlet-mapping> 里会用到。<servlet-class>:Servlet 的全限定类名(com.example.servlet.IndexServlet),它是具体实现 HttpServlet 的 Java 类。<servlet-mapping> 用于将 Servlet 名称映射到一个或多个URL路径
<servlet-name>:指定要映射的 Servlet(需要和 <servlet> 中的 servlet-name 保持一致)。<url-pattern>:定义该 Servlet 处理的 URL 路径。由于每个类都要到Web.xml里面进行配置会导致很繁琐。所以可以用第二中方法
直接在类里面加上 @WebServlet
@WebServlet(name = "index",value = "/index")

然后我们根据这个流程图挨着写代码

挨着写方法 init doGet doPost service destroy
public class IndexServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("init Servlet");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet Servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost Servlet");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service Servlet");
}
@Override
public void destroy() {
System.out.println("destroy Servlet");
}
}
执行顺序

然后我们访问 /index 路由就会触发一些对应的方法

发现只要一刷新就会触发 Servlet 的 service 方法
但是这里并没有触发 doGet doPost 方法
这里还有 doPut 等很多中方法,
观察代码可以发现里面有 req 参数 resp 参数,这就是请求与返回
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost Servlet");
}
这里我们只要
当我们在 doGet 方法里面加入对应的请求与返回代码 如下
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println(name);
System.out.println("doGet Servlet");
}
这时我们get请求 name=123 就会返回123
HttpServletRequest是 ServletRequest 的子接口
- getParameterValues — String[ ] 通过name获得多值
- HttpServletResponse是ServletResponse的子接口
getParameter(name)— String 通过name获得值
- setCharacterEncoding() 设置编码格式
- setContentType() 设置解析语言
- getWriter() 获得一个PrintWriter字符输出流输出数据
- PrintWriter 接受符合类型数据