javaweb 基础(1)—— servlet
来源:互联网 发布:帝国竞争算法程序 编辑:程序博客网 时间:2024/06/08 17:18
尊重个人劳动成果,转载请注明出处:
http://blog.csdn.net/czd3355/article/details/70306352
1. 定义
servlet 是运行在服务器端的,按照一定规范编写的 java 应用程序。
用下表解释定义:
2. 作用
用来接收,处理客户端请求,并把处理结果返回到客户端显示。
(更详细点说明是:把处理结果返回给服务器,由服务器将响应结果传给客户端)
3. 生命周期
Servlet 的生命周期指的是 Servlet 从被 Web 服务器加载到它被销毁的整个生命过程。
- Servlet 容器通过调用 init () 方法进行初始化。
- Servlet 容器调用 service() 方法来处理客户端的请求。
- Servlet 容器通过调用 destroy() 方法终止(结束)。
- 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
细致说明:
- 无论请求多少次 servlet,最多只有一个 servlet 实例。说明 servlet 是单例的。
- 当有多个客户端并发请求 servlet 时,服务器会启动多个线程去分别执行该 servlet 的 service() 方法
- init() 和 destroy() 方法都只会执行一次,service() 方法可以执行多次。
4. 常用方法
request.getParameter(String name) :获取表单中任意一个name的值。
request.getParameterValues(String name):取得所有名为该name的参数值,常用于复选框
request.getParameterNames():得到当前请求中的所有参数名称
看定义解释有点抽象的话,那就来看例子吧
1. 三个名字相同的text标签<input type="text" name="test" value="1" /> <input type="text" name="test" value="2" /> <input type="text" name="test" value="3" />request.getParameterValues("test") ----------------- [1, 2, 3]request.getParameter("test") ------------------ 12. checkbox <input type="checkbox" name="habit" value="read">看书 <input type="checkbox" name="habit" value="movie">电影 <input type="checkbox" name="habit" value="game">游戏String[] str = request.getParameterValues("habit")for(String s:str){ resp.getWriter().println(s);}
5. 跳转
5.1 请求转发(forward)
作用:可以跳转到本应用的任何 jsp,servlet 文件,包括 WEB-INF 下的文件。代码如下:
req.getRequestDispatcher("/com/czd/servlet/servlet02") .forward(req,resp);
注意:getRequestDispatcher() 方法的参数必须为以 “/” 开始,“/” 表示本 web 应用程序的根目录
框架中常常使用一个 servlet 来集中处理请求,然后跳转到响应的 servlet。或者在 servlet 中处理业务逻辑,然后跳转到 jsp 页面中处理结果。
5.2 重定向(redirect)
它不能跳转到 WEB-INF 下的文件,但能够跳转到其他应用的页面,比如百度首页等
resp.sendRedirect("com/czd/servlet/servlet02");
5.3 自动刷新/自动跳转(Refresh)
自动刷新本页面
// 每隔一秒钟就自动刷新本页面resp.setIntHeader("Refresh",1);
自动跳转
// 第二个参数的 1 是秒数resp.setHeader("Refresh","1;URL=http://localhost:8080/index2.html");
说明:参数 “Refresh”,“URL” 大小写不敏感。
6. servlet是线程不安全的
因为 servlet 是单例的,当多个用户同时请求同一个 servlet 时, tomcat 就会产生多条线程去执行 servlet 的代码,所以 servlet 有线程不安全的隐患。
举个线程不安全的例子:
一个 servlet 类有一个成员变量 name,此时有两个用户同时要修改该 servlet 的name属性。
如图所示:线程 A 的输出结果是不正确的。这就是线程不安全造成的结果
那么我们解决线程不安全的方法是:
尽量不要将 name 属性定义为成员变量,而要把 name 变量分别定义到 doGet() 和 doPost() 方法内。虽然使用 synchronized (name){} 语句块也可以解决问题,但是会造成线程的等待,导致用户等待时间变长,用户体验变差。所以不提倡。
注意:如果只是并发地读取属性而不写入,则不存在数据不同步问题。因此 servlet 里的只读属性最好定义成 final 类型。
- javaweb 基础(1)—— servlet
- JavaWeb——Servlet基础
- Javaweb 02—Servlet
- JavaWeb Servlet(1)
- tomcat javaweb开发基础(8)servlet程序设计(1)
- javaWeb学习(1)——servlet生命周期
- JavaWeb基础(4)—— 浅析 Servlet 的本质与工作原理
- JavaWeb基础(5)—— 浅析 Servlet 与 JSP 两者之间的区别
- JavaWeb——Servlet学习日志1
- JavaWeb(三)------servlet基础
- JavaWeb-----1.Servlet基础
- 10.JavaWeb基础 Servlet
- JavaWeb基础----Servlet
- JavaWeb基础(servlet+jsp)
- JavaWEB基础之Servlet
- javaweb基础-servlet
- javaweb基础之--Servlet
- javaweb基础之servlet
- python学习笔记(五)文件操作、正则表达式
- SQL两级左连接
- 关于win7下RemoveDPC学习到的一点东西
- Java基础之运算符(算数运算符和赋值运算符)
- LINK : fatal error LNK1168
- javaweb 基础(1)—— servlet
- 写时复制Copy-On-Write
- JAVA多线程—传统线程机制-运行Thread.run()还是Runnable.run()
- 随机森林(Random Forest)入门与实战
- 安卓游戏开发大纲
- 2017.4.20
- CPU的结构
- matlab自带函数实现BP神经网络
- CSU