03_java web之servlet

一、servlet入门
sun公司提供的用来开发动态web资源的技术,本质是一个java程序,能够运行在servlet容器(Tomcat)中
1.写一个类,实现servlet接口
1).编写一个FirstServlet类,实现GenericServlet接口
2).将Servlet的jar包加入Classpath
3).编译javac -d . FirstServlet
2.将写好的类注册到Tomcat中(web.xml文件中进行配置)
4).将编译后的文件保存到tomcat的WEB-INF/classes/目录下
5).配置web.xml,将java部署到服务器tomcat
<servlet>
<servlet-name>HelloServlet</servlet-name>--->Servlet名字
<servlet-class>com.itheima.HelloServlet</servlet-class>--->具体Servlet的全类名,不是文件夹
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>--->配置对应名字Servlet对外访问
<url-pattern>/servlet/HelloServlet</url-pattern>--->配置Servlet对外访问路径名
</servlet-mapping>
3.servlet的生命周期:
当Servlet第一次被访问到时,服务器会创建Servlet对象,立即调用Servlet的init方法执行初始化操作。从此这个Servlet
一直驻留在内存中,为后续的所有对此Servlet的访问服务,此后,每次对Servlet的访问都会造成Servlet中service方法执
行,当服务器关闭或web应用被移除出容器时,随着web应用的销毁Servlet也销毁,在Servlet销毁之前,服务器会调用Servlet
的destroy方法,做一些善后工作
4.servlet的继承结构:
servlet接口---定义了servlet应有的基本的方法 init、destroy、service
|
|--GenericServlet:对servlet姐都的一个默认实现类,对于一般我们不关注的方法,这个类帮我们做了默认实现,
除了service是抽象方法,需要继承者去实现,与协议无关,不具有协议相关的方法
|
|--HttpServlet:在GenericServlet的基础上,基于Http协议进行了增强,提供了许多和http协议
相关的方法,实现了GenericServlet中抽象的service方法。如果是get请求,提供doGet方法,
如果是post请求,实现doPost方法;创建servlet时,只需要覆盖相应的doGet和doPost方法即可,
一般情况下不建议覆盖service方法
5.servlet细节:
1).servletmapping标签:
1'.直接写一个固定的路径,通过这个固定的路径,访问当前Servlet
2'.使用*通配符进行配置,但只能使用下面两种固定的写法
以/开头并以/*结尾的路径
以*.xx的方式配置的路径
2).配置load-on-startup:
是Servlet随着服务器启动web应用加载后立即创建
3).配置缺省的servlet:
如果将某个Servlet的对外访问路径配置为/,则这个Servlet就是缺省Servlet,其他的Servlet都不处理的请求,由
缺省Servlet处理,浏览器在访问静态资源、错误提示页面时,都是"父web.xml"中配置的缺省Servlet进行输出,建
议不要自己配置缺省的Servlet,否则会导致静态资源、错误页面无法正确访问
4).线程安全:
由于默认情况下Servlet的对象在内存中只有一个,多个浏览器并发访问时可能会产生线程安全问题
我们可以使用锁机制解决安全问题,但容易造成程序的阻塞,效率降低
也可以使用SingleThreadModel接口,但是接口并不能解决线程安全问题,已经被废弃。建议在设计Servlet时,应该
尽量不要使用类成员变量和静态成员变量,如果一定要使用,则还是要用锁机制来访问线程安全问题,但是要注意,
尽量的早开锁,减少程序阻塞的时间
二、ServletConfig和ServletContext
1.ServletConfig代表当前Servlet在web.xml中的配置信息
1).获取Servlet在web.xml中配置的名字
2).获取web.xml中配置的Servlet的初始化信息
3).获取ServletContext对象
2.servletContext代表当前web应用,唯一对应当前web应用
1).作为域对象使用,在不同Servlet之间传递数据
作用范围:整个web应用
生命周期:当web应用被加载进容器时,创建代表整个web应用的ServletConfig对象,创建出来后驻留在内存中,
当服务器关闭或web应用被移除出容器时,ServletContext对象跟着销毁
域:一个域可以理解为一个框,这里面可以放置数据,一个域既然称作域,它就有一个可以看见的范围,这个范围内
都可以对这个域中的数据进行操作,那这样的对象就叫做域对象
2).获取web应用的初始化参数:在web.xml可以配置整个web应用的初始化参数,利用ServletContext去获得
3).实现请求转发:
请求转发:服务器内部流转
this.getServletContext().getRequestDispatcher("/...").forward(request,response);
4).读取资源文件:
1'.web应用中,读取文件时,如果使用相对路径/绝对路径,则到tomcat/bin目录下找资源;如果使用硬盘路径,可以
找到文件,但是一旦患了一个发布环境,所有的路径可能都是错的
2'.使用ServletContext.getRealPath(),会在传入的路径之前拼接当前web应用的硬盘路径,从而得到当前资源的硬盘
路径,从而读取资源
3'.通过类加载器加载资源:Classloader.getResource("").getPath();当前程序从哪个目录加载类,这个方法就从哪
个目录加载给定路径的资源



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值