javaweb笔记1

admin 2025-12-22 00:42:15 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 这篇文章是一份JavaWeb学习笔记,重点介绍了Servlet的创建方法、生命周期(初始化、处理请求、销毁)以及前后端项目互通的实现。文章详细说明了如何搭建前端环境(Mmall项目),解决依赖版本不匹配问题,并通过创建CorsFilter解决跨域问题。笔记还包含XML与HTML的区别、HTTP协议基础等基础知识,以及常见错误及解决方案,如依赖包版本不匹配、Simditor富文本编辑器版本不兼容等。 综合评分: 85 文章分类: WEB安全,应用安全,安全开发,安全建设,安全工具


cover_image

javaweb笔记1

原创

zoe

哦0吼

2025年12月21日 22:44 河北

学习笔记

第一部分: (概述 & XML)

1. XML 与 HTML 的区别

·用途:HTML 用于显示数据,XML 用于传输和存储数据。

·语法

·HTML 标签不区分大小写,XML 严格区分大小写

·HTML 可以有多个根元素,XML 只能有一个根元素

·HTML 空格自动过滤,XML 空格不会自动过滤。

·HTML 标签预定义,XML 标签可自定义扩展

2. HTTP 协议基础

·B/S模式 客户端/服务器模式

·无状态协议 对于事物处理没有记忆能力

·请求方式

·GET:参数拼接在 URL 后(如 ?name=lee&psd=hnxy),不安全,适用于查询。

·POST:数据在请求体中,大小无限制,更安全,适用于提交表单。

·状态码

·200: 成功。

·404: 资源未找到 (客户端错误)。

·500: 服务器内部错误。

3. 前端环境搭建 (Mmall 项目)

问题总结:

1.前端环境依赖问题:安装 webpack 或 webpack-dev-server 时版本不匹配,或 Node.js 版本过高 / 过低,导致项目启动失败。

2.为什么会出现404问题:路径拼接可能存在问题,打开开发者公工具,查看解决具体问题。

第二部分:Servlet

1. 定义、特点

Servlet是运行在Web服务器端的Java应用程序,它使用Java语言编写。与Java程序的区别是,Servlet 对象主要封装了对HTTP请求的处理,并且它的运行需要Servlet容器(eg:tomcat)的支持。

Servlet就是一个Java类。作用:用于处理客户端传来的HTTP请求,并返回一个响应,主要功能是生成动态web内容。

2. 如何创建

1、 新建项目,选择Maven Archetype项目

然后填写项目名,选择Archetype后缀为webapp的,最后点击创建

 2、创建完成后,连接tomcat服务器

 3、然后在main下面创建Directory命名为java,然后在java下面创建packages命名为servlet,最后在servlet下面创建java class命名为FirstServlet,写内容

4、在pop.xml中引入servlet依赖,输入如图所示的代码

5、接着修改Java Compiler

6、运行

3.生命周期

Servlet 的整个生命周期由 Servlet 容器(如 Tomcat)管理,核心可概括为 “1 次初始化 → N 次处理请求 → 1 次销毁” 三步,具体如下:

初始化(1 次)客户端首次访问该 Servlet 时,容器先检查内存:若已有 Servlet 对象,直接用;若没有,先创建 Servlet 实例,再调用init()方法完成初始化(比如加载配置)。整个生命周期里,init()只执行 1 次。

处理请求(N 次)每次客户端访问(如浏览器请求),容器都会:创建ServletRequest(存请求信息,如参数、URL)和ServletResponse(存响应内容,如返回文本);调用 Servlet 的service()方法,该方法会根据请求类型(GET/POST)自动调用doGet()/doPost()处理请求、生成响应;每来一次请求,就执行 1 次service(),因此会被调用多次。

销毁(1 次)当服务器关闭或 Web 应用被移除时,容器会先调用 Servlet 的destroy()方法(释放资源,如数据库连接),再销毁 Servlet 对象。整个生命周期里,destroy()只执行 1 次。

把这个Mmall项目的操作和逻辑,想象成开一家“线上商店”的全过程——从“搭建店铺基础设施”(环境配置),到“打通前后门沟通”(前后端互通),再到“验证顾客身份”(登录功能)

4.前后端项目启动

Node.js(建议14版本)**:相当于“店铺的总电源”,所有前端代码运行都靠它。

验证方式:打开Cmd,输入node -v,查看是否显示14.x.x版本

  • **webpack@^1.15.0**:“打包商品的机器”,把零散的前端代码(JS、CSS)压缩成浏览器能快速加载的文件。

安装命令:npm install -g webpack@^1.15.0

  • **webpack-dev-server@^1.16.5**:“店铺的临时试营业服务器”,能让你在本地预览前端页面,改代码后还能实时刷新(就像改了商品价格,货架上能立刻显示新价格)。

安装命令:npm install -g webpack-dev-server@^1.16.5

源码包解压安装依赖

进入mmall文件夹(前台根目录),执行npm install --registry=https://registry.npmmirror.com

**启动项目**

  • 开发模式(用于开发调试,代码修改后实时更新):npm run dev\_win

  • 生产模式(用于项目上线,代码会进行压缩优化):npm run dist\_win

*常见错误及解决(启动报错)**

  • 错误信息:ERROR in ./src/util/mm.js Module not found: Error: Cannot resolve module 'hogan'

  • 原因:引用的hogan模板引擎包名错误,正确包名为hogan.js

  • 解决步骤:

  1. 卸载错误包:npm uninstall hogan

  2. 安装正确包:npm install hogan.js --save-dev

  3. 验证:查看package.json文件的devDependencies或dependencies部分,确认包含"hogan.js": "^x.x.x"

  4. **预览项目**:开发模式启动成功后,在浏览器访问http://localhost:8088/dist/view/index.html

**常见错误及解决(空白页面+控制台错误)**

  • 错误信息:Uncaught TypeError: Simditor.connect is not a function

  • 原因:Simditor(富文本编辑器)版本不兼容或依赖缺失

  • 解决步骤:

  1. 卸载现有Simditor:npm uninstall simditor

  2. 安装兼容版本:npm install [email protected] --save

  3. 安装缺失依赖:npm install simple-module@latest simple-hotkeys@latest simple-uploader@latest --save

  4. **预览项目**:错误解决后,访问http://localhost:8086/dist/view/index.html

5.前后端项目互通

(一)前期准备:前端配置后端地址

找到前端项目中src/util/mm.js文件

conf对象中设置serverHost: 'http://localhost:8080/api',该地址为后端接口基础路径,确保前端能正确找到后端服务

(二)后端核心实现,后台装“接待员”(创建LoginServlet)

后台需要一个“接待员”(Servlet),专门处理前台发来的登录请求,

  • 代码逻辑:创建LoginServletTest类,加@WebServlet("/api/user/login.do")注解——意思是“只要前台访问/api/user/login.do这个地址,就由我这个接待员处理”。

  • 代码结构:

@WebServlet("/api/user/login.do") // 配置Servlet访问路径,与前端请求地址对应

public class LoginServletTest extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

System.out.println("前端登录请求发送到此"); // 接收请求后打印日志,验证请求是否到达

}

}

2. \*\*解决跨域问题(关键)\*\*

- 原因:前端和后端运行在不同端口(如前端8088,后端8080),浏览器出于安全策略会阻止跨域请求

- 实现方式:创建CorsFilter过滤器

- 代码:

java

public class CorsFilter implements Filter {

@Override

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

HttpServletResponse httpResponse = (HttpServletResponse) response;

// 允许所有来源访问

httpResponse.setHeader(“Access-Control-Allow-Origin”, “*”);

// 允许的请求方法

httpResponse.setHeader(“Access-Control-Allow-Methods”, “GET, POST, PUT, DELETE, OPTIONS”);

// 允许的请求头

httpResponse.setHeader(“Access-Control-Allow-Headers”, “Content-Type, Authorization”);

// 预检请求有效期(1小时)

httpResponse.setHeader(“Access-Control-Max-Age”, “3600”);

chain.doFilter(request, response); // 继续执行后续请求处理

}

// init和destroy方法为空实现

@Override

public void init(FilterConfig filterConfig) throws ServletException {}

@Override

public void destroy() {}

}

  • 配置:在web.xml中注册过滤器,确保所有请求都经过该过滤器

“`xml

CorsFilter

servlet.CorsFilter

CorsFilter

/*


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:哦0吼 zoe《

评论:0   参与:  3