servlet学习
来源:互联网 发布:网络趣事排行 编辑:程序博客网 时间:2024/05/29 15:07
1)Servlet是SUN公司基于Java技术的一个开发动态资源支持的规范,以接口的形式出现,最终的实现类与服务器有关
2)Servlet是一种特殊的Java类,运行时服务端/容器中,接收每一个客户端的请求并响应,尊循HTTP协议
3)Servlet手工开发过程,参见<<手工创建Servlet的全过程.txt>>
1)类 实现 Servlet接口 + 在web.xml中配置
<servlet>
<servlet-name>Demo11[servlet名字,可以任意]</servlet-name>
<servlet-class>cn.itcast.web.servlet.Demo11[servlet全路径]</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Demo11[servlet名字,必须和上述一致]</servlet-name>
<url-pattern>/qq[以/开头,提供外界用户访问的路径]</url-pattern>
</servlet-mapping>
2) 类 扩展 GenericServlet + 在web.xml中配置
如果需要输出中文,需要在Servlet中如下设置:
//服务端通知浏览器以指定的编码方式来显示中文
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("欢迎学习JavaServlet程序");
3) 类 扩展 HttpServlet + 在web.xml中配置
HttpServlet已经覆写service()方法,程序员无需再次覆写,只需覆写doXxxx()方法
servlet运行过程;
5 Servlet工作原理和生命周期
1)当浏览器第一次访问Servlet时,服务器会根据浏览器访问的路径,例如/Demo2,在web.xml文件中找到该Servlet的全路径,
进行反射。
2)调用init()为Servlet作初始化工作
3)调用doXxxxx()为浏览器响应
4)如果浏览器再次访问相同的Servlet,直实现从服务端维护的Servlet实例集合中取得对应的实现,为浏览器响应
5)同一个Servlet实例,在服务端只有一个
6)服务器在决定销毁Servlet实例之前,调用destory()方法,每个Servlet实例只会调用一次,在重新部署情况下 (会调用destroy方法)
Servlet运行过程:
5 Servlet工作原理和生命周期
1)当浏览器第一次访问Servlet时,服务器会根据浏览器访问的路径,例如/Demo2,在web.xml文件中找到该Servlet的全路径,
进行反射。
通过浏览器地址http://localhost:8080/day1/Demo2
根据/Demo2,查找web.xml文件,查到1,得到2,走到3,得到4,得到类的全路径名,再根据Java的反射机制,就可以创建servlet对象,也就是Demo2的实例(在服务端只有一个实例),Demo2继承了HttpServlet。
<servlet-mapping>
2、 <servlet-name>Demo2</servlet-name>
1、<url-pattern>/Demo2</url-pattern>
</servlet-mapping>
<servlet>
3、<servlet-name>Demo2</servlet-name>
4、 <servlet-class>cn.itcast.web.Demo2</servlet-class>
</servlet>
2)调用init()为Servlet作初始化工作
3)调用doXxxxx()为浏览器响应
4)如果浏览器再次访问相同的Servlet,直实现从服务端维护的Servlet实例集合中取得对应的实现,为浏览器响应
5)同一个Servlet实例,在服务端只有一个
6)服务器在决定销毁Servlet实例之前,调用destory()方法,每个Servlet实例只会调用一次,在重新部署情况下
Servlet细节
1)浏览器访问的url-pattern只是一个符合格式的任意字符串,以/开头
2)一个Servlet的url-pattern可以是1个或多个,有二种形式;
a)*.xx
b)/xx/*
注意:/*不能一起直接使用
3)/*和*.do的映射关系,*.do最后
4)程序员编写的Servlet其实是由tomcat容器中的Servlet引擎来处理的,引擎会产生对应的HttpServletRequest和HttpServletResponse对应传入到Servlet的doXxxx()方法中
5)通过在web.xml文件中配置代码,让Servlet在部署时就创建
<servlet>
<servlet-name>Demo21</servlet-name>
<servlet-class>cn.itcast.web.servlet.Demo21</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
数字小的先加载,数据大的后加载,最小为0,如果为负数和没有设置一样,需要在浏览器第一次访问时创建
6)url-pattern为/的servlet是一个缺省的servlet,用于处理当前web应用下,访问路径错误的请求
任何web服务端都有一个缺省的servlet来处理
servlet线程安全问题:
7)每个线程会共享同一个Servlet的实例变量,所以要对敏感数据加锁
产生线程安全条件如下:
a)单例
&&
b)实例变量
&&
c)实例变量进行修改操作
通过加锁的方式,对敏感数据块进行代码同步(正道)
如果你实现SingleThreadModel来解决线程安全有二个不足之处:
a)SingleThreadModel接口的值与web服务器最多接收的线程数有关,可能会出现大值变小值的情况
b)SingleThreadModel接口如果发现某个线程正在占用该Servlet实例,会自动创建一个新的Servlet实例为浏览器服务,
这就违背了Servlet单例的原则
7 ServletConfig对象
1)想让当前Servlet读取一些在web.xml文件配置的初始化参数,可以使用ServletConfig对象,它是Servlet运行时的配置对象
2)init(ServletConfig)方法由Web容器调用,调用时,会传入与容器相关的ServletConfig接口的实现
- servlet学习
- Servlet学习
- Servlet学习
- Servlet学习
- Servlet学习
- servlet学习
- Servlet学习
- servlet 学习
- servlet学习
- Servlet学习
- 学习servlet
- Servlet学习
- servlet学习
- Servlet学习
- Servlet学习
- Servlet学习
- Servlet学习
- Servlet学习
- 下载出错Error:Flash Download Failed-"Cortex-M3"
- mysql之MyISAM和InnoDB
- 在Xshell上使用XFTP上传文件到Linux服务器
- tail -f 、tailf 和 tail -F 的区别
- Ecshop在模板中$smarty session cookie等调用$smarty.session $smarty.cookie
- servlet学习
- 浅谈crash
- android 虚拟摇杆绘制
- 用MVP架构开发Android应用
- Oracle一个中文汉字占用几个字节
- Android studio 打包生成的apk文件 位置 项目中就可以复制出来
- CM NTP问题
- android 自定义progressDialog
- LightOJ1370_Bi-shoe and Phi-shoe_伪欧拉函数,真素数筛