`
312758107
  • 浏览: 11244 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

JSP总结二——Servlet技术(上)

 
阅读更多
引言:

        Servlet技术是掌握WEB开发的核心点,也是进行服务器与用户需求、响应的关键。掌握Servlet其实十分简单,只要掌握其常用API即可。初期的JSP开发,都是以用Servlet处理需求和响应的,后期这一部分会换成Struts框架。

一、Servlet总论

1、servlet简介
        servlet 是在服务器上运行的小程序。这个词是在 Java applet 的环境中创造的。虽然后者已很少被使用,但 servlet 却发展的很好。
        服务器上需要一些程序,常常是根据用户输入访问数据库的程序。这些通常是使用公共网关接口(Common Gateway Interface,CGI)应用程序完成的。然而,在服务器上运行 Java,这种程序可使用 Java 编程语言实现。在通信量大的服务器上,Javaservlet 的优点在于它们的执行速度更快于 CGI 程序。各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进程,这意味着服务器端处理请求的系统开销将明显降低。

2、servlet实现过程
        Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:
        1) 客户端发送请求至服务器端;
        2) 服务器将请求信息发送至 Servlet;
        3) Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
        4) 服务器将响应返回给客户端。

        Servlet 看起来像是通常的 Java 程序。Servlet 导入特定的属于 Java Servlet API 的包。因为是对象字节码,可动态地从网络加载,可以说 Servlet 对 Server 就如同 Applet对 Client 一样,但是,由于 Servlet 运行于服务器中,它们并不需要一个图形用户界面。从这个角度讲,Servlet 也被称为 FacelessObject。
        一个 servlet 就是 Java 编程语言中的一个类,它被用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序。虽然 servlet 可以对任何类型的请求产生响应,但通常只用来扩展 Web 服务器的应用程序。

3、Servlet生命周期
        所谓的生命周期,就是:怎么来的,怎么去的,在来去之间调用了什么方法。
        (1)客户端请求该 servlet
        (2)加载 servlet 类到内存
        (3)实例化、初始化该 servlet
        (4)init() 初始化参数
        (5)service()(doGet() 或者 doPost())
        (6)destroy()

二、写一个简单Servlet
        要编写一个web资源,只需要实现两个步骤:
      
        A)编写一个java类,实现servlet接口
        B)把开发好的java类部署到web服务器中

        然而,在实际开发中,实现Servlet接口要实现其所有方法,十分麻烦
        不如直接继承HttpServlet类或GenericServlet类。

三、实际开发中创建一个servlet
        New - Serlvet:创建的Servlet实现了HttpServlet类,并且自动在web.xml文件中写入了Servlet的配置信息。
        注意:由于在对Servlet进行重命名时,配置文件不会随着更新,如果忘记改配置文件,则会使得路径映射时出错。因此在为Servlet取名时一定要慎重。
        一个Servlet

        web.xml配置文件中Servlet配置项


四、Servlet中常用API

1、Servlet接口
        常用方法:
        Init();—servlet生命周期开始时调用初始化方法
        Destroy();—servlet生命周期结束时调用的销毁方法
        Service();—处理请求的方法
        getServletConfig();—得到ServletConfig对象

2、ServletConfig接口
        服务器一旦启动,servlet就已经被加载了,一旦有请求访问,servlet就创建了实例对象,因此如果在服务器运行过程中需要改变servlet中的某些参数,就必须先关闭服务器。这就导致有些参数不适合在servlet中写死,比如charset\jdbc url...
        Servlet配置信息相关的接口,虽说是接口,但是可以创建他的实例对象。引入javax.servlet.ServletConfig,就可以创建ServletConfig的实例对象,从而得到在配置文件中配置的初始化信息。
        首先,可以通过<init-param></init-param>来配置一个初始化参数

        然后可以通过servletconfig对象得到这个配置的参数

        这样在浏览器中访问这个Servlet,就会看到输出的信息
        常用方法:
        (1)public String getInitParameter(String name);
        传入属性名,根据属性名返回属性值
        (2)public Enumeration getInitParameterNames();
        返回一个string列表对象(枚举),包含全部的初始化属性名
        (3)public ServletContext getServletContext();
        可以通过ServletConfig得到ServletContext对象

3、ServletContext接口
        servletContext实际上也是一个对象,它是代表当前web应用的对象。服务器一旦启动,就会创建ServletContext实例对象,有几个web应用,就创建几个。
        servletContext对象的常用功能如下:
        (1)实现servlet间的数据共享,制作聊天室
        (2)能实现servlet的转发
        (3)能通过配置得到初始化参数
        (4)servletContext对象其实就是context域对象,域:代表一定范围,可以存东西。
        ServletContext的常用方法

        //(1)向Context域中存、取、删对象
        public void setAttribute(String name, Object o);
        public Object getAttribute(String name);
        public void removeAttribute(String name);
        public Enumeration getAttributeNames();
        //(2)得到别的web应用的方法
        public ServletContext getContext(String uripath);
        //(3)得到某一资源的绝对路径
        public String getRealPath(String path);
        //(4)得到资源,当作URL对象来返回
        public URL getResource(String uripath);
        //(5)得到资源,当作流来返回
        public InputStream getResourceAsStream(String uripath);
        //(6)得到转发对象
        public RequestDispatcher getRequestDispatcher(String uripath);
        //(7)得到web应用的配置信息
        public String getInitParameter(String name);

例子如下:
(1)获得初始化参数:





        这种方式的好处在于可以不用每个servlet都配置初始化参数

(2)实现Servlet转发:
        什么叫转发呢?你找我借钱,我说我没有,我帮你去找他(1次请求)
        重定向呢?你找我借钱,我说我没有,你自己去找他(2次请求)

        Servlet不适合做输出,servlet处理完请求以后,要转发给jsp做显示
(3)利用ServletContext读取资源文件(.properties:数据是没有关系的)
        A)非传统方式:用得较多,但无法获得资源名称





        B)传统方式:用的不多,但是可以获得资源名称,文件下载只能用它



        C)非Servlet读取资源文件:只能通过类装载器读
        根据mvc设计思想,servlet不能操作数据库,而应该dao操作数据库,但是dao里面得不到ServletContext(不能把它通过属性传过去,否则会耦合)


        由于每个方法(增删改查)都需要读资源文件,而资源文件其实只读一次就够了,多以可以把它放在静态代码块中(注意:这种方式读文件,文件不能太大)


未完待续
  • 大小: 52.4 KB
  • 大小: 34.4 KB
  • 大小: 10 KB
  • 大小: 44.8 KB
  • 大小: 12.5 KB
  • 大小: 20.7 KB
  • 大小: 10.6 KB
  • 大小: 57.4 KB
  • 大小: 71.3 KB
  • 大小: 42.3 KB
  • 大小: 31.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics