Servlet/JSP(三)
来源:互联网 发布:ubuntu 16.10 安装后 编辑:程序博客网 时间:2024/06/10 01:45
本篇主要介绍 Servlet 之间的跳转 Forward Redicect,以及Servlet线程安全
Servlet 之间可以互相跳转,从一个Servlet 调到另一个Servlet,利用这一功能,我们可以把任务进行模块划分,比如一个Servlet接收用户数据,另一个Servlet 读取数据库,另一个Servlet 把处理结果显示出来,Servlet的跳转可以实现程序模块化
比如MVC 架构中都使用Servlet的跳转,MVC 把程序分为 model view control ,Mode 负责业务处理,View 负责数据显示,Control 负责控制,在Struts 框架中 这三部分分别使用三个Servlet,程序在这三个Servlet之间跳转
转向 Forard
是通过 RequestDispatcher 对象的 forward 方法来实现的,RequestDispatcher 可以通过 HttpServletRequest 的getRequestDispatcher() 方法取得,比如
ReauestDispatcher dispatcher = request.getRequestDispather("/servlet/fowsardServlet")dispatcher.forward(request,response);
getRequestDispatcher() 方法的参数必须 以 / 开头,表示Web 应用程序的根目录
Foward 是MVC 框架中常用的一种技术,不仅可以跳转到本应用的一个 Servlet /JSP页面,也可以跳转到另一个文件,甚至 WEB-INF 文件夹下的文件,在Servlet/JSP 中是很常见的,框架中常使用 一个 Servlet 来集中处理请求然后跳转到响应的 Servlet,或者在Servlet 中处理业务逻辑,然后跳转到 JSP 页面中显示处理结果,当使用 forward 形式跳转Servlet 时,地址栏会显示跳转前的Servlet访问地址,因为该跳转是在服务器上实现的,客户端并不知道该动作,跳转是对客户端透明的
foward 是最常用的方式,在 Struts 等MVC 框架中,都是利用Servlet 来处理 用户请求,把结果通过request.setAttribute() 放到 request 中,然后 forward 到 JSP 显示,当 forward 动作不能有任何输出到客户端时,会抛出异常,所以我们尽量不要在 forward 之前使用 out.println 语句向客户端输出结果
重定向 redirect
重定向 是利用服务器返回的状态码来实现的,客户端浏览请求服务器的时候,服务器会返回一个状态码,通过 HttpServletResponse 的 setStatus 方法设置状态码,如果服务器返回的是 301 或是 302 浏览器会到新的网址重新请求该资源,常见状态码
HttpServletResponse 把常用的状态码封装成 了静态的变量,我们要实现重定向 需要调用 setRedirection 就能实现重定向
自动刷新
自动刷新不仅可以实现一段时间之后自动跳转到另一个界面,还可以实现一段时间之后重新刷新本页面,Servlet 中通过 HttpServletResponse 对象设置 Header 属性实现自动刷新效果
response.setHeader("Refresh","1000;URL=http://loaclhost:8080/FirstServlet/index.html");
1000为毫秒,URL 为 跳转到指定页面路径,自动刷新与重定向的原理类似,如果把时间设置为 0 ,那么效果就是 重定向
线程安全
线程安全是指在多线程并发执行时出现的问题,如果会出现问题,就是线程不安全,反之
由于Servlet 只会有一个实例,多个用户同时请求同一个Servlet 时候,服务器会产生多条线程来执行Servlet 的代码,因此Servlet 有线程不安全的隐患,如果设计不合理,就会出现问题,多线程并发读写数据可能会导致数据不同步的问题,解决的并发是尽量不要使用 全局变量,要把全局变量 定义为 局部变量,虽然我们使用同步锁也可以解决,但是会造成线程等待,不是很科学的做法
多线程的并发读写Servlet类属性会导致数据不同步,但是如果只是并发读取属性而不是写入,那么就不会存在数据不同步的问题,因此,Servlet 里面的自读属性最好定义为 final 类型
- Servlet/JSP(三)
- JSP/Servlet 学习笔记(三)
- Jsp之三 servlet基础
- Jsp、Servlet、JavaBean三者的关系
- Servlet&JSP的那些事儿(三)
- jsp+servlet学习(三)监听器实例
- head first servlet and jsp(三)
- Head First Servlet And Jsp 三
- Servlet&JSP (三)上传和下载
- Java Servlet和JSP教程:三、第一个Servlet
- JSP编译成Servlet(三)JSP编译后的Servlet
- JSP、Servlet、JavaBean三者之间的关系实例
- 关于servlet和jsp的学习总结三(详细)
- Jsp/Servlet 读书笔记(三) -- ServletConfig和ServletContext
- 【ZT】Jsp/Servlet:实现文件上传与下载【三】
- 编程经验:三大基础技能JSP/JavaBean/Servlet
- 基于JSP+SERVLET的新闻发布系统(三)
- JSP(1):servlet 三种基本实现方式
- Python Print函数学习
- 大话数据结构读书笔记(三)-线性表
- 桶排序
- 通用DBHelper
- 构建乘积数组
- Servlet/JSP(三)
- 投资
- C#:DataSet和DataTable区别和用法
- Linux网络子系统内核分析
- Shell用declare转换字符串大小写
- 队,栈,UML9种试图
- 文件压缩上传
- 由浅入深写java分布式(3) dubbo admin监控dubbo 以及外网consumer找不到provider的问题
- Py2exe