当前位置: 首页 > news >正文

Java基础(①Tomcat + Servlet + JSP)

准备环境

安装 JDK(推荐 JDK 8 或 11)
配置好 JAVA_HOME 和 PATH
java -version 确认成功

安装 Tomcat
去 Tomcat 官网 下载 Tomcat 9/10,解压到本地
记住路径,比如 D:\apache-tomcat-9.0.XX

进入VS Code

打开命令面板(Ctrl+Shift+P)

输入Maven:New Project

选择一个 archetype(项目模板)

maven-archetype-webapp

这是官方提供的最小 JSP/Servlet Web 应用模板

添加的依赖

你现在的 pom.xml 是 archetype 自动生成的最基础版本,只带了 junit 测试依赖。要让它能跑 Servlet + JSP,你需要在 <dependencies> 里加上几个关键依赖

<dependencies><!-- Servlet API:提供 HttpServlet、HttpServletRequest/Response 等类 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><!-- JSP API:支持 JSP 页面编译 --><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.3</version><scope>provided</scope></dependency><!-- JSTL 标签库(常用 JSP 标签,比如 <c:forEach>) --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- 你已有的 junit 测试依赖可以保留 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency>
</dependencies>

javax.servlet-api:让你能写 HttpServlet
javax.servlet.jsp-api:让 JSP 页面能被编译
jstl:JSP 常用标签库,简化页面逻辑
scope=provided:表示运行时由 Tomcat 提供,不会打进 war 包里

更新依赖

在项目根目录(有 pom.xml 的地方)执行:

mvn clean package

放到 Tomcat 运行

在项目根目录执行:

mvn clean package

生成 target/mywebapp.war
把 mywebapp.war 拷贝到 Tomcat 的 webapps/ 目录
启动 Tomcat(双击 bin/startup.bat 或 startup.sh)

补全目录结构

src/main 下新建 java 目录(用来放 Java 源码):

mywebapp
├── src
│   └── main
│       ├── java          ← 新建这个目录
│       │   └── com
│       │       └── example
│       │           └── LoginServlet.java
│       └── webapp
│           ├── index.jsp
│           └── WEB-INF
│               └── web.xml
└── pom.xml

完整版 LoginServlet(仅支持 JSON)

package com.example;import com.fasterxml.jackson.databind.ObjectMapper;import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;@WebServlet("/api/login")
public class LoginServlet extends HttpServlet {private final ObjectMapper mapper = new ObjectMapper();@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {req.setCharacterEncoding("UTF-8");resp.setContentType("application/json;charset=UTF-8");// 读取 JSON 请求体StringBuilder sb = new StringBuilder();try (BufferedReader reader = req.getReader()) {String line;while ((line = reader.readLine()) != null) {sb.append(line);}}// 解析 JSONMap<String, String> data = mapper.readValue(sb.toString(), Map.class);String username = data.get("username");String password = data.get("password");// 构造返回结果Map<String, Object> result = new HashMap<>();if ("admin".equals(username) && "123456".equals(password)) {result.put("status", "success");result.put("message", "登录成功");Map<String, String> userInfo = new HashMap<>();userInfo.put("id", "1001");userInfo.put("name", "管理员");userInfo.put("email", "admin@example.com");result.put("user", userInfo);// 保存到 sessionHttpSession session = req.getSession();session.setAttribute("user", userInfo);} else {result.put("status", "fail");result.put("message", "用户名或密码错误");}// 输出 JSON 响应mapper.writeValue(resp.getWriter(), result);}
}

curl 示例

curl -X POST http://localhost:8080/mywebapp/api/login \-H "Content-Type: application/json" \-d '{"username":"admin","password":"123456"}'

JSESSIONID 就像寄存柜的小票号码
Session 数据(比如 {userId=1001, name="管理员"})就像你放在柜子里的东西
Tomcat 的内存 就是那一排排寄存柜

流程是这样的:

你第一次来(登录),Tomcat 给你开了一个柜子(新建 Session),并给你一张小票号码(JSESSIONID)

你下次再来,把小票号码交给服务员(浏览器带上 Cookie: JSESSIONID=...)

服务员(Tomcat)拿着号码去柜子里找,找到你之前的柜子(Session),取出里面的东西(session.getAttribute("user"))

http://www.dtcms.com/a/423463.html

相关文章:

  • 连云港百度推广总代理上海谷歌seo公司
  • ssl外贸网站网站空间托管
  • k8s kubelet 10250监控端口访问配置
  • 十二、伪分布式配置
  • VScode通过跳板机连接内网服务器
  • wordpress小说下载站建设银行网站如何下载u盾
  • 餐饮行业做微信网站有什么好处网站上图怎么用ps做
  • 设计的网站都有哪些功能辛集哪做网站
  • PostgreSQL的逻辑复制spill溢出案例和启停库逻辑
  • OpenMQTTGateway 技术全解:统一多协议到 MQTT 的开源网关
  • 数据结构——二叉树学习
  • 动规:回文串问题
  • PostgreSQL WAL 日志发展史 - pg7
  • 商丘企业网站建设团队网站设计的内容以及步骤
  • 网站域名所有人wordpress 子域名
  • ListenHub:AI播客平台,一句话生成播客
  • 知名的媒体发稿代理有哪些
  • PyTorch nn.Linear 终极详解:从零理解线性层的一切(含可视化+完整代码)
  • 大型企业级金融信贷平台需求报告
  • 【算法】小点:List.remove
  • 文件扩展名.js .jsx .ts .tsx区别(JavaScript扩展名、React扩展名、TypeScript扩展名)
  • MySQL 在金融系统中的应用:强一致性与高可用架构实战
  • 销售型网站营销目标查网址是否安全
  • 媒体发稿平台如何选
  • 靠谱的综合门户媒体发稿如何选
  • 学习:uniapp全栈微信小程序vue3后台(29)
  • 装修设计网站排名新浪短网址链接
  • kali 01——安装及简要介绍
  • 宁夏政务网站建设标准wordpress是瀑布流吗
  • 烟台 网站建设中国广告在国外投放案例