javaWeb学习笔记整理(上)

软件体系结构:

B/S 架构: 浏览器/服务器架构, 客户端使用浏览器访问服务器, 用户不需要安装客户端,只有电脑有浏览器就可以访问,

C/S架构: 客户端/服务器架构: 客户端使用软件提供商提供的客户端程序访问, 用户需要下载客户端程序,并且安装

C/S

  • C/S结构即客户端/服务器(Client/Server),例如QQ;
  • 需要编写服务器端程序,以及客户端程序,例如我们安装的就是QQ的客户端程序;
  • 缺点:软件更新时需要同时更新客户端和服务器端两端,比较麻烦;
  • 优点:安全性比较好。

B/S

  • B/S结构即浏览器/服务器(Browser/Server);
  • 优点:只需要编写服务器端程序;
  • 缺点:安全性较差。

访问web资源:

访问动态资源: 需要服务器运行动态资源, 把运行之后的结果(静态资源) 响应给客户端

访问的静态资源: 服务器直接把静态资源响应给客户端

服务器

服务器: 表示硬件服务器,也表示软件服务器

硬件服务器: 电脑

软件服务器: 软件 javaWeb使用软件服务器

  • Tomcat(Apache):Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源的,免费的 (开发)
  • JBoss(JBOSS):大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
  • Weblogic(Orcale):大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
  • Websphere(IBM):IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

web项目的结构

  1. 静态的web项目结构 了解

    创建一个目录, 在该目录下存放静态资源

    • bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat6.exe、tomcat6w.exe,前者是在控制台下启动Tomcat,后者是弹出UGI窗口启动Tomcat;如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动Tomcat,但需要先配置JAVA_HOME环境变量才能启动,shutdawn.bat用来停止Tomcat;
    • conf:这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:
    • server.xml:配置整个服务器信息。例如修改端口号,添加虚拟主机等; tomcat-users.xml:存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了;
    • web.xml:部署描述符文件,这个文件中注册了很多MIME类型,即文档类型。这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。MIME就是用来说明文档的内容是什么类型的!
    • context.xml:对所有应用的统一配置,通常我们不会去配置它。
    • lib:Tomcat的类库,里面是一大堆jar文件。如果需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar文件放到这个目录中,这个目录中的jar所有项目都可以共享之,但这样你的应用放到其他Tomcat下时就不能再共享这个目录下的Jar包了,所以建议只把Tomcat需要的Jar包放到这个目录下;
    • logs:这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。
    • temp:存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除!
    • webapps:存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的。项目。其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目。http://localhost:8080/examples,进入示例项目。其中examples就是项目名,即文件夹的名字。
    • work:运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下。
    • LICENSE:许可证。
    • NOTICE:说明文件。

    项目的部署: 运维

  2. 把项目目录(打成war包)拷贝tomcat安装目录/webapps目录

jar: java项目打成jar

war: web项目打成war, 拷贝到tomcat的webapps目录, tomcat启动的时候,自动把war解压

  1. 在tomcat安装目录/conf/server.xml文件中, <Host>标签添加一个<context>, 发布项目
<Context docBase="项目路径" path="/访问项目名" />
  1. 在conf/Catalina/localhost创建任意名称的xml文件。在文件中编写

访问的项目名: xml文件名

取消发布: 在xml文件后名加.backup

这个方式: idea发布项目方式

javaWeb动态项目结构

  1. 项目根目录

    ​ |–WEB-INF

    ​ |–lib 第三方jar

    ​ |–classes 类路径 src目录中类编译之后的字节码文件存放路径,配置文件

    ​ |–web.xml 文件 当前web项目的配置文件

    |–静态资源

WEB-INF下资源,浏览器无法直接访问

Servlet

javaWeb三组件:

Servlet: 接收用户请求,处理请求,响应结果

Filter: 过滤器,用于拦截请求

Listener: 监听器,监听某一行为,只要用户触发了这一行为,就执行代码

请求:

包含请求头、请求体(get没有请求体)

响应:

包含响应头、响应体(也称响应正文)

实现Servlet有三种方式:

  • 实现javax.servlet.Servlet接口;

  • 继承javax.servlet.GenericServlet类;

  • 继承javax.servlet.http.HttpServlet类;开发常用

HttpServlet是一个抽象类,是GenericServlet类的子类,用于处理HTTP请求

javaweb中三大组件中的方法大多数都不需要我们调用,一般由服务器调用。并且Servlet的对象也不由我们来创建,由服务器来创建!

Servlet的生命周期(面试常见)

出生:默认情况下,Servlet在第一次被访问时,由服务器创建且只创建一次,在Servlet创建后调用一次init()方法

服务: 用户每请求一次就调用一次service()方法

死亡:服务器关闭前,调用destroy()方法,销毁所有创建的对象

Servlet中的其他对象

  1. ServletConfig 对象: 对应Servlet的配置, Tomcat创建,

    1. 获取Servlet的初始化参数 参数名,参数值 都是String类型

    String getInitParameter(String name) 根据初始化参数名获取初始化参数值

    Enumeration getInitParameterNames() 获取所有的初始化参数name

    jdk早起的集合: Enumeration

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DoNZxysk-1667533413184)(D:/%E9%A3%9E%E6%80%9D%E5%AE%9E%E8%AE%AD%E4%B8%89/6.JavaWeb/%E8%AF%BE%E4%BB%B6/%E8%80%81%E5%B8%88%E7%AC%94%E8%AE%B0/10-17%E7%AC%94%E8%AE%B0/assets/image-20221017112339511.png)]

    在Servlet的配置中,

    <servlet>
       <!-- 名称 随意取, 一般取名类名-->
       <servlet-name>AServlet</servlet-name>
       <!--对应的Servlet类, 全限定名(包.类名) -->
       <servlet-class>com.fs.web.AServlet</servlet-class>
    
       <!--配置初始化参数-->
       <init-param>
           <param-name>name</param-name>
           <param-value>张三</param-value>
       </init-param>
       <init-param>
           <param-name>age</param-name>
           <param-value>21</param-value>
       </init-param>
    </servlet>
    
    1. ServletContext getServletContext() 得到ServletContext , 最大域对象(Application域)
  2. ServletRequest对象: 请求对象, 后面详细讲 核心 Tomcat创建

​ 核心方法: 获取请求参数

​ String getParameter(String name) 根据请求参数name获取请求参数值

3.ServletResponse对象: 响应对象, 后面详细讲 核心 Tomcat创建

getWriter() 得到字符响应输出流, 服务器通过改输出流,把数据写到客户端的浏览器页面上

System.out.println(): 把数据打印到服务器的控制台

前端发送请求有哪些方式:

  1. form 的action 可以是get,post method: 默认值get, 设置post,发送post请求
  2. 超链接<a href=""> 只能get
  3. 直接在浏览器地址栏输入url 只能get
  4. js发送ajax请求 可以是get,post

请求方式: GET请求/POST请求

get请求: 请求参数通过url传递, 请求参数 url: url?k1=v1&k2=v2&…

​ 不安全, 传递字符串, 不能传递文件数据

post请求: 请求参数通过请求体传递,

​ 安全性高, 传递字符串, 传递文件数据

Servlet 细节

注解servlet

注解: 特殊的接口, 在方法,类,属性… 上使用 @注解名 (创建注解类的对象)

类类型: class interface enum @interface

注解作用: 替换配置文件

@WebServlet注解 替换servlet的配置文件

// name 忽略:
//@WebServlet(name="DServlet",urlPatterns="/DServlet")
//@WebServlet(urlPatterns="/DServlet")
//urlPatterns 与value 等同
//@WebServlet(value="/DServlet")
// 如果只给value赋值,  省略 value=
@WebServlet("/DServlet")

Servlet是否是线程安全的?

判断依据:多个线程是否共享统一资源,不共享:安全;共享:不安全

Servlet类在Tomcat只有一个对象, 多个请求时,请求的同一个Servlet对象, 多个线程使用的同一个对象, Servlet对象被共享, 线程不安全

因为Servlet是 线程不安全的,所以不要在Servlet提供存放数据的属性

Servlet的url-pattern

url-pattern作用:给这个servlet绑定访问这个servlet的url

一个Servlet只能绑定一个url?

可以绑定多个url, 但是实际开发一般只绑定一个

url-pattern的写法

/字符串 绑定确定的url

结合 * (通配符, 任意)

  • /user/* 前缀匹配, 只要前面是/user开头,后面的任意 例如 /user/a /user/b
  • *.do 后缀匹配, 只要url后面以 后缀名结尾的都匹配 例如 a.do c.do

注意: /*.后缀名 是错误写法

  • /* 匹配所有

url的匹配, 越精确,优先级越高, 没有星号的url优先级高于有星号

修改Servlet的创建时机

Servlet的默认创建时机是第一次请求该Servlet才创建, 也叫第一次惩罚, 第一次请求耗费时间多一点

修改Servlet的创建时机: 在web服务器启动的时候,创建Servlet

<servlet>
      <!--设置tomcat启动的时候,创建-->
      <load-on-startup>非负整数</load-on-startup>
  </servlet>
load-on-startup` 中的数字越小,越先创建

ServletContext(上下文)

ServletContext对象 与天(tomcat)同寿

ServletContext 在Tomcat启动的时候创建, 在tomcat关闭的时候销毁, 在整个web项目中只有一个

在Web项目中任何一个用户任何一个地方都可以访问

作用: 作为全局共享数据容器 也称为域对象 ServletContext 称为application域

域对象作用: 存取数据, 数据为key/value结构 key: String类型 value:Object类型

javaWeb中有四大域:

1.application域 整个项目有效

  1. session域 常用 在同一次会话内有效
  2. request域 常用 在同一次请求内有效
  3. page域 在同一个页面/Servlet有效: 等同于this
域对象都有下列方法

void setAttribute(String name,Object object) 往域中存数据, 如果name不存在,就添加,如果name存在,覆盖object

Object getAttribute(String name) 从域中获取数据, 如果name不存在, 返回null

removeAttribute(String name) 从域中删除数据

Enumeration getAttributeNames() 获取域中所有的name

page域 在同一个页面/Servlet有效: 等同于this

域对象都有下列方法

void setAttribute(String name,Object object) 往域中存数据, 如果name不存在,就添加,如果name存在,覆盖object

Object getAttribute(String name) 从域中获取数据, 如果name不存在, 返回null

removeAttribute(String name) 从域中删除数据

Enumeration getAttributeNames() 获取域中所有的name

猜你喜欢

转载自blog.csdn.net/m0_48895748/article/details/127686022
今日推荐