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 接受符合类型数据