servlet是干什么的?
- 这部分内容较为底层,可能在使用spring框架后不一定要手写,但作为基础,有必要好好了解下。
- 是sun公司开发的,目的是开发动态web
- 具体使用时是:在API中为我们提供了一个接口(我们一般实现HTTPServlet接口),我们需要编写一个类来实现该接口,并在这个类中处理request和response即可。
servlet运行原理
在浏览器中输入请求地址后,浏览器会依据IP地址及端口号找到对应的Web服务器,如果请求的是静态资源,Web服务器直接提供响应;如果请求的是动态资源,Web服务器的通信模块会将该请求传递给Servlet容器的通信模块,Servlet容器负责创建Servlet实例,并将请求(request)中的数据解析出来传递给Servlet。在Servlet处理完数据之后,响应结果(response)也是由容器的通信模块负责返回给Web服务器。后续的Servlet的销毁及管理都由容器来负责。
运行流程如下:
- 浏览器依据IP建立与容器的连接
- 浏览器将请求数据打包
- 容器解析请求数据包,封装request和response对象
- 容器依据请求资源路径找到Servlet创建对象
- 容器将request和response对象作为参数传入service方法,并调用
- 容器将响应数据打包发给浏览器
- 浏览器取出结果,生成页面
servlet类怎么写:
public class cookies extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter writer = resp.getWriter(); writer.print("hello!"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
自己写的类中:
- 实现了HttpServlet接口
- 重写了doGet和doPost方法
- 把doPost指向doGet就行了(doget在使用时会直接把请求参数附在url上面,doPost则不会,所以安全性提高)
- 在重写中提取request中信息,把response给set好
需要在web.xml里面添加映射,将url映射到写好的servlet类
hello是自己取的名称,/hello是访问时用的url,com.kuang.servlet是对应的类
Tomcat的配置:类似的文章很多,要对打包的war进行一个配置
https://www.cnblogs.com/Miracle-Maker/articles/6476687.html
servlet的映射:
- 一个servlet指定一个映射路径
- 一个servlet指定多个映射路径
- 一个servlet指定通用映射路径(hello/*)
- 指定后缀或者前缀
请求转发和重定向的区别:
上为请求转发,下为重定向。
请求转发的httpcode任然是200,而不是代表着重定向的3xx
servletcontext:
- context,上下文之意。这里就是让几个servlet类间可以交换信息。
-
ServletContext servletContext = this.getServletContext(); servletContext.setAttribute("name","hahaha");
原文地址:https://www.cnblogs.com/take-it-easy/p/12639122.html
时间: 2024-10-25 09:32:43