Servlet总结

Servlet的生命周期

实例化—>初始化—>服务—->销毁
实例化和初始化的时间:第一次访问就执行,且执行一次。
服务:应用活着,每次访问时候都会存在。
死亡:应用卸载,服务器停止的时候。
可以在web.xml中添加一句话数字使得加载的时候便初始化和实例化,数字表示优先级。越小优先级越高。

Servlet的三种创建方式

  • 实现javax.servlet.Servlet接口
  • 继承javax,servlet.GenericServlet类(适配器模式)(只需要重写Service方法)
public class ServletDemo2 extends GenericServlet{
    public void service(ServletRequest req, ServletResponse  res) throws ServletException, IOException{
        System.out.println("servlentDemo2");
    }
}

适配器的含义:类已经实现了Servlet接口,在这个类中我们只需要使用我们需要的方法,其实的放在那里,就像是使用插座一样。
-继承HttpServlet(模板设计模式)

如何开发一个Servlet

1.1步骤
    1)编写Java类继承HttpServlet类
    2)重写doGet方法和doPost()方法
    3)Servlet程序交给tomcat服务器运行
        3.1servlet程序的class文件拷贝在WEB-INF/classes目录
        3.2在web.xml文件中配置
<!--servlet的配置-->
<servlet>
    <!--servlet的内部名称,自定义-->
    <servlet-name>FirstServlet</servlet-name>
    <!--servlet的类全名:包名+简单类名-->
    <servlet-class>gz.itcast.a_servlet.FirstServlet</servlet-class>
</servlet>

<!-- servlet的映射配置 -->
  <servlet-mapping>
    <!-- servlet的内部名称,一定要和上面的内部名称保持一致!! -->
    <servlet-name>FirstServlet</servlet-name>
    <!-- servlet的映射路径(访问servlet的名称) -->
    <url-pattern>/first</url-pattern>
  </servlet-mapping><!-- servlet的映射配置>
<servlet-mapping>

访问http://localhost:8080/day10过程分析
tomcat服务启动的时候,首先加载webapps的每个web应用的web.xml配置文件。
localhost:找到本地hosts文件中查找对应的该域名存在的IP地址
127.0.0.1
8080:找到tomcat服务器
/day10 在tomcat服务器的wenapps目录下找day10的目录
/first:资源名称
1)在day10的web.xml中查找是否有url-pattrn的内容
2)如果找到了url-pattern,则使用当前的servlet-name的名称到web.xml文件中查询是否有相同名称的servlet配置。
3)如果有,则取出servlet配置信息中的servlet-class内容。
通过反射:
a)构造FirstServlet的对象
b)然后调用FirstServlet里面的方法。

servlet的映射

    <servlet-mapping>
        <!--servlet的内部名称-->
        <servlet-name>FirstServlet</servlet-name>
        <!--映射路径-->
        <url-pattern>/first</url-pattern>
    </servlet-mapping>

精确匹配: url-pattern是什么就访问什么
模糊匹配: /* http://localhost:8080/day10/任意路径
/cast/* http://localhost:8080/day10/itcast/任意路径
*.后缀名 http://localhost:8080/day10/任意路径.do
*.do
*.action
*.html(伪静态)
注意:url-pattern要么以 / 开头, 要么以*开头
不能使用两种模糊匹配,例如 /itcast/*.do
当输入有URL的多个servlet同时被匹配的时候:
1)精确匹配优先
2)以后缀名结尾的url-pattern优先级最低。

servlet的缺省路径

servlet的缺省路径(<url-pattern>/</url-pattern>)是在tomcat服务器内置的一个路径。用于解析
web应用的静态资源文件。
解释:URL输入 http://localhost:8080/day10/indxe.html怎么读取文件
    1)到当前的day10应用下的web.xml文件查找是否有匹配的url-pattern.
    2)如果没有匹配的url-pattern则交给romcat内置的DefaultServlet处理
    3)DefaultServlet程序到day10应用的根目录下查找是否存在一个index.html的静态文件。
    4)如果找到则读取该文件的内容,返回给浏览器。
    5)如果找不到该文件,则返回404错误页面。
    结论:先找动态资源,再找静态资源。

Servlet的生命周期

Servlet的生命周期有tomcat服务器控制。

Servlet重要的四个生命周期方法

    构造方法:创建servlet对象的时候调用。默认情况下第一次访问Servlet的时候创建servlet的对象,Servlet的对象
是单实例的。
    init方法:创建完Servlet对象的时候调用,只调用一次。
    service方法:每次发出请求的时候调用。调用n次。
    destory方法:销毁的时候使用。只调用一次。    
伪代码的演示
1)通过映射找到servlet-class的内容
2)通过反射构造FirstServlet对象
    2.1得到字节码对象
    Class clazz = Class.forName("path");
    2.2通过调用无参数的构造方法来构造对象。
    Object obj = clazz.newInstance();
3)创键servletConfig对象,通过反射调用init方法·
    3.1得到方法对象
    Method m = clazz.getDeclareMethod("init", ServletConfig.class);
    3.2调用方法
    m.invoke(obj,config);   ---servlet的init方法被调用
4)创建request,response对象
    4.1得到方法对象
        Method m = clazz.getDeclaredMethod("service", HttpServletRequest.class, HttpServletResponse.class);
    4.2调用方法
        m.invoke(obj, request, reqponse);
5)当tomcat服务器停止或者web应用重新部署时候,通过反射destory方法
    5.1得到方法对象
        Method m = clazz.getDeclared("destory", null);
    5.2调用方法
            m.invoke(obj, null);

Servlet的自动加载

默认下,第一次访问servlet的时候创建servlet对象。如果servlet的构造方法或者

或者init执行了比较多的逻辑代码,那么导致用户第一次访问servlet时候比较慢
改变servlet创建对象的时间:提前到web应用加载的时候!!!
在servlet的配置信息中加上一个即可。

    <Servlet>
        <Servlet-name>LifeDemo</Servlet-name>
        <Servlet-class>path</servlet-calss>
        <!--让servlet对象自动加载-->
        <load-on-startup>1</load-on-startup>
    </Servlet>

Servlet的线程并发问题

单实例多线程,使用synchronized关键字进行同步。

ServletConfig对象

9.1作用
    ServletConfig对象:主要是用于加载servlet的初始化参数。在一个web应用中可以存在多个
ServletConfig对象(一个Servlet线程对应一个ServletConfig对象)
9.2对象的创建和得到
    创建时机:在创建完servlet对象之后,在调用init方法之前创建
    得到对象:直接从有参数的init方法中得到。
9.3servlet的初始化参数配置
```java


ConfigDemo
gz.itcast.f_config.ConfigDemo


path
e:/b.txt


“`
注意:servlet的参数只能由当前的这个servlet获取!
ServletConfig的API:
String getInitParameter(String name); 根据参数的名字得到参数的值
Enumeration getInitParameterNames() 获取所有参数
ServletContext getServletContext() 得到Servlet上下文对象
String getServletName() 得到servlet的名称。

ServletContext对象

    ServletContext对象,叫做Servlet的上下文对象。表示当前的web应用环境。一个web应用
中只用一个ServletContext对象。
对象的创建和得到
创建时机:加载web应用的时候创建ServletContext对象
得到对象:从Servlet对象中得到。
设计模式:在ServletConfig对象中设计一个ServletContext对象的引用。
        通过set()和get()方法操作
    1)创建Servlet对象 ServletContext context = new ServletContext();
    2)创建ServletConfig 对象 ServletConfig config = new ServletConfig();
                            config.setServletContext(context);
    class ServletConfig{
        ServletContext context;  //一个引用
        public ServletContext getServletContext(){
            return context;
        }
    }

    public void init(ServletConfig config){
        //从ServletConfig对象中得到ServletContext对象
        ServletContext context = config.getServletContext();
    }
核心API
Enumeration getInitParameterNames();
String getInitParmeter(String name); --得到web应用的初始化参数
  • 作为域对象使用:域对象可以在不同的动态资源之间共享数据。
  • ServletContetx作为域对象,在整个web有效。
    保存数据:void setAttribute(String name, Object object);
    获取数据:Object getAttribute(String name);
    删除数据: void removeAttribute(String name);
    转发:RequestDispatcher RequestDispatcher getRequestDispatcher(java.lang.String path);
转发和重定向的区别

1)转发
转发地址栏不会改变
转发只能转发到当前的web应用中
在转发过程中可以使用request域对象
2)重定向
地址栏会跳转至转发的页面
重定向可以到任意地址
重定向不能使用域对象
总结:如果使用域对象共享,只用采用转发技术。

内容概要:本文详细探讨了基于MATLAB/SIMULINK的多载波无线通信系统仿真及性能分析,重点研究了以OFDM为代表的多载波技术。文章首先介绍了OFDM的基本原理和系统组成,随后通过仿真平台分析了不同调制方式的抗干扰性能、信道估计算法对系统性能的影响以及同步技术的实现与分析。文中提供了详细的MATLAB代码实现,涵盖OFDM系统的基本仿真、信道估计算法比较、同步算法实现和不同调制方式的性能比较。此外,还讨论了信道特征、OFDM关键技术、信道估计、同步技术和系统级仿真架构,并提出了未来的改进方向,如深度学习增强、混合波形设计和硬件加速方案。; 适合人群:具备无线通信基础知识,尤其是对OFDM技术有一定了解的研究人员和技术人员;从事无线通信系统设计与开发的工程师;高校通信工程专业的高年级本科生和研究生。; 使用场景及目标:①理解OFDM系统的工作原理及其在多径信道环境下的性能表现;②掌握MATLAB/SIMULINK在无线通信系统仿真中的应用;③评估不同调制方式、信道估计算法和同步算法的优劣;④为实际OFDM系统的设计和优化提供理论依据和技术支持。; 其他说明:本文不仅提供了详细的理论分析,还附带了大量的MATLAB代码示例,便于读者动手实践。建议读者在学习过程中结合代码进行调试和实验,以加深对OFDM技术的理解。此外,文中还涉及了一些最新的研究方向和技术趋势,如AI增强和毫米波通信,为读者提供了更广阔的视野。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值