当前位置:   article > 正文

java web开发学习总结_javaweb课程总结

javaweb课程总结

解决中文乱码问题

 中文乱码问题可以分为请求参数乱码问题和输出乱码问题。

请求参数乱码
  • 请求参数乱码:requset.setCharacterEncoding("utf-8");

  值得一提的是,这种解决乱码的方式只对POST方法有效,而对GET方式无效(如果你使用的Tomcat版本在8.0以上的话,GET方式默认就是utf-8编码,不需要对GET方法进行处理,这也是在经历一个项目之后深深记住的一点),如果使用了GET方法,就需要在对某一字符串赋值的时候重新编码,就比如输出 str,让str执行以下的语句:

     str = new String(str.getBytes("iso8859-1"),"utf-8");

  使用错误表iso8859-1对str编码,然后使用utf-8重新解码并赋值。

 当然,我们也可以去配置Tomcat文件来解决GET方法的乱码,但是由于配置Tomcat 中的文件比较麻烦,所以不建议使用这种方法,这里也不做介绍。不过,当你使用8.0以上版本的Tomcat的时候,就不需要关注GET方法造成的乱码问题了。

 如果你还遇到了其他的乱码问题,点击 这里 去看看有没有解决方法吧!

输出乱码
  • 输出乱码:response.setContentType("text/html;charset=utf-8");
  • 输出乱码也可以用下面两句来处理:
response.setCharacterEncoding("utf-8");    //使用utf-8编码
response.setHeader("Content-Type","text/html;charset=utf-8");  //通知浏览器用utf-8解码
  • 1
  • 2
  • 为了使代码更加简洁,处理输出乱码我们通常使用第一种方法,因为它包含了第二种方法的两个功能。

jsp的运行原理

 JSP的工作模式是请求/响应模式,客户端首先发出HTTP请求,JSP程序收到请求后进行处理并返回处理结果。在一个JSP文件第一次被请求时,JSP引擎(容器)把该JSP文件转换成为一个Servlet,而这个引擎本身也是一个Servlet。JSP的运行过程如下图:
在这里插入图片描述
在图中我们能看出JSP的运行过程具体如下:

  1. 客户端发送请求到JSP容器中,请求访问JSP文件。
  2. JSP容器将JSP文件转化成为一个Java源文件,在转换过程中如果发现有语法错误,就停止转换并向服务端和客户端返回出错信息。
  3. 如果转换成功,JSP容器将生成的Java源文件编译成相应的字节码文件.class。这个class文件就是一个Servlet,Servlet容器会处理它。
  4. 由Servlet容器加载转换后的Servlet类(.class文件),创建一个该Servlet(JSP页面的转换结果)实例,并执行Servlet的jspInit()方法。而jspInit()方法在Servlet的整个生命周期中只执行一次。
  5. 执行JSPService()方法来处理客户端的请求,对于每一个请求都有,JSP容器都会创建一个新的线程来处理它。如果多个客户端同时请求该JSP文件,那么JSP容器也会创建多个线程,让每一个客户端的请求都对应一个线程,从而极大地降低对系统资源的需求,提高系统的并发量并缩短响应时间。因为(4)中产生的Servlet是常驻内存的,所以响应速度会非常快。


 如果你尝试用服务器搭载过自己的网页,那么在检查响应速度的时候会深有体会,并且会制定出一系列优化方案从而适应高并发的请求(例如我们在疫情期间看到的支付宝实时疫情,说的是实时疫情,但是如果咬文嚼字来说并不是每一秒都在更新的,当时我在看的时候应该是隔了几分钟更新一次)。

GET请求和POST请求的区别

  GET请求和POST请求是HTTP协议规范中的请求方式。

  1. POST请求更慢(POST请求包含更多的请求头)
  2. POST请求发送的数据量更大(GET请求有url长度限制)
  3. POST请求更安全 (POST请求不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
  4. POST请求能发送更多的数据类型(GET请求只能发送ASCII码)
  • 下面我们来看一下为什么GET请求要更快一点:

post请求的过程:
  1.浏览器请求tcp连接(第一次握手)
  2.服务器答应进行tcp连接(第二次握手)
  3.浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
  4.服务器返回100 continue响应
  5.浏览器开始发送数据
  6.服务器返回200 ok响应
 
  get请求的过程
  1.浏览器请求tcp连接(第一次握手)
  2.服务器答应进行tcp连接(第二次握手)
  3.浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
  4.服务器返回200 ok响应
  也就是说,目测get的总耗是post的2/3左右
  
  此处参考:https://www.cnblogs.com/ljx20180807/p/10412427.html

静态包含和动态包含

静态包含

<%@ include file="include.jsp" %>

 在静态包含中,include指令只有一个file属性,很显然它的值是文件的路径。需要注意的是,插入的文件路径一般不用 “/”开头,而是使用相对路径。
 如果file的属性值用“/”开头,那么表示相对于当前WEB应用程序的根目录 (而不是站点根目录)。否则表示的相对于当前文件。file的相对路径是相对文件(file)而不是相对页面(page)。

动态包含

<jsp:inculde page ="include.jsp" flush ="true" />
 page属性指定的也是被引用资源的相对路径。

两者的区别
  1. 动态包含引入的资源和当前JSP页面是两个彼此独立的执行实体,即被动态引入的资源必须能够被Web容器独立执行。静态包含只能引入遵循JSP格式的文件,引入的文件和当前的JSP文件共同合并之后才被翻译成一个Servlet源文件。
  2. 动态包含引入资源是运行时才包含,静态包含引入资源在编译期包含。
  3. 动态包含只包含结果,静态包含包含源代码。
  4. 动态包含包含的页面不能改变响应状态码或设置响应头,静态包含没有限制。

Cookie和Session的工作原理

 打开浏览器,清理你的浏览记录(www.为什么清理你应该清楚吧.com ),这个时候会发现默认的Cookies选项是不选的,拿QQ浏览器为例,有没有疑惑为什么只有Cookies而没有Seesion呢。
在这里插入图片描述

Cookie的工作原理
  1. 浏览器向服务器发送请求,服务器需要创建cookie,服务器会通过响应携带cookie,在产生响应时会产生Set-Cookie响应头,从而将cookie信息传递给了浏览器。
  2. 当浏览器再次向服务器发送请求时,会产生cookie请求头,将之前服务器的cookie信息再次发送给了服务器,然后服务器根据cookie信息跟踪客户端状态。

 参考:Cookie的工作原理和应用详解

 可以删除Cookies,是因为浏览器可以将Cookie写入到本地磁盘。

Session的工作原理

 Session保存的位置是在服务器端。

  1. 用户第一次请求服务器时,服务器端会生成一个sessionId。
  2. 服务器端将生成的sessionId返回给客户端,通过set-cookie。
  3. 客户端收到sessionId会将它保存在cookie中,当客户端再次访问服务端时会带上这个sessionId。
  4. 当服务端再次接收到来自客户端的请求时,会先去检查是否存在sessionid,不存在就新建一个sessionId重复1,2的流程,如果存在就去遍历服务端的session文件,找到与这个sessionId相对应的文件,文件中的键值便是sessionId,值为当前用户的一些信息。
  5. 此后的请求都会交换这个 Session ID,进行有状态的会话。

参考:Session的工作原理

MVC工作原理

MVC 全名是 Model View Controller

MVC 组成部分
  • 视图:显示模型中数据,并提供与用户的交互。
  • 控制器:从视图中读取数据,接受用户操作,并向模型发送数据。
  • 模型:封装程序内部的数据状态,封装业务处理方法,Controller改变通知视图。

控制器接受到用户的请求之后,会根据请求信息调用模型组件的业务方法,处理完毕业务方法后,根据模型返回结果选择相应的视图组件显示处理结果和模型中的数据


简答内容

HTTP协议的特点
  1. 支持客户端(浏览器就是一种Web客户端)/服务器模式。
  2. 简单快速:客户端向服务器请求服务时,只需传送请求方式和路径。常用的请求方式有GET、POST等,每种方式规定了客户端与服务器联系的类型不同。由于HTTP简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  3. 灵活:HTTP允许传输任意类型的数据,正在传输的数据类型由Content-Type加以标记。
  4. 无状态:HTTP是无状态协议。无状态是指协议对于事务处理没有记忆能力,如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大
什么是缺省Servlet,以及缺省Servlet的作用
  • 如果某个Servlet的映射路径仅仅是一个正斜线(/),那么这个Servlet就是当前Web应用的缺省Servlet。
  • 缺省Servlet的作用:Servlet服务器在接收到访问请求时,如果在web.xml文件中找不到匹配的元素的URL,就会将访问请求交给缺省Servlet处理,也就是说,缺省Servlet用于处理其他Servlet都不处理的访问请求。
JavaBean规范
  1. 它必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的缺省构造方法。
  2. 它提供公共的setter方法和getter方法让外部程序设置和获取JavaBean的属性。
  3. 它是一个公有类。
  4. 通常可以实现java.io.Serializable接口用于序列化。
pageContext对象的作用
  1. 用于得到其它8个隐式对象;
  2. 默认直接操作page域中的数据;
  3. 可以用它操作其它三个域对象(request,session.application)中的数据;
  4. 提供的findAttribute也是后续要学习的EL表达式的实现原理。
转发与重定向的异同
  1. 请求转发和重定向都可以实现访问一个资源时转向当前应用资源
  2. 请求转发是一次请求一次响应,而重定向为两次请求两次响应
  3. 一般情况下应该使用请求转发,减少浏览器对服务器的访问,减轻服务器压力
  4. 如果需要改变浏览器的地址栏,或更改浏览器的刷新按钮的功能时需要使用重定向
简述Servlet事件监听器的作用
  1. 监听Web应用程序中ServletContext、HttpSession和ServletRequest等域对象的创建和销毁过程。
  2. 监听ServletContext、HttpSession和ServletRequest等域对象属性的修改。
  3. 感知绑定到HttpSession域中某个对象的状态。
JDBC编程的6个开发步骤
  1. 加载并注册数据库驱动
  2. 通过DriverManager获取数据库连接
  3. 通过Connection对象获取Statement对象
  4. 使用Statement执行SQL语句
  5. 操作ResultSet结果集
  6. 回收数据库资源
数据库连接池的优点
  1. 允许应用程序重复使用现有的数据库连接,而不是重新建立。
  2. 当连接完毕后,连接池会将该连接回收,并交付其他的线程使用。
  3. 减少创建和断开数据库连接的次数,提高数据库的访问效率。
什么是JSP Model2

 JSP Model2架构模型采用JSP+Servlet+ JavaBean的技术,此技术将原本JSP页面中的流程控制代码提取出来,封装到Servlet中,从而实现了整个程序页面显示、流程控制和业务逻辑的分离。实际上JSP Model2模型就是MVC(模型Model-视图View-控制器Controller)设计模式,其中控制器的角色是由Servlet实现,视图的角色是由JSP页面实现,模型的角色是由JavaBean实现。

文件上传时必须具备的两个前提条件
  • 必须要设置input输入项的name属性,否则浏览器将不会发送上传文件的数据。
  • 必须把将表单页面的method属性设置为post方式,enctype属性设置为“multipart/form-data”类型。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/191607
推荐阅读
相关标签
  

闽ICP备14008679号