在上篇文章中,我已经正确安装了tomcat和利用servlet写了个基础的hello world程序,明白了这两个东西到底是啥玩意.
接下来,需要写个登录的小案例来进一步熟悉下基于servlet开发的流程.
一,新建项目
我们新建的maven项目其实里面是空的。所以我们需要给他变成一个servlet项目。
二,添加web模块
新建一个空项目之后,我们给他增加一个Web模块。
三,引入servlet
在编辑器的pom.xml直接写,编辑器会帮助我们自动下载.
<dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency></dependencies>
四,编写自己的MyServlet类
基本上就是以自己的需求来重写http请求和响应:
init(): 这个方法在Servlet初始化时被调用
doGet(): 这个方法用于处理HTTP GET请求
doPost(): 这个方法用于处理HTTP POST请求
doPut(): 这个方法用于处理HTTP PUT请求
service(): 这个方法根据HTTP请求的方法类型,调用对应的doXXX()方法。
destroy(): 这个方法在Servlet被销毁前被调用
如下:
package com.masiyi.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {public MyServlet() {super();}@Overridepublic void init() throws ServletException {super.init();}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doGet(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=UTF-8");req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");String username = req.getParameter("username");String pwd = req.getParameter("pwd");System.out.println("用户名:" + username + ":密码:" + pwd);PrintWriter writer = resp.getWriter();writer.print("用户名:" + username);writer.print("密码:" + pwd);writer.close();super.doPost(req, resp);}@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.service(req, resp);}@Overridepublic void destroy() {super.destroy();}
}
五,配置自定义servlet类的访问路径
主要是在web.xml中定义:
<servlet><servlet-name>myServlet</servlet-name><servlet-class>com.masiyi.servlet.MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>myServlet</servlet-name><url-pattern>/myServlet</url-pattern></servlet-mapping>
这段XML配置代码用于将Servlet类com.masiyi.servlet.MyServlet映射到URL模式/myServlet上。
标签用于配置一个Servlet,其中:
指定了Servlet的名称为myServlet。
指定了Servlet类的完整路径为com.masiyi.servlet.MyServlet。
通过这样的配置,当用户请求的URL匹配/myServlet时,容器将会调用com.masiyi.servlet.MyServlet来处理该请求。
或者一个更简便的方式是在MyServle这个类前面使用注解:
@WebServlet("/MyServlet")
六,编写页面
在web根目录创建index.jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>向Servlet发送请求</title>
</head>
<body>
<%--注意:action的值 是 :web.xml 文件中的 url-pattern 的值。
--%>
<form action="/MyServlet" method="post">用户名: <input type="text" name="username"> <br>密码: <input type="password" name="pwd"> <br><input type="submit" value="提交">
</form>
</body>
</html>
七,运行项目
使用上篇文章讲的使用idea的tomcath插件部署项目
八,运行后的结果
也就是说,当我们运行部署项目后,浏览器访问localhost:8080,就是访问的index.jsp文件,浏览器解析这个文件,渲染出了这个页面.
而当我们点击提交时,浏览器的url变成localhost:8080/MyServlet,发起了一个新的post请求.
又因为@WebServlet("/MyServlet")
这个注解,将该路径映射到MyServlet这个类上,于是开始执行这个类.
又因为它是servlet的实例,支持htt请求和响应的处理,所以能够返回新的数据给浏览器.
也就是说:Servlet是Java中用于处理Web请求的一种技术,它封装了HTTP请求和响应的处理逻辑。通过继承Servlet类并重写其中的方法,我们可以创建自定义的Servlet类,用来拦截和处理HTTP请求,从而完成业务代码逻辑。
具体来说,当客户端发送HTTP请求时,Servlet容器会根据Servlet的映射关系找到对应的Servlet类,并调用其相应的方法(如doGet、doPost等)来处理请求。在自定义的Servlet类中,我们可以编写业务逻辑代码,包括数据处理、页面渲染、数据库操作等,以实现特定的功能。