Servlet服务器端编程之再体验

1、什么是Servlet?
    * 服务器端Java程序,servlet需要交给服务器来运行。
    * 与javax.servlet.Servlet接口有关的java程序
    * sun公司提供一套servlet接口(API)具体实现的是靠web服务器(比如Tomcat、webLogic、JBoss等)
    
2、如果使用servlet?【必须】
    * 创建web项目
    * 创建一个类,并实现Servlet接口
    * 交给服务器运行 /WEB-INF/web.xml
        <!-- 注册servlet
            <servlet>标签:进行servlet注册
                <servlet-class>标签:确定servlet类所在位置
                    * 内容:需要注册的servlet类的完整路径名
                <servlet-name>标签:为servlet起一个别名,提供给其他程序使用
                    * 内容:自定义
                        * 要求,必须唯一
         -->
        <servlet>
            <servlet-name>MyFristServlet</servlet-name>
            <servlet-class>com.cjq.servlet.runprocess.MyFristServlet</servlet-class>
        </servlet>
        <!--
            servlet的映射
            <servlet-mapping>标签:映射已有的servlet
                <servlet-name>标签:确定使用的已有的servlet的名称
                    * 内容:来自之前配置的<servlet><servlet-name>的内容
                <url-pattern>标签:确定浏览器访问的路径
                    * 内容:自定义
                        * 要求 : 必须"/"开头,名称唯一
         -->
        <servlet-mapping>
            <servlet-name>MyFristServlet</servlet-name>
            <url-pattern>/MyFristServlet</url-pattern>
        </servlet-mapping>
    * 测试:http://localhost/day02/MyFristServlet(端口为80)

3、为什么这样使用?
    *  javax.servlet.Servlet的生命周期:
        * init(ServletConfig)
            * servlet的初始化方法,执行次数:1次
            * javax.servlet.ServletConfig对当前servlet的配置信息的描述
                * getServletName():返回当前servlet的名称:<servlet><servlet-name>配置
                * getInitParameter("paramName"):返回指定初始化参数名称的值
                    *     <servlet>
                            <servlet-name>ReadConfigServlet</servlet-name>
                            <servlet-class>com.cjq.servlet.readConfig.ReadConfigServle</servlet-class>
                            <!-- 配置初始化参数列表 -->
                            <init-param>
                                <!-- 初始化参数的名称 -->
                                <param-name>name</param-name>
                                <!-- 初始化参数的值 -->
                                <param-value>曹健强</param-value>
                            </init-param>
                        </servlet>
                * getInitParameterNames():返回当前servlet的所有的初始化参数的名称
                    * 返回值:java.util.Enumeration  --> hasMoreElements(),nextElement()
                * getServletContext():ServletConfig保存了当前web项目的 ServletContext的引用[暂记]
        * service(ServletRequest,ServletResponse)【**】
            * 当前servlet请求与响应时调用的方法
                * ServletRequest:存放所有用户的请求信息
                * ServletResponse:存放服务器响应给用户的所有的信息
            * 总结
                * request
                    * 接口:javax.servlet.ServletRequest
                    * 实现类:org.apache.catalina.connector.RequestFacade(针对Tomcat)
                    * 关系:
                        * public class RequestFacade implements HttpServletRequest {
                        * public interface HttpServletRequest extends ServletRequest {
                    * 总结: RequestFacade --> HttpServletRequest  --> ServletRequest
                    * 结果:javax.servlet.http.HttpServletRequest request = (HttpServletRequest) req;
                * response
                    * 接口:javax.servlet.ServletResponse
                    * 实现类:org.apache.catalina.connector.ResponseFacade
                    * 关系:
                        * public class ResponseFacade implements HttpServletResponse {
                        * public interface HttpServletResponse extends ServletResponse {
                    * 总结: ResponseFacade --> HttpServletResponse  --> ServletResponse
                    * 结果:javax.servlet.http.HttpServletResponse response = (HttpServletResponse) resp;
        * destroy()
            * 当前servlet的销毁方法,回收资源
            
    * javax.servlet.GenericServlet类【看】  this,super
        * 通用servlet实现类,与协议无关
        * 此类是抽象类,具有抽象方法service(ServletRequest,ServletResponse)
            * public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
        * 此类实现Servlet接口,此类也实现了ServletConfig接口
            * public abstract class GenericServlet implements Servlet, ServletConfig
        * 此类缓存了init方法的实际参数的值。(ServletConfig的实例对象给缓存了)
            * public void init(ServletConfig config) throws ServletException {
                this.config = config;
                this.init();
              }
        * 此类中在一个没有参数init方法,所有的servlet初始化工作,建议覆盖此方法。
            * 否则,覆盖带有参数的init方法,需要在方法的第一行添加super.init(config);
            * public void init(ServletConfig config) throws ServletException {
                super.init(config); //此行代码必须存在
                //之后是自己的内容
             }
    * javax.servlet.http.HttpServlet类
        * 此类是抽象类,但是不存在抽象方法。
            * 抽象类的原因,需要子类进行HttpServlet类方法的覆盖
            * 没有抽象方法的原因:当子类覆盖父类的相应的方式时,没有强制要求
        * 此类是与协议(http)有关的servlet的实现类
            * request = (HttpServletRequest) req;
              response = (HttpServletResponse) res;
        * request.getMethod()方法,返回当前servlet的请求方法,方便与处理不同的请求
        
    * 总结:【**】
        * 创建一个类,继承HttpServlet类
            * 根据需求,覆盖doPost和doGet方法
        * 需要再web.xml中进行配置
        * 测试
        * 注意:
            * 如果需要初始化工作:覆盖init()方法
            * 如果初始化工作需要耗费大量时间,需要设置servlet的在服务器启动时进行初始化工作。
                * <servlet><load-on-startup>2</load-on-startup>
                * 配置当前servlet在服务器启动时加载顺序,取值:0-6 ,值越小,优先加载

4、servlet的虚拟路径
    1、只能使用 / 或 * 开头
    2、/ 和 *. 不能同时存在
    3、/ 或 /* 表示任意
    4、只有*.才表示通配符

时间: 2024-10-13 10:07:26

Servlet服务器端编程之再体验的相关文章

servlet及编程规范

servlet规范 一 servlet简介 servlet是运行在服务器中的动态资源,能接收用户的请求,发出响应. 二 servlet的执行过程 1.在地址栏输入访问的路径 2.tomcat解析路径找到要访问的APP文件夹,找到web.xml文件 3.根据访问的url查找文件映射 找到配置的sevlet名称 4.根据sevelet名称找到对应的类名 5.运用反射机制 实例化servlet类 6.创建request 和 response 对象 7.调用service方法 三 servlet的生命周

基于servlet网络编程

1.我们知道了基于http协议的网络编程模型和基于套接字的网路编程模型(相对于我的博客上写的),那么我们将使用更加便捷的servlet网络编程. 基于http协议的网络编程,我的博客上面需要我们自己写客户端,基于套接字的网络编程我的博客上面需要我们自己写客户端和服务器端,现在我们用servlet编程,不需要我们写客户端和服务器端,我们只需要在tomcat容器里写我们的处理程序就行,响应请求由tomcat来完成. 2.如何在tomcat上部署项目.打开tomcat文件,找到webapp文件里面的例

服务器端编程心得(三)—— 一个服务器程序的架构介绍

本文将介绍我曾经做过的一个项目的服务器架构和服务器编程的一些重要细节. 一.程序运行环境 操作系统:centos 7.0 编译器:gcc/g++ 4.8.3     cmake 2.8.11 mysql数据库:5.5.47 项目代码管理工具:VS2013 二.程序结构 该程序总共有17个线程,其中分为9个数据库工作线程D和一个日志线程L,6个普通工作线程W,一个主线程M.(以下会用这些字母来代指这些线程) (一).数据库工作线程的用途 9个数据库工作线程在线程启动之初,与mysql建立连接,也就

服务器端编程

我们的整个讨论都忽略了服务器端编程的问题.如果向服务器发出一个请求,会发生什么事情?大多数时候 的请求都是很简单的一个"把这个文件发给我".浏览器随后会按适当的形式解释这个文件:作为HTML 页. 一幅图.一个Java 程序片.一个脚本程序等等.向服务器发出的较复杂的请求通常涉及到对一个数据库进行 操作(事务处理).其中最常见的就是发出一个数据库检索命令,得到结果后,服务器会把它格式化成HTML 页,并作为结果传回来(当然,假如客户通过 Java 或者某种脚本语言具有了更高的智能,那么

Ubuntu再体验之【浏览器】--Chromium安装拓展程序、安装插件(360极速浏览器插件)

上次谈到了安装Chromium的Flash插件http://blog.csdn.net/rovast/article/details/38476129,有兴趣的同学可以再去看看 这次我们来看看如何安装Chrome插件(或者是360Chrome插件) [转载请注明出处:blog.csdn.net/rovast] 1.为什么要安装插件 在重新折腾上了Ubuntu Kylin 14.04后发现,谷歌被大陆屏蔽了,也就是通过在线安装插件的套路不可用了.但是在使用Windows操作系统的朋友注意到,国产的

第66讲:Scala并发编程实战初体验及其在Spark源码中的应用解析

王家林亲授<DT大数据梦工厂>大数据实战视频“Scala深入浅出实战经典”视频.音频和PPT下载!第66讲:Scala并发编程实战初体验及其在Spark源码中的应用解析百度云:http://pan.baidu.com/s/1pJ5jzHx腾讯微云:http://url.cn/aSawrm360云盘:http://yunpan.cn/cctL3QYACaVNa  访问密码 c0fb 信息来源于 DT大数据梦工厂微信公众账号:DT_Spark

《Linux多线程服务器端编程》读书笔记第3章

<Linux多线程服务器端编程>第3章主要讲的是多线程服务器的适用场合与常用的编程模型. 1.进程和线程 一个进程是"内存中正在运行的程序“.每个进程都有自己独立的地址空间(address space).将"进程"比喻为"人",每个人都有自己的记忆(memory),人与人通过谈话(消息传递)来交流,谈话既可以是面谈(同一台服务器),也可以在电话里谈(不同的服务器,有网络通信).面谈和电话谈的区别在于,面谈可以立即知道对方是否死了(crash,S

(编程训练)再回首,数据结构——二叉树的前序、中序、后序遍历(非递归)

最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会. 希望这些能提供给初学者一些参考. 在VC++6.0下可运行,当初还写了不少注释. 可以和(编程训练)再回首,数据结构--二叉树的前序.中序.后序遍历(递归)对比着看 [问题描述] 根据顺序存储结构建立二叉树的二叉链表,并对二叉树进行先序.中序.后序遍历. [基本要求] ·功能:根据顺序存储结构建立二叉树的二叉链表,并进行先序.中序.后序遍历. ·输入:输入二叉树的顺序存储. ·输出:二叉树的先序.中序.后序遍历序

服务器端编程示例

int fd_set_nonblock(int fd) { int rv; rv = fcntl(fd, F_GETFL, 0); if(rv < 0){ printf("fcntl error\n"); return -1; } rv = fcntl(fd, F_SETFL, rv | O_NONBLOCK); if(rv < 0){ printf("fcntl error\n"); return -1; } return 0; } int init_