servlet简单介绍
2016-08-03 20:56
344 查看
前几天在看一本关于servlet的书,在此想进行一部分的归纳,总结。由于资历尚浅的很,所以有理解偏差,错误的地方,希望大家能指出。 在我的理解中,servlet是一个运行在Web服务器上,一个可以处理请求和响应的Java类。 Web应用是通过请求驱动的,也就是要由客户先发起请求,客户的请求通过http协议进行传输。而我们常用的Tomcat相当于Web服务器,它也被当做Web容器来管理着Servlet的生命周期。当启动一个程序时 1.Web容器先加载Servlet类编译成.class的字节码文件 2.通过构造函数初始化Servlet,一般不覆盖Servlet的无参构造函数。因为可以在init()中进行需要的操作 3.Servlet一生只调用一次init()方法。可以在里面写上自己需要的操作。 4.当有请求到达时,Web容器找到请求的Servlet,HttpService会调用service()方法向servlet传入HttpServletRequest(请求对象),HttpServletResponse(响应对象),执行覆盖后的doGer()或doPost()方法。Servlet通过请求对象可以获取一些请求的数据,再通过响应对象将响应通过容器传回。 5.最后,容器调用destroy()来回收Servlet。
容器建立一个Servlet时会读DD,并为ServletConfig创建键值对.其过程如图:
所以最早只有在init()方法中才能调用ServletConfig中的键值对。
每个Servlet可以有一个ServletConfig(在DD中相应的Servlet中配置)
但每个Web应用只有一个ServletContext(上下文,在DD中).
下面就介绍ServletConfig和ServletContext的配置与使用:
DD中:
public class myServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("Hello myServlet"); } } Web容器是如何找到用户URL请求的Servlet.也就是容器怎样把Servlet映射到URL?通过web.xml部署描述文件(DD).
<servlet> <servlet-name>Hello</servlet-name> <servlet-class>myServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>此中 Hello是我们自定义的区分Servlet的名称,myServlet是原有的类名,准确的讲是该文件所在路径./hello是匹配的URL
容器建立一个Servlet时会读DD,并为ServletConfig创建键值对.其过程如图:
所以最早只有在init()方法中才能调用ServletConfig中的键值对。
每个Servlet可以有一个ServletConfig(在DD中相应的Servlet中配置)
但每个Web应用只有一个ServletContext(上下文,在DD中).
下面就介绍ServletConfig和ServletContext的配置与使用:
DD中:
<servlet> <servlet-name>Hello</servlet-name> <servlet-class>myServlet</servlet-class> <init-param> <param-name>name</param-name> <param-value>config-Lyle</param-value> </init-param> </servlet> <context-param> <param-name>name</param-name> <param-value>context-Lyle</param-value> </context-param>Servlet中:
out.println("ServletConfig Name ="+ getServletConfig().getInitParameter("name")); out.println("ServletConfig Name ="+ getServletContext().getInitParameter("name")); 1.通过获取Config()对象与Context()对象的不同可以避免了参数重名问题 2.DD文件只在服务器启动时读一次,之后不再读取。所以修改时需要重启服务器. 3.在一个Web应用中部署的各个Servlet和JSP都能访问同一个ServletContext,而ServletConfig只有其相应的Servlet能访问 补充一点,现在较多的目录结构是 Controller,Service,Dao.视图的显示再另用JSP,这些都可以直接写在一个Servlet中,首先,JSP是为了视图分离,业务清晰,编码方便 Service被提出来是考虑到业务逻辑的不同,使得功能纯粹.而Dao是用于访问数据库,对数据库的不同操作是可以被单独提出来,可以被不同业务逻辑复用
相关文章推荐
- HDU 1233 还是畅通工程(模板)
- 网络编程(一):网络基础之一
- HDU-1233 还是畅通工程
- Linux中vi设置行号,设置tab一键4格
- 为已经存在的用设置表空间
- 【郑轻】[1900]985的“树”难题
- 交叉验证(Cross Validation)
- HDU 2504 又见GCD
- 需要熟记的linux常用命令
- 设计模式一些概念(二)
- 【杭电1863】畅通工程
- cf158B(水题)
- GoCD notes
- HDU 1536 S-Nim
- Android TabLayout导航条属性的设置
- 第七天ListView与BaseAdapter适配器混合运用
- 最小生成树-Prim算法和Kruskal算法
- poj 2485 Highways ( prim )
- Android 6.0新特性之Runtime Permission
- Mac scrapy环境搭建