Servlet简介
2017-04-06 12:22
204 查看
什么是servlet
Servlet是JavaWeb的三大组件之一(Servlet、Filter、Listener),它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:接收请求数据 处理请求 完成响应。实现servlet的方式
实现javax.servlet.Servlet接口;
继承javax.servlet.GenericServlet类;
继承javax.servlet.http.HttpServlet类;
servlet接口里的方法
public void init(ServletConfig config) throws ServletException
public ServletConfig getServletConfig();
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException;
public String getServletInfo();
public void destroy();
}
生命周期方法:
void init(ServletConfig):创建之后(1次);
void service(ServletRequest request, ServletResponse response):每次处理请求时都会被调用;(多次)
void destroy():消亡之前(1次);
特性:
单例,一个类只有一个对象;当然可能存在多个Servlet类!
线程是不并行的,所以它的效率是高的!
Servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用相应的方法。
非生命周期方法:
ServletConfig
ServletConfig是Servlet中的init()方法的参数类型,服务器会在调用init()方法时传递ServletConfig对象给init()方法。
ServletConfig对象封装了Servlet在web.xml中的配置信息,它对应元素。ServletConfig类的功能有:
String getServletName():获取Servlet配置名,即的值;
ServletContext getServletContext():获取ServletContext对象
String getInitParameter(String name):获取初始化参数
Enumeration getInitParameterNames():获取所有初始化参数的名称
<servlet>的子标签有:
<servlet-name>
<servlet-class>
<init-param>
<load-on-startup>
对Servlet的理解
HttpServlet理解HttpServlet是GenericServlet的子类,实现了GenericServlet中的抽象方法
service(ServletRequest, ServletResponse)会调用本类的service(HttpServletRequest,HttpServletResponse)
service(HttpServletRequest,HttpServletResponse)方法会根请求方式来调用相对的处理方法,例如请求方式为GET,那么该方法会调用doGet()方法,请求方式是POST,那么会调用doPost()方法。所以我们应该去重写HttpServlet的doGet()或doPost()方法。
ServletContext理解
一个Web应用只有一个ServletContext对象,它会在服务器启动时创建,会在服务器关闭时被销毁,它的生命与服务器相同。
通常在整个Web应用中共享数据时可以使用ServletContext对象
还可以使用ServletContext来获取Web资源的真实路径,servletContext.getRealPath(“/WEB-INF/a.jpg”);
ServletContext可以用来资源的MIME类型,例如:servletContext.getMimeType(“a.jpg”),它会返回image/jpeg
请求转发和重定向的异同
请求转发是通过RequestDispatcher对象的forward()方法完成的
重定向是通过HttpServletResponse对象的sendRediect()方法完成的
请求转发是在一个请求中跨越多个动态资源(jsp/servlet),所以多个动态资源之间可以共享request数据
重定向是两次请求,第一次请求服务器响应给客户端的是302,以及Location响应头,通知客户端再次去请求新的资源,所以客户端又发出第二次请求。所以重定向中被请求的多个动态资源之间不能共享request数据。
请求转发后,地址栏的url不会改变,因为是一个请求;
重定向后,地址的rul会改变,因为是两个请求
Servlet细节
1 Servlet与线程安全因为一个类型的Servlet只有一个实例对象,那么就有可能会现时出一个Servlet同时处理多个请求,所以Servlet不是线程安全的,但是作效率很高!所以我们不应该在Servlet中便宜创建成员变量,因为可能会存在一个线程对这个成员变量进行写操作,另一个线程对这个成员变量进行读操作。
如果要创建变量,必须遵循以下规则:
不要在Servlet中创建成员!创建局部变量即可!
可以创建无状态成员!
可以创建有状态的成员,但状态必须为只读的!
javaWeb四大域
PageContext;
ServletRequest;
HttpSession;
ServletContext
获取资源相关方法
获取a.txt的真实路径:String realPath = servletContext.getRealPath(“/a.txt”),realPath的值为a.txt文件的绝对路径:F:\tomcat6\webapps\hello\a.txt;
获取资源流
不只可以获取资源的路径,还可以通过ServletContext获取资源流,即把资源以输入流的方式获取:
获取a.txt资源流:InputStream in = servletContext.getResourceAsStream(“/a.txt”);
获取b.txt资源流:InputStream in = servletContext.getResourceAsStream(“/WEB-INF/b.txt”);
获取指定路径下的所有路径文件
Set set = context.getResourcePaths(“/WEB-INF”);(开头必须以 / 开头)
可以通过Class类的对象来获取类路径下的资源,对应JavaWeb应用的类路径就是classes目录下的资源
例如:
InputStream in = projectname.MyServlet.class.getResourceAsStream(“a.jpg”);
获取的是:/WEB-INF/classes/servlet/a.jpg,即与MyServlet.class同目录下的资源
例如:
InputStream in = projectnaem.servlet.MyServlet.class.getResourceAsStream(“/a.jpg”);
获取的是:/WEB-INF/classes/a.jpg,即类路径的根目录下的资源,类路径的根目录就是/classes目录
相关文章推荐
- Servlet系列(一)----Servlet简介
- Servlet简介与配置
- Servlet简介
- HttpServletResponse简介
- JavaWeb_Servlet_简介
- Servlet 简介
- HttpServletRequest简介
- Servlet的学习(零)-简介以及简单实例
- 关于Servlet的简介
- Servlet 1 简介
- Servlet第三篇【request和response简介、response的常见应用】
- Servlet规范简介
- 一、Servlet简介
- Servlet简介
- Servlet规范简介
- servlet简介_动力节点Java学院整理
- servlet简介
- Servlet生命周期简介
- Servlet第三篇【request和response简介、response的常见应用】
- [Servlet]Servlet、ServletConfig、ServletContext、GenericServlet、初始参数简介