melodyjerry的文章

  • MVC:开发模式

    MVC:开发模式一、jsp演变历史
    早期只有servlet,只能使用response输出标签数据,非常麻烦后来又jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码,有写html表,造成难于维护,难于分工协作再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性
    二、MVC
    M
    Model,模型。JavaBean

    完成具体的业务操作,如:查询数据库,封装对象
    V
    View,视图。JSP展示数据
    C
    Controller,控制器。Servlet

    获取用户的输入调用模型将数据交给视图进行展示
    三、优缺点优点
    耦合性低,方便维护,可以利于分工协作重用性高生命周期成本低部署快可维护性高有软件工程化管理
    缺点
    使得项目架构变得复杂,对开发人员要求高不适合小型,中等规模的应用程序增加系统结构和实现的复杂性视图与控制器间的过于紧密的连接视图对模型数据的低效率访问一般高级的界面工具或构造器不支持模式
    扩展阅读
    [CSDN] MVC模式简介
    [菜鸟教程] MVC 模式
    [百度百科] MVC框架

    <!--more-->
    0  留言 2020-03-21 15:05:36
  • BeanUtils的基本使用

    在《HTTP案例学习:用户登录》的学习中,使用到BeanUtils。
    案例中只涉及到封装username、password两个对象,但是实际上的用户登录界面,有十几个数据对象需要封装。
    按原来的方式,是非常麻烦的。期望能够一次把所有参数获取到,并且通过一个方法,一次把所有数据封装成一个对象。
    <font color='red' size='5'>BeanUtils,一个工具类,简化数据封装</font>
    这里专门挑出来,做一份简单的笔记。
    配合【教学视频】、【BeanUtils工具类常用方法】 食用更佳。
    <!--more-->


    我们将原来写的代码,
    //2.获取请求参数String username = req.getParameter("username");String password = req.getParameter("password");//3.封装user对象User loginUser = new User();loginUser.setUsername(username);loginUser.setPassword(password);使用BeanUtils工具类进行封装,
    //2.获取所有请求参数Map<String, String[]> map = req.getParameterMap();//3.创建User对象User loginUser = new User();//3-2.使用BeanUtils封装try { BeanUtils.populate(loginUser,map);} catch (IllegalAccessException e) { e.printStackTrace();} catch (InvocationTargetException e) { e.printStackTrace();}会发现只用简单几行代码就完成了封装,而不用和之前一样分别对每个数据进行封装。
    BeanUtils
    工具类,简化数据封装

    用于封装JavaBean的JavaBean:标准(简单)的Java类
    概念
    JavaBean成员变量属性:setter和getter方法截取后的产物
    例如:getUsername() —> Username—> username(大多数下,名字一样)

    JavaBean
    标准的Java类一般放在domain等package下
    功能
    <font color='red' size='5'>封装数据</font>



    要求
    类必须被public修饰
    必须提供空参的构造器
    成员变量必须使用private修饰
    提供公共setter和getter方法

    属性
    setter和getter方法截取后的产物
    例如:getUsername() —> Username—> username(大多数下,名字一样)

    调用方法
    setProperty()

    设置属性值

    getProperty()

    获取属性值

    populate(Object obj, Map map)

    将map集合的键值对信息,封装到对应的JavaBean对象中
    Demo配合 《HTTP案例学习:用户登录》 ,现在New一个BeanUtils.java
    package cn.itcast.test;import cn.itcast.domain.User;import org.apache.commons.beanutils.BeanUtils;import org.junit.Test;import java.lang.reflect.InvocationTargetException;public class BeanUtilsTest { @Test public void test(){ User user = new User(); try { BeanUtils.setProperty(user,"username","zhangsan"); System.out.println(user); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } }}控制台输出:

    扩展后来看的一篇博客 【BeanUtils工具类常用方法】,觉得写的很不错,一起记录在这里。

    相关资料【教学视频】:https://www.bilibili.com/video/av70420291?p=143
    【BeanUtils工具类常用方法】:https://blog.csdn.net/wzc1991520/article/details/80176679
    0  留言 2020-03-21 15:05:00
  • HTTP:超文本传输协议

    概念
    HTTP == Hyper Text Transfer Protocol超文本传输协议

    <font color='blue'>传输协议:定义了客户端和服务器端通信时,发送数据的格式。</font>




    特点
    基于TCP/IP的高级协议默认端口号:80基于请求/响应模型的:一次请求对应一次响应
    无状态的:每次请求之间相互独立,不能交互数据
    网页中每一个文件都是一次单独的请求,几张图片,就是几次请求。如下图所示。

    <!--more-->

    历史版本http 0.9
    只有一个命令GET没有HEADER等描述数据的信息服务器发送完毕,就关闭TCP连接每一次请求响应都会建立新的连接
    http 1.0
    增加了很多命令,如status code和header多字符集支持、多部分发送、权限、缓存等
    http 1.1
    持久连接:keep-alive复用连接(较http1.0的每一次请求响应都会建立新的连接。好处:节约了连接的资源,提升了传输的速度。)提高性能的关键是低延迟而不是高带宽。较http1.0,对缓存的支持更好

    推送:主动发送js、css推送到浏览器。
    二进制流:可以并行发送数据。

    http 2.0
    所有数据以二进制传输同一个连接里面发送多个请求不再需要按顺序来头消息压缩以及推送等提高效率的功能所有的请求共用一个连接,可以更有效的使用tcp连接,通过带宽来提升http性能可以减少服务链接的压力,内存减少了,链接吞吐量大了解决浏览器连接数有限的问题资源合并减少请求的优化手段在http2.0来说是没有效果的
    请求信息数据 格式
    Servlet类中service()方法的参数ServletRequest字符串格式,比如:
    POST /login.html HTTP/1.1Host: localhostUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateReferer: http://localhost/login.htmlConnection: keep-aliveUpgrade-Insecure-Requests: 1username=zhangsan以下关于 <font color='blue'>请求信息数据格式</font> 的内容有缺省,详细见下一篇博客 《HTTP请求信息数据 - Request》 中。
    请求行
    格式:请求方式 请求url 请求协议/版本
    请求方式
    HTTP协议有7种请求协议,常用的有GET、POST两种<font color='orange'>GET</font>



    请求参数在请求行中,在url后请求的url长度有限制的不太安全(参数跟在url之后)浏览器控制台显示👇


    <font color='orange'>POST</font>



    请求参数在请求体中请求的url长度没有限制的相对安全(参数在请求体中)浏览器控制台显示👇

    请求url
    假设为 /login.html
    请求协议/版本
    HTTP/1.1
    请求头
    客户端浏览器告诉服务器一些信息格式:请求头名称 : 请求头值若有多个,则一行一个。
    常见的请求头
    Host
    User-Agent
    Referer
    Host
    请求的主机地址
    User-Agent
    浏览器告诉服务器,我访问你时候使用的浏览器版本信息作用:可以在服务器端获取该头的信息,解决浏览器的兼容性问题
    Referer
    比如上面几张图片的Referer是 http://localhost/login.html告诉服务器,我(当前请求)从哪里来?作用:防盗链、统计工作举个例子:我的网站想播放《战狼2》电影👇

    Connection
    keep-alivehttp1.1,表示该链接可以被复用
    请求空行
    就是一个空行(空白行)作用:分割POST请求的请求头和请求体
    请求体/请求正文
    封装POST请求信息的请求参数
    <br>下一篇博客 《HTTP请求信息数据 - Request》 中,详细学习了 请求信息数据 - Request。
    响应信息数据 格式
    Servlet类中service()方法的参数ServletResponse
    字符串数据,比如:

    HTTP/1.1 200 OKContent-Type: text/html;charset=UTF-8Content-Length: 101Date: Wed, 06 Jun 2018 07:08:42 GMT<html> <head> <title>$Title$</title> </head> <body> hello , response </body></html>响应行
    格式:协议/版本 响应状态码 状态码描述
    响应状态码
    服务器告诉客户端浏览器本次请求和响应的一个状态。
    特点
    状态码都是3位数字
    分类
    1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx状态码2xx:成功。代表:
    200
    3xx:重定向。代表:
    302:重定向304:访问缓存
    4xx:客户端错误。代表:
    403:错误是一种在网站访问过程中,常见的错误提示,表示资源不可用。服务器理解客户的请求,但拒绝处理它,通常由于服务器上文件或目录的权限设置导致的WEB访问错误。 404:请求路径没有对应的资源405:请求方式没有对应的doXxx方法
    5xx:服务器端错误。代表:500(服务器内部出现异常)

    响应头
    格式:响应头名称 :值
    常见的响应头
    Content-TypeContent-disposition
    Content-Type
    服务器告诉客户端本次响应体数据格式以及编码格式
    Content-disposition
    服务器告诉客户端以什么格式打开响应体数据
    其值:
    in-line:默认值,在当前页面内打开
    attachment;filename=xxx:以附件形式打开响应体。涉及文件下载等功能。
    响应空行
    就是一个空行(空白行)作用:分割响应头和响应体
    响应体
    传输的数据文件、HTML网页源码等等。比如,
    <html> <head> <title>$Title$</title> </head> <body> hello , response </body></html><br>
    下下篇博客 《HTTP响应信息数据 - Response》 中,详细学习响应信息数据 - Response。
    0  留言 2020-03-21 15:03:30
  • JavaWeb 概述

    JavaWeb使用Java语言开发基于互联网的项目
    今后主要使用B/S架构
    软件架构C/S:Clien/Server 客服端/服务器端在用户本地有一个客户端程序,在远程有一个服务器端。如:QQ,讯雷……
    优点
    用户体验好
    缺点
    开发、安装、部署、维护,麻烦
    ★B/S:Browser/Server 浏览器/服务器端只需要一个浏览器,用户通过不同的网站(URL),客户访问不同的服务器端程序
    优点:
    开发、安装、部署、维护,简单
    缺点
    如果应用过大,用户的体验可能会受到影响对硬件要求过高(带宽要高,……)
    <!--more-->

    B/S架构详解客户端浏览器通过URL,向服务器端发送请求,请求一些资源,资源就包括“静态资源”和“动态资源”。服务器端就会响应,返回这些资源。

    B/S架构是JavaWeb开发中重要的架构


    资源分类静态资源使用静态网页开发技术发布的资源
    特点
    所有用户访问,得到的结果是一样的如:文本,图片,音频,视频,HTML,CSS,JavaScript如果用户请求的是静态资源,那么服务器会直接将静态资源发送给浏览器。浏览器中内置了静态资源的解析引擎静态资源可以直接被浏览器解析

    1.HTML,CSS,JavaScript 统称:静态网页开发技术,也称静态网页三剑客2.经过解析引擎解析后,可以在浏览器中浏览图片、文字、超链接等3.不同浏览器的解析引擎不同,最终显示的网页可能不同

    HTML用于搭建基础网页,展示页面的内容
    CSS用于美化页面,布局页面
    JavaScript控制页面的元素,让页面有一些动态的效果
    ★动态资源使用动态网页技术发布的资源

    动态资源是今后学习JavaWeb的重点之一

    特点
    所用用户访问,得到的结果可能不一样如:jsp/servlet,php,asp……如果用户请求的是动态资源,那么服务器会执行动态资源转换为静态资源,再发送给用户

    学习动态资源前,必须学习静态资源!

    网络通信三要素IP
    电子设备(计算机)在网络中的唯一标识
    端口
    应用程序在计算机中的唯一标识。值范围:0~65536
    传输协议
    规定了数据传输的规则
    基础协议:

    tcp:安全协议,三次握手。 速度稍慢。
    udp:不安全协议。 速度快。


    Web服务器软件服务器
    安装了服务器软件的计算机
    服务器软件
    接收用户的请求,处理请求,做出响应
    Web服务器软件
    接收用户的请求,处理请求,做出响应。
    在Web服务器软件中,可以部署Web项目,让用户通过浏览器来访问这些项目
    Web容器

    常见的Java相关的Web服务器软件
    WebLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
    WebSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
    JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。
    Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源的,免费的。


    JavaEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范

    三大组件
    Servlet:服务器小程序Filter:过滤器Listener:监听器

    参照 https://www.cnblogs.com/kefir/p/9426754.html
    0  留言 2020-03-21 09:58:28
eject