JavaEE-jetty安装配置与及在IDEA中创建项目、Servlet生命周期、路径匹配规则、相对定位与绝对定位、重定向与转发、Servlet内置对象

1、jetty服务器安装

  1. 下载地址:http://www.eclipse.org/jetty/previousversions.html

    下载解压到自己的安装路径下就可以使用

  2. 更改端口号

    使用记事本打开jetty安装目录下的start.ini文件,找到下面代码位置,设置端口,默认的是8080(Tomcat服务器也是,两个都安装的话,为了避免冲突,建议修改端口号)

    ##Connector port to listen on  
    jetty.http.port=8888
    
  3. 启动

    打开jetty的安装路径,有一个start.jar文件,使用cmd命令行,先进入start.jar文件的目录,使用命令java -jar start.jar运行

2、jsp在IDEA中创建、部署、运行

参考链接:https://www.simoniu.com/blog/113

3、Servlet处理请求、生命周期

两个注解

@WebFilter:过滤器
@WebServlet:Servlet

3.1、第一次加载

构造方法-->初始化init()方法-->service()方法(调用doGet()方法或doPost()方法)-->销毁destroy()方法

3.2、非第一次加载(Servlet已经驻留内存了)

service()方法(调用doGet()方法或doPost()方法)-->销毁destroy()方法

3.3、预加载

将Servlet首次加载到内存中(默认是懒加载,也就是用的时候再加载)

设置为预加载(提前加载):在webServlet注解上添加属性值loadOnStartup=1,数字越小,级别越高

@WebServlet(name = "ServletTest01", value = "/ServletTest01*", loadOnStartup = 1)

3.4、一个Servlet设置多个请求地址

在注解上使用urlPatterns属性

//注意:Servlet的URL写法必须以/开头
@WebServlet(urlPatterns = {"/HelloWorldServlet", "/haha", "/hehe"})

3.5、Servlet路径匹配规则

路径匹配与扩展名匹配不能混用

  1. 精确匹配(最精准的),默认的,优先级别最高

  2. 路径匹配(在同一路径下)value = "/abc/*"

    @WebServlet(name = "ServletTest01", value = "/abc/*")
    
  3. 扩展名匹配(后缀一致)value ="*.html"

    @WebServlet(name = "ServletTest02",value ="*.html" )
    
  4. 默认匹配(以上三个都匹配不成功,找默认匹配)value = "/",一般用来做错误页面

    //默认匹配,如果精确匹配、路径匹配、后缀名匹配都没有匹配上,就会访问到这个页面
    @WebServlet(name = "ServletTest03", value = "/")
    
  5. 过滤器匹配(一般不用),过滤所有的请求,一般使用在Filter上

  6. 优先级:精确匹配>路径匹配>扩展名匹配>默认匹配

3.6、Servlet响应返回客户端的文件类型

浏览器会根据文件的类型进行解析

text/html;charest=utf-8:网页

text/plain;charest=utf-8:纯文本

text/xml;charest=utf-8:xml文本

text/json;charest=utf-8:json

3.7、关于浏览器首页是默认的index.jsp,还是自定义的默认匹配规则页面

不写默认匹配规则会跳转到默认首页index.jsp(在welcome-file-list属性,默认找项目中的index.jsp文件,作为默认首页)

写了默认匹配规则服务器就会加载自定义的默认匹配规则的页面,浏览器默认会在URL地址后面加一个/

4、Servlet处理用户请求模式及单例模式

4.1、Servlet处理用户请求模式

单例多线程处理,每一个Servlet只有一份存在,因为是多线程处理,所以会有线程安全问题,在设计程序的时候要考虑进去。

单例类MySun的设计

package org.westos.test;

//设计一个单例类太阳类,单例就是只有一份
    /*
    设计原则
    1. 构造方法私有
    2. 静态方法返回单例对象
     */
public class MySun {

    private static MySun sun;

    //私有构造
    private MySun() {
    }

    //得到MySun对象的方法
    public static MySun getSun() {
        if (sun == null) {
            sun = new MySun();
        }
        return sun;
    }
}

4.2、单例及单例的六种设计模式

  1. 单例:最多只有一份,不会有多余的。单例模式的目的是使得类的一个对象成为系统中的唯一实例,“阻止”所有想要生成对象的访问
  2. 单例设计模式
    1. 懒汉式—线程不安全:最基础的实现方式,线程上下文单例,不需要共享给所有线程,也不需要加synchronize之类的锁,以提高性能
    2. 懒汉式—线程安全:加上synchronize之类保证线程安全的基础上的懒汉模式,相对性能很低,大部分时间并不需要同步
    3. 饿汉方式。指全局的单例实例在类装载时构建。
    4. 双检锁式。在懒汉式基础上利用synchronize关键字和volatile关键字确保第一次创建时没有线程间竞争而产生多个实例,仅第一次创建时同步,性能相对较高
    5. 登记式。作为创建类的全局属性存在,创建类被装载时创建
    6. 枚举。java中枚举类本身也是一种单例模式
  3. 实现要点
    1. 某个类只能有一个实例(单例模式的类只提供私有的构造函数)
    2. 该类必须自行创建这个实例(类定义中含有一个该类的静态私有对象)
    3. 该类必须自行向整个系统提供这个实例(提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象)
  4. 优缺点
    1. 实例控制,确保所有对象都访问唯一实例
    2. 类可以灵活更改实例化过程
    3. 每次对象请求引用时都要检查是否存在类的实例,需要一些开销(通过使用静态初始化解决)
    4. 不能解决删除单个对象的问题,在提供内存管理的语言中,只有该单例类能够导致实例被删除;而在一些语言中,其他类可以删除对象实例,会导致单例类中出现悬浮引用。

5、相对路径与绝对路径

  1. 举例:对于西安人来说,你给一个西安人说去大雁塔玩,他就知道是哪儿。但是对于一个外国游客,你就要说中国陕西西安大雁塔,这就是相对地址与绝对地址
  2. 相对地址是根据一个基准点去找的(比如从当前项目下找),而绝对路径是从磁盘根目录开始找的
  3. 相对路径在拷贝文件时比较好用,拷过去的文件在原来的项目底下,相对路径不变,拷贝过去直接使用,而绝对路径因为每个人磁盘存储路径不一致,很可能报错
  4. 绝对地址:从根目录开始,有完整的路径,谁拿着都可以找到,永远都不会错

jsp表达式:<%= %>

EL表达式:${}

6、请求重定向与请求转发

导入别人的代码到自己的工作空间下

  1. 复制到自己的工作空间

  2. 创建新的工作空间

  3. file----new----moudle from……

  4. 设置一下

  5. 请求重定向:本质上是两次请求,两个Servlet对象,所以地址栏的url会变化,Servlet属性不保存

    客户端—>服务器—>重定向—>客户端请求其他地址

    多使用在需要身份权限验证的使用,在权限不明确的时候要求重新登录

  6. 请求转发:本质是一次请求,一个Servlet,所以地址栏的url不变,Servlet属性保存

    客户端—>服务器—>服务器内部请求其他的地址

7、获取Servlet内置对象

  1. 九大内置对象
    out、page、request、response、session、application、 exception、pageContext、config

  2. 常用(掌握)
    request、response、session、application

  3. 在Servlet中获取

    参数自带的:request、response

    session获取:request.getSession()

    application获取:request.getServletContext()

  4. 范围大小

    application>session>request>page

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章