JavaWeb笔记

1.可以通过创建一个类实现Servlet并重写所有方法

2.也可以通过继承HttpServlet重写init、service、destroy方法

配置web.xml映射文件和类文件路径一致

浏览器访问:localhost:8080/项目名/文件名(如果是访问类直接是xml中配置的路径) 如果是表单跳转: 表单中<form>属性action指定xml中的映射路径一致 name属性是提交跳转的名称,服务器通过name的值接收

一、Servlet工作原理

客户端请求

用户通过浏览器发送请求至服务器。
2.

匹配Servlet

服务器依据URL模式(web.xml或注解配置)定位对应的Servlet处理请求。
3.

创建请求与响应对象

服务器为每个请求创建HttpServletRequestHttpServletResponse对象,分别用于封装请求信息和准备响应内容。
4.

调用Servlet方法

首次请求时调用init()进行初始化。

service()方法检查请求类型并调用doGet(),doPost()等相应方法处理请求。
5.

处理与响应

在处理方法中,Servlet完成业务逻辑(如数据库交互),并通过HttpServletResponse返回结果给客户端。
6.

销毁Servlet

在应用卸载或服务器关闭时,调用destroy()方法清理资源。

二、请求和响应

Servlet中基本配置

1.request和response的字符编码

request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8");

2.获取表单提交的信息

假设两个name分别为username和password String username=request.getParameter("username"); String password=request.getParameter("password"); //设置响应类型,避免乱码,告诉浏览器是html内容 response.setContentType("text/html;charset=UTF-8"); 这里可以直接输出,但是是在控制台显示

PrintWriter类可以用于在客户端打印提示信息 PrintWriter out=response.getWriter();

//对接收的信息做一个异常判断,也可以通过一个工具类编写一个方法进行判断 System.out.println("this is doGet method"); if(username==null){ out.write("输入账号不合法"); } if(password==null){ //设置响应类型 out.write("输入密码不合法"); } out.flush(); out.close(); }

三、转发和重定向

转发:地址栏显示原地址不改变url,服务器内部行为,只能访问当前工程地址 request.setAttribute("message", "Hello, World!");前是转发字段,后是内容 携带数据进行转发,可以是基本数据类型和引用数据类型

接收:String name=request.getAttribute("message"); 后期需要转型可以进行强转 // 转发到另一个Servlet RequestDispatcher dispatcher = request.getRequestDispatcher("/anotherServlet"); dispatcher.forward(request, response); // 转发到一个JSP页面 RequestDispatcher dispatcher = request.getRequestDispatcher("/result.jsp"); dispatcher.forward(request, response); 重定向:地址栏为新地址,改变url,可以访问任何地址 // 重定向到另一个Servlet request.getContextPath()获取当前请求路径 response.sendRedirect(request.getContextPath() + "/anotherServlet"); // 重定向到一个JSP页面 response.sendRedirect(request.getContextPath() + "/result.jsp");

如何选择:两个请求间需要共享数据就转发,不需要则重定向 !!注:转发前不能有提交响应

四、Servlet的生命周期

当客户端首次发送第一次请求后,由容器(web服务器(tomcat)去解析请求,根据请求找到对应的servlet,判断该类的对象是否存在,不存在则创建servlet实例,调取init0)方法 进行初始化操作,初始化完成后调取service()方法,由service()判断客户端的请求方式,如果是get,则执行doGet(),如果是post则执行doPost().处理方法完成后,作出相应结果给客户端.单次请求处理完毕。 当用户发送第二次以后的请求时,会判断对象是否存在,但是不再执行init0),而直接执行service方法,调取doGet()/doPost()方法。 当服务器关闭时调取destroy()方法进行销毁。 四个过程:

(1)实例化 --先创建servlet实例

当Servlet容器启动或第一次收到对该Servlet的请求时,容器会加载Servlet类并创建其实例。这是Servlet生命周期的起点。

(2)初始化--init()

一旦Servlet实例被创建,容器就会调用init()方法一次。此方法接收一个ServletConfig对象作为参数,允许Servlet读取配置信息如初始化参数等

(3)处理请求 ---service()

初始化完成后,Servlet就准备好处理客户端请求了。每当有请求到达时,容器都会调用Servlet的service()方法,并传递HttpServletRequestHttpServletResponse两个对象。service()方法根据HTTP请求类型(GET, POST等)来决定调用相应的doGet(), doPost()`等方法进行具体的请求处理。

(4)服务终止 --destory()

在Servlet容器准备关闭或者Servlet不再需要时,容器会调用Servlet的destroy()方法。这标志着Servlet生命周期的结束。==>销毁Servlet对象(实例)

五、HTTP的GET和POST区别

特性 GET POST
用途 用于请求数据(从服务器获取信息) 用于提交数据到服务器(如提交表单、上传文件)
应用场景 查询操作、缓存利用、书签功能 表单提交、文件上传、非幂等操作
安全性 较低,参数直接附加在URL中,敏感信息易暴露 相对较高,数据通过请求体发送
数据传输量 受限,通常不超过2048字符(因浏览器和服务器而异) 理论上无限制,取决于服务器配置
缓存与书签 可被缓存,可收藏为书签 不会被缓存,不能收藏为书签
幂等性 幂等,多次相同请求产生同样的效果和结果 非幂等,重复请求可能导致不同结果
相关推荐
xuxie131 小时前
SpringBoot文件下载(多文件以zip形式,单文件格式不变)
java·spring boot·后端
重生成为编程大王1 小时前
Java中的多态有什么用?
java·后端
Funcy2 小时前
XxlJob 源码分析03:执行器启动流程
后端
豌豆花下猫4 小时前
Python 潮流周刊#118:Python 异步为何不够流行?(摘要)
后端·python·ai
秋难降5 小时前
SQL 索引突然 “罢工”?快来看看为什么
数据库·后端·sql
Access开发易登软件6 小时前
Access开发导出PDF的N种姿势,你get了吗?
后端·低代码·pdf·excel·vba·access·access开发
中国胖子风清扬6 小时前
Rust 序列化技术全解析:从基础到实战
开发语言·c++·spring boot·vscode·后端·中间件·rust
bobz9657 小时前
分析 docker.service 和 docker.socket 这两个服务各自的作用
后端
野犬寒鸦7 小时前
力扣hot100:旋转图像(48)(详细图解以及核心思路剖析)
java·数据结构·后端·算法·leetcode
phiilo7 小时前
golang 设置进程退出时kill所有子进程
后端