Javaweb

javaweb

软件系统体系结构

1.1:常见体系结构B/S、C/S

C/S(client/Server):

  • 缺点:软件更新时需要同时更新客户端和服务器端两端,比较麻烦;
  • 优点:安全性比较好。

B/S(Browser/Server):

  • 优点:只需要编写服务器端程序;
  • 缺点:安全性较差。

只要有浏览器即可

C/S架构和B/S 架构都可兼具,java: 90% 开发B/S

1.2: WEB资源

  • html/CSS/JS/图片…:静态资源;
  • JSP/Servlet:动态资源。

区别:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Njzi0o3D-1666191656930)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1666167401299.png)]

1.2.1:访问Web资源

打开浏览器,输入URL:

协议名://域名:端口/路径,例如:http://www.baidu.com:80/index.html

www.baidu.com 域名 映射IP地址 14.215.177.39

http://14.215.177.39:80/index.html

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O6Df30Zz-1666191656931)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1666168125534.png)]

协议:ftp,git,jdbc

javaWeb用到的协议:http

端口:

  1. HTTP:80
  2. HTTPS:443

服务器:表示硬件服务器和软件服务器。

  1. 硬件server:电脑
  2. 软件server:软件 Javaweb使用软件服务器
1.2.2:web服务器

Web服务器的作用是接收客户端的请求,给客户端作出响应。

对于JavaWeb程序而已,还需要有JSP/Servlet容器,JSP/Servlet容器的基本功能是把动态资源转换成静态资源,

我们需要使用的是Web服务器和JSP/Servlet容器,通常这两者会集于一身。下面是对JavaWeb服务器:

  • Tomcat(Apache):Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源的,免费的。

2.1:Tomcat

2.1.1:概述

Tomcat服务器由Apache提供,开源免费。由于Sun和其他公司参与到了Tomcat的开发中,所以最新的JSP/Servlet规范总是能在Tomcat中体现出来。当前最新版本是Tomcat10,我们课程中使用Tomcat8.5。Tomcat7支持Servlet3.0,而Tomcat6只支持Servlet2.5!

2.1.2 安装、启动、配置Tomcat

下载Tomcat可以到http://tomcat.apache.org下载。

Tomcat分为安装版和解压版:

  • 安装版:一台电脑上只能安装一个Tomcat;
  • 解压版:无需安装,解压即可用,解压多少份都可以,所以我们选择解压版。
2.1.3:部署
  1. 直接将项目放到webapps目录下即可
  • 项目名就是我们该项目的访问路径

  • 简单部署:将项目打成一个war包,再将war包放置到webapps目录下。war会自动解压

    虚拟目录: 项目名或者war名字

  1. 配置conf/server.xml文件,在<Host>标签体中配置
<Context docBase="D:/hello" path="/hehe" />
  • docBase:项目存放的路径
  • path:虚拟目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qcqxqR9c-1666191656932)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1666167790179.png)]

  1. 在conf/Catalina/localhost创建任意名称的xml文件。在文件中编写

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I2UGjdi7-1666191656934)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1666167839330.png)]

    虚拟目录:xml文件的名称

    推荐使用第三种: 因为它支持热部署,当我们不想部署项目,那我们就把hello.xml修改为hello.xml.back,那我们不需要重新启动tomcat,再访问,就无法访问到hello项目了

    2.1.4: Web应用(重点)
    创建静态应用
    • 在webapps下创建一个hello目录;
    • 在webapps/hello 下创建index.html;
    • 启动tomcat;
    • 打开浏览器访问http://localhost:8080/hello/index.html

    index.html

    <html> 
        <head>  
            <title>hello</title> 
        </head> 
        <body>  
            <h1>Hello World!</h1> 
        </body>
    </html>
    
    1.5.2 创建动态应用
    • 在webapps下创建hello1目录;
    • 在webapps/hello1 下创建WEB-INF目录;
    • 在webapps/hello1 WEB-INF 下创建web.xml;
    • 在webapps/hello1 下创建index.html。
    • 打开浏览器访问http://localhost:8080/hello/index.html

    web.xml

    <?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" 	xmlns="http://java.sun.com/xml/ns/javaee" 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    
    </web-app>
    

    完整的Web应用还需要在WEB-INF目录下创建:

    • classes;
    • lib目录;

    webapps

    ​ |- hello

    ​ |-index.html

    ​ |-WEB-INF

    ​ |-web.xml

    ​ |-classes

    ​ |-lib

    • hello:应用目录,hello就是应用的名称;

    • index.html:应用资源。应用下可以有多个资源,例如css、js、html、jsp等,也可以把资源放到文件夹中,例如:hello html index.html,这时访问URL为:http://localhost:8080/hello/html/index.html;

    • WEB-INF:这个目录名称必须是大写,这个目录下的东西是无法通过浏览器直接访问的,也就是说放到这里的东西是安全的;

      • web.xml:应用程序的部署描述符文件,可以在该文件中对应用进行配置,例如配置应用的首页:

         <welcome-file-list>
          <welcome-file>index.html</welcome-file>
         </welcome-file-list>
        
      • classes:存放class文件的目录;

      • lib:存放jar包的目录;

    jar包:java项目打成jar

    war包:web项目打成war

    3.1:Servlet

    3.1.1什么是Servlet

    servlet:接收请求,处理,并响应

    Filter:(过滤器)拦截请求

    Lisenter:(监听器)监听某一行为,只要用户触发这一行为,自动执行

    web项目:请求与响应的项目

    Servlet是JavaWeb的 三大组件之一 ,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:

    • 接收请求数据;
    • 处理请求;
    • 完成响应。

    例如客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完成处理!Servlet需要我们自己来编写,每个Servlet必须实现javax.servlet.Servlet接口。

    请求:包含请求头,请求体(不一定

    响应:

    3.1.2:实现Servlet的方式

    实现Servlet有三种方式:

    • 实现javax.servlet.Servlet接口;
    • 继承javax.servlet.GenericServlet类;
    • 继承javax.servlet.http.HttpServlet类;

    Servlet.java

    public interface Servlet { 
        public void  init(ServletConfig config)  throws  ServletException; 
        public ServletConfig getServletConfig();       
        public void  service(ServletRequest req, ServletResponse res) throws      ServletException, IOException;      
        public  String getServletInfo();       
        public  void   destroy();
    }
    

    Servlet中的方法大多数不由我们来调用,而是由Tomcat来调用。并且Servlet的对象也不由我们来创建,由Tomcat来创建!

    3.1.3 创建helloservlet应用

    ​ 我们开始第一个Servlet应用吧!首先我们使用idea创建一个web项目

    接下来我们开始准备完成Servlet,完成Servlet需要分为两步:

    • 编写Servlet类;

      三种方式:

      1. 实现javax.servlet.Servlet接口;

        javax.servlet包

      2. 继承javax.servlet.GenericServlet类;

      3. 继承javax.servlet.http.HttpServlet类;

      Javaweb组件方法由tomcat调用

      HelloServlet.java

      public  class  HelloServlet  implements Servlet {	     
          public void init(ServletConfig config) throws ServletException {}	     
          public ServletConfig getServletConfig() {     
              return null     ;
          }	     
          public void destroy() {}
          public String getServletInfo() {     
              return null;
          }      
          public  void  service(ServletRequest req, ServletResponse res) throws      ServletException, IOException {		
              System.  out  .println("hello servlet!");	
          }
      }
      

    4:Servlet接口

    1. 编写Servlet类, 编写处理请求的逻辑代码

    让一个类变成Servlet类,三种方式:

    • 实现javax.servlet.Servlet接口
    • 继承javax.servlet.GenericServlet抽象类
    • 继承javax.servlet.http.HttpServlet抽象类 实际开发中使用这种方式
    1. 在WEB-INF/web.xml文件中进行配置
    <!--配置Servlet, 一个Servlet类绑定一个url(客户端访问入口)-->
      <servlet>
          <!-- 名称 随意取, 一般取名类名-->
          <servlet-name>AServlet</servlet-name>
          <!--对应的Servlet类, 全限定名(包.类名) -->
          <servlet-class>com.fs.web.AServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <!--名称, 与对应servlet的servlet-name一样 -->
          <servlet-name>AServlet</servlet-name>
          <!--绑定url: /路径  一般取名: /类名 -->
          <url-pattern>/AServlet</url-pattern>
      </servlet-mapping>
    

    javaWeb中三大组件的方法,大部分 都不是程序员手动调用, 由Tomcat(其他web服务器)服务器调用

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yv9qxmeH-1666191656934)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1666168834568.png)]

    4.1 Servlet的生命周期

    描述Servelet的一生, 从生到死过程

    与Servlet的生命周期相关的方法有:

    • void init(ServletConfig);
    • void service(ServletRequest,ServletResponse);
    • void destroy();
    1. 默认情况: Servlet第一次请求的时候,由Tomcat创建
    2. 调用init()方法
    3. 用户每请求一次这个Servlet, tomcat调用一次service()方法
    4. 当Tomcat服务器关闭之前, 销毁它创建的所有对象,包含创建Servlet, 在Servlet销毁之前, 调用destroy()

    Servlet中的其他对象

    1. ServletConfig 对象: 对应Servlet的配置, Tomcat创建,
    1. 获取Servlet的初始化参数 参数名,参数值 都是String类型

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

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

    1. ServletContext getServletContext() 得到ServletContext , 最大域对象(Application域)
    1. ServletRequest对象: 请求对象, 后面详细讲 核心 Tomcat创建

    核心方法: 获取请求参数

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

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

    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请求: 请求参数通过请求体传递,

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

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

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

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

    实现Servlet的第二种方式: 继承javax.servlet.GenericServlet抽象类

    GenericServlet 实现Servlet接口, 把Servlet接口其他四个方法实现, service() 变成抽象方法

    实现Servlet的第三种方式: 继承javax.servlet.http.HttpServlet抽象类

    专门处理Http请求的

    实际开发中使用方式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CS2ueSL1-1666191656936)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1666169072023.png)]

    实际开发: 继承HttpServlet, 重写doGet()或者doPost()

    5.1:Servlet 细节
    Servlet与线程安全:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QtStxcT9-1666191656937)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1666169284737.png)]

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

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

    一定不要再Servlet提供存放数据的属性

    1. Servlet的url-pattern: 给这个servlet绑定一个url
    1. 一个Servlet只能绑定一个Url?

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

    1. url-pattern的写法
    • /字符串 绑定确定的url
    • 结合 * (通配符, 任意)
      • /user/* 前缀匹配, 只要前面是/user开头,后面的任意 /user/a /user/b
      • *.后缀名 后缀匹配, 只要url后面以 后缀名结尾的都匹配 *.do a.do c.do

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

    - /* 匹配所有
    

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

    1. Servlet的默认创建时机: 第一次请求该Servlet才创建, 第一次惩罚, 第一次请求耗费时间多一点

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

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

    load-on-startup 中的数字越小,越先创建

    注解:

    @WebServlet(value="/*",loadOnStartup=2)
    

    idea 与tomcat

    IDEA会为每一个tomcat部署的项目单独创建一份配置文件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-deKkOgI8-1666191656937)(C:/Users/Administrator/Desktop/10-18/assets/image-20221018100705486.png)]

    idea发布项目, 使用之前讲第三种发布方式

    out目录下项目 tomcat发布项目

    idea的项目: 工作项目

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

    load-on-startup 中的数字越小,越先创建

    注解:

    @WebServlet(value="/*",loadOnStartup=2)
    

    idea 与tomcat

    IDEA会为每一个tomcat部署的项目单独创建一份配置文件

    [外链图片转存中…(img-deKkOgI8-1666191656937)]

    idea发布项目, 使用之前讲第三种发布方式

    out目录下项目 tomcat发布项目

    idea的项目: 工作项目

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值