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字符(因浏览器和服务器而异) 理论上无限制,取决于服务器配置
缓存与书签 可被缓存,可收藏为书签 不会被缓存,不能收藏为书签
幂等性 幂等,多次相同请求产生同样的效果和结果 非幂等,重复请求可能导致不同结果
相关推荐
绝无仅有42 分钟前
对接三方SDK开发过程中的问题排查与解决
后端·面试·架构
考虑考虑2 小时前
使用jpa中的group by返回一个数组对象
spring boot·后端·spring
GiraKoo2 小时前
【GiraKoo】C++11的新特性
c++·后端
MO2T2 小时前
使用 Flask 构建基于 Dify 的企业资金投向与客户分类评估系统
后端·python·语言模型·flask
光溯星河2 小时前
【实践手记】Git重写已提交代码历史信息
后端·github
PetterHillWater3 小时前
Trae中实现OOP原则工程重构
后端·aigc
圆滚滚肉肉3 小时前
后端MVC(控制器与动作方法的关系)
后端·c#·asp.net·mvc
SimonKing3 小时前
拯救大文件上传:一文彻底彻底搞懂秒传、断点续传以及分片上传
java·后端·架构
深栈解码3 小时前
JUC并发编程 内存布局和对象头
java·后端
37手游后端团队3 小时前
巧妙利用装饰器模式给WebSocket连接新增持久化
后端