HttpServlet基础

1.创建HttpServlet类

我们已经创建了普通的javaweb项目的框架,这里给出一个创建HttpServlet的方法:

首先右键src文件夹下面创建的controller包,点击new,找到Servlet按键点击进入New Server窗口。设置server的name并点击确定即可创建一个简单的httpservlet类。

延续传统的xml配置格式,httpservlet类也需要在web.xml文件中配置httpservlet相关信息。

XML 复制代码
    <servlet>
        <servlet-name>httpservlet</servlet-name>
        <servlet-class>controller.Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>httpservlet</servlet-name>
        <url-pattern>/httpservlet</url-pattern>
    </servlet-mapping>

此时可以在<servlet>标签中添加一个<load-on-startup>标签,当此标签的值大于或者等于0时,表示当容器在tomcat启动时就会加载这个servlet。

<load-on-startup>元素的值是一个序号,Tomcat会使用这个序号给多个Servlet排序。然后在Tomcat启动时会按这个顺序来创建Servlet实例对象。

2.相关方法介绍

在创建好的Servlet类中有两个方法:

一个doPost方法和一个doGet方法,两个方法中都有两个参数:request和response参数,分别表示前端像后端请求和后端向前端返回。

(1)request:

1.首先介绍第一个方法:getParameter方法,在方法内部填入字符串类型参数,返回字符串类型。在index.jsp中创建一个form表单来作为测试。

html 复制代码
    <form action="httpservlet" method="post">
      姓名:<input id="user-name" name="user" type="text">
      密码:<input id="password" name="pass" type="password">
      <%--提交按键--%>
      <input type="submit">
    </form>

因为form表单中填写的类型是post,所以需要对doPost方法的request参数使用该方法获取相关信息。

java 复制代码
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String user = request.getParameter("user");
        String password = request.getParameter("pass");
        System.out.println(user+":"+password);
    }

最后打印结果:

2.同理使用getParameterValues方法可以获取多值参数,如复选框中的参数。

3.getParameterMap方法返回Map类型参数,获取所有参数的键值对。

注意:POST 请求需先设置编码:request.setCharacterEncoding("UTF-8")解决中文乱码问题

4.获取请求路径等信息:

方法 作用 示例(假设访问http://localhost:8080/myweb/httpservlet?user=test
String getRequestURI() 获取请求 URI(项目路径 + Servlet 路径) /myweb/httpservlet
String getContextPath() 获取项目上下文路径(部署名) /myweb
String getMethod() 获取请求方式(GET/POST/PUT 等) POST
String getRemoteAddr() 获取客户端 IP 地址 0:0:0:0:0:0:0:1(本地)

5.获取请求头/Cookie:

方法 作用 示例
String getHeader(String name) 获取指定请求头(如 User-Agent、Referer) String userAgent = request.getHeader("User-Agent");(获取浏览器信息)
Cookie[] getCookies() 获取客户端携带的所有 Cookie Cookie[] cookies = request.getCookies();(遍历获取指定 Cookie)
(2).response:

注意:输出中文前必须设置响应编码:response.setContentType("text/html;charset=UTF-8");(同时设置响应头和编码,一步到位)

1.重定向方法:sendRedirect(String location)重定向到指定路径(客户端跳转,URL 会变)

2.输出响应内容:

方法 作用 示例
PrintWriter getWriter() 核心:获取字符输出流(输出文本 / HTML) PrintWriter out = response.getWriter(); out.println("Hello World");
ServletOutputStream getOutputStream() 获取字节输出流(输出图片 / 文件等二进制数据) (文件下载场景常用)

3.设置响应头/状态码:

方法 作用 示例
void setHeader(String name, String value) 设置响应头(如缓存、重定向) response.setHeader("Refresh", "3;url=/index.jsp");(3 秒后重定向)
void setStatus(int sc) 设置响应状态码(如 200 成功、404 不存在) response.setStatus(404);
void sendError(int sc, String msg) 发送错误状态码 + 提示信息 response.sendError(500, "服务器内部错误");

请求转发和重定向的区别:

维度 请求转发(forward) 重定向(redirect)
跳转方 服务器内部跳转 客户端重新请求
URL 地址 不变 变为重定向的地址
请求域数据 可传递 不可传递(新请求)
路径 相对路径 / 绝对路径 建议用绝对路径(包含项目名)
相关推荐
FQNmxDG4S5 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
虹科网络安全6 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje6 小时前
Java语法进阶
java·开发语言·jvm
rKWP8gKv77 小时前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫7 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287927 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本7 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
yaoxin5211237 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
极客先躯9 小时前
高级java每日一道面试题-2025年11月24日-容器与虚拟化题[Dockerj]-runc 的作用是什么?
java·oci 的命令行工具·最小可用·无守护进程·完全标准·创建容器的核心流程·runc 核心职责思维导图
用户60648767188969 小时前
AI 抢不走的技能:用 Claude API 构建自动化工作流实战
java