JavaWeb之初识Tomcat
Tomcat
轻量级应用服务器、JSP、Servlet
Tomcat目录结构
在IDEA中创建web项目
在这里不使用maven构建项目,这种方式后面会更新
- 新建一个java项目
- File -> Project Settings -> Facets -> + -> Web -> OK ( 此时src目录下有一个web目录 )
- Edit -> Configurations… -> Add New Configuration -> + -> Tomcat Server -> Local -> 配置
- 将 tomcat 的 lib 包下的 servlet-api.jar 包添加到项目中
web目录结构
第一个请求案例
Servlet生命周期
三个步骤即:初始化------>处理请求------>销毁
创建Servlet对象后---------->初始化(调用 init () 方法)------>处理/响应客户端的请求(调用 service() 方法)------->销毁(调用 destroy() 方法,最后由 JVM 的垃圾回收器进行垃圾回收
Servlet底层原理
Servlet的线程安全问题
Servlet容器采用多线程模型来处理请求。
每个请求都由一个独立的线程处理,这意味着多个请求可以同时执行。
当一个请求到达Servlet时,Servlet容器会创建一个新的线程来处理该请求,并且该线程仅在请求处理完毕后才会被销毁。
这意味着对于同一个Servlet,不同的请求可以在不同的线程上执行,每个线程都有自己的执行路径和数据副本。
解决方法:
- 避免使用共享变量(成员变量)
- 使用局部变量
- 使用同步代码块
- 避免使用静态变量和类变量
- 使用ThreadLocal,可以在每个线程中存储和访问私有变量
Tomcat页面跳转
页面跳转页面\Servlet
页面之间、页面跳转Servlet 的跳转可以通过三种方式实现
-
超链接
跳转到page01
-
window.localtion
跳转到page01 function fun01(){ windoe.location.href = "/page01" } -
表单
...Servlet跳转Servlet\页面
Servlet可以通过转发和重定向两种方式实现
-
转发
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8"); req.getRequestDispatcher("servlet3").forward(req, resp); //req.getRequestDispatcher("page01.html").forward(req, resp); } -
重定向
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8"); resp.sendRedirect("servlet5"); //resp.sendRedirect("page01.html"); }重定向与转发
重定向与转发是Tomcat实现跳转的两种方式,但是两者之间有区别
- 区别一:转发只请求一次,重定向请求两次
- 区别二:转发是服务器内部的页面跳转,重定向是《告诉客户端应该从哪里请求,客户端再次向服务器请求》,所以服务器内不存在的资源转发不能响应
- 区别三:转发可以让客户端访问受保护的资源(比如WEB-INF文件夹下的资源),重定向不可以
- 区别四:转发可以转发服务器中中文名的资源(比如 “ 页面.html”),而重定向不可以
编码问题
Tomcat的Servlet中的doget(req, resp) 和 doPost(req, resp)方法的req、resp都需要设置编码格式
req.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8");
-
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!








