java web

1.B/S与C/S区别

1.1 C/S

类似于QQ、WeGame、Word软件都属于C/S的软件,其特点是:

  • 维护成本高
  • 在本地安装,如果需要更新,需要安装更新程序,还可能会造成更新失败
  • 只能够在局域网内访问(管理系统)
  • 界面开发不够灵活
1.2 B/S

类似于taobao、京东、百度金融大型应用,其特点是:

  • 维护成本相比较略低
  • 无需在本地本地安装,如果需要更新,直接更新服务器的内容,客户端使用浏览器访问
  • 可以支持广域网
  • 依赖于HTML5\CSS3\JS…实现更加灵活的页面设计和开发

2.http协议(面试题)

‎超文本传输协议(Hyper Text Transfer Protocol, HTTP)是一个简单的请求-响应协议,它通常运行在TCP 之上。 它指定了客户端可能发送给服务器什么样的消息 以及得到什么样的响应。 请求和响应消息的头以ASCII形 式给出; 而 消息内容则具有一个类似MIME的格式。 这 个简单模型是早期Web成功的有功之臣,因为它使开发 和部署非常地直截了当。‎

2.1 HTTP协议特点
  • 支持客户端/服务器的模式,支持B/S

  • http协议简单,使得HTTP服务器的程序规模小,因而通讯速度很快

  • 允许传输任意的数据类型
    在这里插入图片描述

  • 无连接
    无连接是限制每次连接只处理一个请求,服务器处理完客户的请求,并受到客户的应答后,即断开连接。采用这种方式可以节省很多传输时间。在1.1版本中,采用长连接形式,但不代表一致保持连接,当超过连接时长时,就会断开连接。

  • 无状态
    无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传输的数据量增大。另一方面好处就是,如果后续的连接不需要之前的信息,响应就会比较快,而为了解决HTTP的无状态性,出现Cookie和Session技术。

2.2 HTTP的工作原理
  • 客户端的请求过程

    2.1. 向服务器发送请求
    2.2 接受服务器返回的报文并解释成友善的信息阅读
    2.3 客户端大概有:浏览器,应用程序等
    2.4 如今时代可能使用最多的就是浏览器,当用户在地址栏输入网址回车的时候,浏览器会做如下处理:
    a:解析协议和域名
    b:使用HTTP协议并创建请求报文向服务器发送器请求
    c:接受服务器返回的内容并展示给客户

  • 服务器端的响应过程

    3.1 服务器端在接收到客户端发送的请求后开始处理请求
    3.2服务器处理过程:服务器软件一直在监听端口是否会有新的请求达到,如iis和tomcat 在建立web站点后,默认会一直监听80端口等待HTTP请求到达服务器
    a:建立连接:如果客户端已经打开服务器的持久连接,则可以直接使用,否则客户端需要在服务器打开一条新的连接
    b:接收到请求报文:连接上有数据的时候,web服务器会从网络数据中读取数据,并将请求报文中的数据解析出来
    c.处理请求:当请求被接受后,服务器便可以根据报文进行处理了,例如post方法中提出报文主体数据并插入到数据库中
    d:访问资源:请求处理完后,比如web会根据数据生成一系列的HTML页面或图片等信息,此步骤将访问这些存储在服务器上的物理文件
    e:构建响应:web服务器在识别资源后,构造响应报文,响应报文包括:状态码,响应头,响应主题等内容太。
    f:发送响应:服务器将响应的数据发送给服务器端机器
    g:记录日志:请求结束后,服务器会在日志文件中记录一条请求日志

2.2 http的组成(URL URI)

1.协议部分

‎该URL的协议部分为“http:”,这代表网页使用的是 HTTP协议。 在Internet中可以使用多种协议,如 HTTP,FTP等等本例中使用的是HTTP协议。 在” HTTP”后面的“//”为分隔符‎

2.域名部分

该URL的域名部分为www.aspxfans.com, URL中也可以使用ip地址作为域名

3.端口部分
跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。如果没有,那么说明URL使用的是默认端口80,端口不是URL的必须组成部分

4.虚拟目录部分
从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”

5.文件名部分
从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一“/开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该分,则使用默认的文件名

6.锚部分
从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分

7.参数部分
从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为
“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。

http://域名/资源
http://ip地址:端口号/资源?xxx=xxx&xxx=xxx

2.3 请求【响应】报文

客户端与服务器之间的信息传递使用的载体(overload)叫做报文,报文分为请求和响应两个部分。

  • 组成
    请求首行:包含请求方法,要访问的资源以及所舒勇的HTTP版本
    请求头部:说明服务器要使用的附加信息
    空行:请求报文头部后的空行是必须的
    请求体:get往往不存在请求体,post请求体包含请求的参数
    在这里插入图片描述

  • get
    在这里插入图片描述

  • post
    在这里插入图片描述

  • http的请求方式

    GET(获取):请求获取Request-URI所标识的资源。
    POST(更新或新增):在Request-URI所标识的资源后附加新的数据。
    HEAD:请求获取由Request-URI所标识的资源的响应消息报头。
    PUT(新增):请求服务器存储一个资源,并用Request-URI作为其标识。
    DELETE(删除):请求服务器删除Request-URI所标识的资源。
    TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断。CONNECT:保留将来使用。OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求。

  • get

    1.从服务器获取数据,返回响应的实体部分,可以类比数据库的select操作,不会影响数据库本身。
    2.没有请求体。
    3.请求参数和对应的值附在URL后,以?号开始,参数用key=value键值对的方式书写,多个参数使用&分割。
    4.通常对数据不敏感的请求使用get请求,因为参数跟在URL后不安全。
    5.传输的参数长度是没有限制的。不同的浏览器会对get做长度限制。

  • post

    1.向指定资源提交表单数据进行处理请求(例如提交表单或者上传文件)。参数数据被包含在请求体中,以名称/值的形式出现,可以传输大量的数据。POST请求可能会导致新的资源的建立和/或已有资源的修改。

    2.通常post请求含有请求体。

    3.请求参数存放在请求体中,可以是任意格式。

    4.相对来说数据比较安全。

    5.请求数据无大小限制,可以认为是无限制。

  • get与post

    1.🙊 从参数的传递方面来看,GET请求的参数是直接拼接在地址栏URL的后面,而POST请求的参数是放到请求体里面的。

    2.🙊 从长度限制方面来看,GET请求有具体的长度限制,一般不超过1024KB,而POST理论上没有,但是浏览器一般都有一个界限。

    3.🙊 从安全方面来看,GET请求相较于POST,因为数据都是明文显示在URL上面的,所以安全和私密性不如POST。

    4.🙊 从本质上来说,GET和POST都是TCP连接,并无实质的区别。但是由于HTTP/浏览器的限定,导致它们在应用过程中体现出了一些不同。GET产生一个数据包,POST产生两个数据包。对于GET请求,浏览器会把httpheader 和 data 一并发出去,服务器响应200(返回数据)。而对于POST,浏览器先发送header,服务器响应100continue,浏览器再发送data,服务器响应200。

2.4 http 状态码

10x: 消息,指连接状态
20x: 成功
30x:重定向
40x:找不到资源【客户端错误】
50x:服务器错误

3. Tomcat 服务器

3.1 Tomcat作用

Tomcat是一个应用服务器。能够解析JAVA的代码,生成.class文件,同时将java转换为html相应的内容。

3.2 下载地址
https://tomcat.apache.org

下载对应版本
在这里插入图片描述

解压后的目录结构
在这里插入图片描述

conf:放置所有的配置文件

lib:放置所有的支持jar包

logs:日志文件

bin: 放置所有的可执行文件

conf:放置所有的配置文件

lib:放置所有的支持jar包

logs:日志文件

  • 运行Tomcat
    • 必须先装好java环境
    • 在bin 目录找到

4.JSP的基本语法及运行机制

4.1 JSP的基本语法
  • 指令
    代表着当前页面的属性设置
<%@ page 属性=“属性值”%>
  • contentType:页面的内容类型text/html;charset=utf-8
  • import:导入要用的包
  • language:代表页面的编程语言
<%@ page contentType="text/html";charset="utf-8" language="java"%>
  • 静态代码
    指的是页面中所有的静态代码(HTML\css\js\图片)
  • 小脚本
    小脚本就是在页面中的多段java代码
<%
代码段
%>
  • 表达式
    类似于输出语句,能够将内容输出到页面

    <%=java代码%>
    
  • 声明

    能够在页面中编写java的按方法,该形式已经被废弃了

    <%!
        方法
    %>
    
  • 注释

    html注释:在客户端是能够被看到的

    <!-- 
    
    -->
    

    jsp注释:无法在客户端能够被看到

    <%-- 
        //单行注释
        /***/多行注释
    --%>
    
4.2 JSP的运行机制

在这里插入图片描述

运行流程:

  1. 在客户端第一次请求时,先对JSP进行翻译
  2. 形成“JAVA”文件,之后会对java文件编译成为”.class“文件
  3. 最后会执行。
  4. JSP在第一次执行时,速度较慢,从第二次开始,就会直接使用已经编译好的.class运行,所以性能能够升。
  5. 如果对JSP中的配置进行了修改,那么服务器一定要重启!

在这里插入图片描述

4.3 常见的问题

1.404问题

  • 服务器未启动
  • 页面名称输入错误
  • 文件夹可能配置错误
  • 将页面放置在了WEB-INF目录,该目录是一个系统配置目录,所以不能够随意访问
  • web应用未部署

2.500问题

  • 服务器中代码出错了,可以查看页面的错误信息结合idea中输出的信息判断错误点。

5. JSP的内置对象

JSP中一共包含9个内置对象,最大的特点就是能够直接使用,而无需使用者手动实例化。实例化的过程被
web容器完成了。

  • page(指向当前页面的一个内部对象)代表当前页面的对象。

    final java.lang.object page = this;
    
  • pageContext(作用域)

    是四个作用域其中之一,作用范围只在当前的页面中。

  • out

    内容输出

  • config

    做页面对应的Servlet的配置

  • exception

    处理页面中的异常信息

  • request

    该对象主要处理客户端的请求,代表依次请求,包含以下常见方法

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A8iBGflN-1661412284787)(https://www.writebug.com/myres/static/uploads/2022/8/9/75a5c67b41d8b6674e9c958bc76c6cd6.writebug)]

    1.模拟实现用户注册

    register.jsp

    
    

    <%–
    Created by IntelliJ IDEA.
    User: Administrator
    Date: 2022/8/4 0004
    Time: 17:15
    To change this template
    use File | Settings | File
    Templates.
    –%>
    <%@ page contentType=“text/html;charset=UTF-8” language=“java” %>

    Title
  • 用户名:
  • 密码:
  • 信息来源: 报刊 网络 朋友推荐 电视
  • do_register.jsp
    
    ```java
    <%--
    Created by IntelliJ IDEA.
    User: Administrator
    Date: 2022/8/4 0004
    Time: 17:19
    To change this template
    use File | Settings | File
    Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
    <title>Title</title>
    </head>
    <body>
    <%
    //通过
    setCharacterEncoding方法设置请求的编码格式,该方式主要作用在get请求上!
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    //获取到用户名
    String username =request.getParameter("username") ;
    /*username = new String(username.getBytes(),"UTF-8") ;*/
    //获取到密码
    String password =request.getParameter("password") ;
    //获取到来源
    String[] sources =request.getParameterValues("source") ;
    %>
    <h1>你输入的注册信息</h1>
    <p>用户名:<%=username%>
    </p>
    <p>密码:<%=password%></p>
    信息来源:
    <%
    for(String source :sources) {
    out.print(source+ "<br/>") ;
    }
    %>
    </body>
    </html>
    
    
    
    

getRequestDispatcher(String location)

转发。在同一个服务器资源完成资源跳转。

RequestDispatcher rd =request.getRequestDispatcher("success.jsp") ;
rd.forward(request,response);
  • response
    1.sendRedirect(String location)

重定向。可以通过浏览器,重定向到某个位置(当前服务器、外部的站点资源)

2.setCharacterEncoding(String str)

设置响应的编码格式

  • session
    代表一次会话。包含以下常用方法:
    在这里插入图片描述
    • setAttribute(String key,Object value)

    • getAtrribute(String key)

      	//设置一个对象到session范围内
        		session.setAttribute("username",username);
      		session.setAttribute("shopcart","购物车");
      		//从session范围内获取到某个对象
      		session.getAttribute("shopcart") 	   	
      	```
      
    • removeAttribute(String key)

       //从session范围内,删除一个对象
        session.removeAttribute("shopcart");
      
    • invalidate()

          //将所有的session全部设置失效!
          session.invalidate();
      
    • setMaxInactiveInterval(int value)

      	//设置session最大非活动时间,单位是秒
      	session.setMaxInactiveInterval(3600);
      
    • getId
      session的id名称为JSESSIONID,该id默认情况下,是由cookie创建的。如果cookie被禁用,那么就会通过容器创建一个对应唯一性id,交给session,作为sessionid。

           <%=session.getId()%>
      

      在这里插入图片描述

  • application

    应用级范围对象。 能够实现用户的数据共享。通常情况下,用于服务器的名称、logo等基本上一成不变的情境下。
    在这里插入图片描述

    <%
    	//application的存活时间是由容器决定的。
    	//application由生命周期由使用者(维护者)决定
    //
    application.setAttribute("hello","world");
    	Integer count = (Integer)application.getAttribute("count");
    	if(count == null) {
    		count = 1 ;
    	}else{
    		count += 1 ;
    	}
    application.setAttribute("count",count)
    	;
    	out.print("您是第" + count + "个访问本网站的人。");
    %>
    
5.1 转发与重定向的区别(面试题)
  • 转发:

    • URL地址是不变的。内部资源完成一个跳转过程
    • 能够通过request实现带值跳转
    • 请求发起后,跳转到目标过程只发起一次请求
    • 请求跳转速度又有是在站内,所以速度也比较快。
  • 重定向:

    • URL地址会发生改变。由浏览器发起两次请求,第一次是请求的目标(30x),第二次会有浏览器跳转到目标页面,该过程是一个重定向的过程。
    • 不能够通过request实现带值跳转。
    • 由于两次跳转,所以速度相比较转发稍慢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值