JavaWeb知识点

JavaWeb知识点

1、Get和Post方法的区别

  • Get方法主要用于获取服务器资源,而Post方法除了能获取资源外,还可以向服务器上传数据。
  • Get方法会把请求的数据附在URL后面,而Post不会
  • Get方法传输小数据,而Post方法主要用来传递大数据或比较隐私的数据,因此Post方法的安全性高一点

2、Servlet处理访问请求的流程

Servlet是一种实现了javax.servlet.Servlet接口的类。编写Servlet时直接继承HttpServlet,并覆盖doGet()与doPost()方法即可。
  • Web服务器接受到用户请求后,会把请求交给相应的容器来处理,此时容器会创建两个对象:HttpServletResponse和HttpServletRequest。
  • 容器根据URL信息找到对应的Servlet,然后会创建一个线程,把创建的两个对象以参数的形式传递到新建的线程中
  • 容器调用Servlet的service()方法来完成对用户请求的响应,service()方法会调用doGet或doPost方法来完成具体的响应任务,同时把生成的动态页面返回给容器
  • 容器把响应信息组装成HTTP格式返回给客户端,同时线程结束,删除创建的两个对象:HttpServletResponse和HttpServletRequest
Servlet不足:Servlet生成网页的方法是在java类中嵌入HTML标签和表达式,开发麻烦,可读性差,由于业务逻辑与视图没有分离,系统的可扩展性和维护性都很差。

3、Servlet的生命周期

Servlet的生命周期由容器来控制,它只有两个状态:未创建状态与初始化状态。


Servlet生命周期:init()、service()、destroy()。在生命周期中,init()和destroy()只被服务器执行一次, 而service()在每次客户端请求Servlet时都会被执行,或doGet()或doPost()。

4、Servlet和CGI(通用网关接口)的区别

Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁。 而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet。 

5、Servlet中forward和redirect区别

forward(可定向同一个服务器的资源): 服务器内部的重定向,服务器直接访问目标地址的URL,把那个URL响应的内容返回给客户端。而客户端并不知道该过程,因此地址栏中不会显示转向后的地址,还是原来的地址。整个定向过程 使用同一个Request,因此定向的JSP或Servlet可以使用该Request的信息。
redirect(可定向其他服务器的资源)客户端的重定向,客户端会获取到重定向的地址,然后重新发送请求,因此地址栏会显示跳转后的地址。由于多一次请求,其效率低于forword方式。

6、Servlet是否线程安全

Servlet本身是多线程的,但不是线程安全的,多线程并发的读写会导致数据不同步的问题。三种解决方案:
  • 实现 SingleThreadModel 接口,在这个Servlet中的service方法将不会有两个线程被同时执行
  • 使用synchronized 关键字, 能保证一次只有一个线程可以访问被保护的区段
  • 避免使用实例变量,只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的

7、JSP技术

JSP是一种特殊的Servlet,所有Servlet能完成的事情,JSP都能完成,在实际中,常用Servlet来处理业务逻辑,采用JSP来生成动态网页。
JSP与Servlet区别:
  • 最大区别:Servlet以Java程序为主,Java中内嵌HTML;而JSP则以HTML页面为主,HTML中内嵌Java
  • 工作方式不同:Servlet先编译后部署,即先编译成class文件后部署到服务器下;而JSP则是先部署后编译,JSP会在首次请求时编译成class类,以后访问时用该类响应请求。
JSP与HTML区别:
  • HTML超文本标记语言,是静态页面,和JavaScript一样解释性语言,只要有浏览器就可以正常显示,而不需要指定的编译工具。
  • JSP是是动态页面,我们都知道,JVM执行的是Java文件编译后的class文件,而JSP要先转译成一个Servlet文件,然后在编译成class文件。

8、MVC模型

MVC的处理过程:对于用户的请求,先被控制器接收,并决定由哪个模型来处理,然后模型通过业务逻辑层处理用户的请求并返回数据,最后控制器用相应的视图模型来显示这些数据。
MVC优点:
  • 低耦合性
  • 高重用性和可适用性
  • 低开发周期
  • 部署快速
  • 易于维护

9、JSP的内置对象有哪些

  • request:客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求, 然后做出响应。它是HttpServletRequest类的实例。
  • response:表示服务端对客户端的响应,将服务器处理后的结果返回给客户端,它是HttpServletResponse类的实例。
  • pageContext:提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者。
  • session:session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例。
  • application:代表JSP所属的Web应用本身,application对象可存放全局变量,以实现用户间的数据共享。它的生命周期和服务器的生命一致,它是ServletContext类的实例。
  • out:用于输出信息,它是JspWriter的实例
  • config:主要作用是取得服务器的配置信息,当Servlet初始化时,容器把某些信息通过config对象传递给这个Servlet,Servlet可使用该对象获取所需配置信息。
  • page:表示当前JSP页面
  • exception:表示异常,当运行过程发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他是Java.lang.Throwable的对象

10、JSP指令有哪些

JSP指令用来设置整个JSP页面相关属性,如网页编码方式和脚本语言等,JSP指令的多个属性可以写在一个指令里,也可以写在多个指令里,每个属性只能出现一次,import例外。
  • page指令:指明网页依赖属性,语法格式:<%@ page attribute="value" %>
  • include指令:实现JSP页面的区块化,语法格式:<%@ include file="文件相对 url 地址" %>
  • Taglib指令:引入标签库,语法格式:<%@ taglib uri="uri" prefix="前缀名" %>

11、JSP行为(动作)有哪些

  • jsp:include:在页面被请求时插入一个文件,语法格式:<jsp:include page="相对 URL 地址" flush="true" />
  • jsp:useBean:用于加载一个将在JSP页面中使用的JavaBean,在类加载后,可以通过 jsp:setProperty jsp:getProperty动作来修改和检索bean的属性。语法格式:<jsp:useBean id="name" class="package.class" />
  • jsp:forward:把请求转到另外的页面,只有page属性,语法格式:<jsp:forward page="相对 URL 地址" />
  • jsp:plugin:用来根据浏览器的类型,插入通过Java插件 运行Java Applet所必需的OBJECT或EMBED元素。

12、include指令与include动作的区别

include指令(在编译时包含,包含的是源代码):所包含的文件内容是在编译时插入到JSP文件中的,当文件内容有变化时就需要重新编译,因此适用于包含静态页面
include动作(在运行时包含,包含的是运行结果):在主页面被请求时,才将包含的页面输出包含进来,适用于包含动态页面

13、会话跟踪技术有哪些

HTTP是无状态协议,无状态是指同一个会话的连续两个请求互相不了解,当浏览器发送请求给服务器的时候,服务器响应,但是同一个浏览器再次发送请求时,服务器同样会响应,但是它不知道你就是刚才那个浏览器,每一次请求和响应都是相对独立的。客户端与服务端的交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品,因此就有了会话跟踪技术。
  • Cookie:通过客户端保持状态的解决方案。Cookie是由服务器发给客户端的特殊信息,并存放在客户端浏览器上,然后客户端每次请求都会附上这些特殊的信息,服务器检查该Cookie,以此来辨认用户状态。
  • Session:通过服务器端保持状态的解决方案。浏览器访问服务器时,服务器把客户端信息存放在服务器,这就是Session,客户端每次访问都需要从该Session中确认该客户的状态,服务器维护并更新该Session。
  • URL重写:是客户端不支持Cookie的解决方案。原理是将用户Session的id信息重写到URL地址中,服务器解析URL并获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。
  • 隐藏表单域:非常适合不需要大量数据储存的会话应用

14、Cookie与Session的区别

  • Cookie机制采用客户端保持状态的解决方案,即数据存放在客户端浏览器上;Session机制采用服务器端保持状态的解决方案,即数据存放在服务器上。
  • Session比Cookie的安全性高。敏感信息存放在浏览器上会有安全问题,最好是将Cookie信息加密,提交到服务器后再解密,而Session不存在该问题。
  • cookie性能更高一些。每个用户都会产生一个Session存放在服务器上,访问量增大时会降低服务器性能;而Cookie不占用服务器资源。
  • Cookie信息可永久保存在浏览器上,而保存在服务器的Session信息过了超时时间或关闭浏览器后就会失效。

15、什么是Ajax技术

Ajax是一个结合了Java技术、XML以及JavaScript的编程技术,其主要目的是在不刷新页面的情况下实现页面的局部刷新,通过与服务器进行少量数据的交互来提高页面的交互性,减少响应的时间,从而改善用户的体验。
Ajax是客户端技术,其 核心是JavaScript对象XmlHttpRequest,该对象是一种支持异步请求的技术,它使得开发人员可以使用JavaScript向服务器提出请求并处理响应,而并不阻塞用户。

16、过滤器Filter

Filter用于在Servlet之外对request和response进行修改。Filter提出滤镜链的概念,一个FilterChain包括多个Filter。客户端请求request在抵达Servlet之前会经过FilterChain里的所有Filter, 服务器响应response在从Servlet抵达客户端浏览器之前也会经过FilterChain里的所有Filter。
Filter实现案例
  • 字符串编码Filter
  • 权限验证Filter
  • 异常捕捉Filter
  • 内容替换Filter
  • 图像水印Filter

17、监听器Listener

Listener用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。

18、拦截器(Intercepter)与Filter的区别

相同点:两者都是AOP编程思想的体现,都能实现权限检查、日志记录等
不同点
  • 范围不同:Filter是Servlet规定的,只能用于web程序中。而拦截器还能用于application、swing程序中
  • 规范不同:Filter是Servlet规范定义的,是Servlet容器支持的。而拦截器是在Spring容器里的,是Spring框架支持的。
  • 拦截器是Spring的一个组件,归Spring管理,配置在Spring文件中,因此能使用Spring中的各种资源,对象,通过IoC注入即可;而Filter不能
  • 深度不同:Filter只能在Servlet前后起作用。而拦截器能够深入到方法前后、异常抛出前后等。拦截器具有更大的弹性

19、Struts1.x工作流程

  • 客户端发送请求,被控制器ActionServlet捕获
  • ActionServlet根据struts-config.xml配置文件里的映射关系找到对应的Action和ActionForm
  • 将提交的表单信息封装成ActionForm对象,并反射调用Action的executr()方法,执行业务逻辑程序
  • 执行完后,通过返回一个ActionForward对象跳转到对应的JSP页面

20、Struts2.x工作流程

  • 客户端发送请求,被控制器FilterDispatcher捕获
  • FilterDispatcher根据struts.xml配置文件找到对应的Action类,并通过IoC方式将表单信息注入到该Action类的属性值
  • Action调用相应的方法执行业务逻辑任务
  • Action执行完后返回result字符串,根据配置文件找到相应的跳转页面,并返回给客户端

21、Struts1.x与Struts2.x的线程安全

  • Struts1.x的Action是非线程安全的,Struts 1.x在第一次请求某个Action时,会创建一个Action实例,而该Action实例会被反复使用,因此开发时尽量不要使用实例变量。
  • Struts2.x的Action是线程安全的,每次请求都会生成一个Action实例,这些实例彼此独立,处理完后立即销毁。

22、Spring

Spring以IoC、AOP为主要思想,它能将Struts、Hibernate等众多框架部署到Spring中,统一维护管理它们,因此Spring也被称为轻量级的“容器”。
  • IoC(反向控制):IoC是对传统控制流程的一种颠覆,在程序中既没有实例化对象,也没有设置依赖关系,而是交给Spring,由Spring根据配置文件加载配置文件中的Java Bean,并通过Java的反射机制调用setter、getter方法注入依赖的对象。
  • AOP(面向切面编程):AOP使得在执行业务前后可以执行另外的程序,Filter和拦截器就是AOP的实现

23、SpringMVC工作流程


  • 用户请求被Spring前端控制器DispatcherServlet捕获
  • DispatcherServlet对请求URL进行解析,得到请求URI(资源标识符),然后根据该URI以及HandlerMapping(处理器映射器)的配置找到处理该请求的Handler(处理器)
  • DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter(处理器适配器)(如果成功获得将执行拦截器任务,否则可忽略该过程)
  • Handler执行完业务逻辑后,向DispatcherServlet返回一个ModelAndView对象
  • DispatcherServlet请求ViewReaolver(视图解析器)来解析该ModelAndView对象,得到View视图,最后把渲染结果返回给客户端

24、SpringMVC的Controller是线程安全吗

不是,Spring根据IoC来实例化对象,所生成的对象默认是单例的(如Controller、Dao、Service),所以定义成员变量会有线程安全问题。如果一定要定义的话,有如下解决方法:
  • 在Controller中使用ThreadLocal变量
  • 在Controller类上声明 @Scope("prototype"),每次都创建新的controller

25、Struts2与SpringMVC比较

  • SpringMVC的入口是Servlet,而Struts2是Filter
  • SpringMVC 稍微比 Struts2 快,SpringMVC是基于方法设计,而 Sturts2是基于类,每次发一次请求都会实例一个Action
  • SpringMVC使用更加简洁,开发效率高,支持JSR303(数据校验),处理Ajax的请求更方便
  • Struts2 的 OGNL 表达式使页面的开发效率相比 Spring MVC 更高些.  

26、可持久化对象的状态

可持久化对象就是可以保存进数据库的对象,可持久化对象有以下几种状态(Session代表用户的一次数据库操作)
  • 临时状态(Transient):对象在保存进数据库之前为临时状态。如果没有被持久化,程序退出时临时的对象信息将会丢失。
  • 持久化状态(Persistent):对象保存进数据库后,并且没有脱离Session的为持久化状态。持久化状态的对象可以执行任何有关数据库的操作。
  • 分离状态(Detached):分离状态是对象曾处于持久化状态,但现在已经离开Session,此时不能执行数据库的操作。

27、JDBC、Hibernate与Mybatis对比

  • 从层次上看,JDBC是较底层的持久层操作方式,而Hibernate和MyBatis都是在JDBC的基础上进行了封装使其更加方便程序员对持久层的操作。
  • 从功能上看,JDBC就是简单的建立数据库连接,然后操作Connection对象、Statement对象和ResultSet对象去拿到数据;Hibernate是将数据库中的数据表映射为持久层的Java对象,实现数据表的完整性控制;MyBatis是将sql语句中的输入参数和输出参数映射为java对象,放弃了对数据表的完整性控制,但是获得了更灵活和响应性能更快的优势。
  • 从使用上看,如果进行底层编程,而且对性能要求极高的话,应该采用JDBC的方式;如果要对数据库进行完整性控制,实现简单的增删改查,建议使用Hibernate;如果要灵活使用sql语句,需要较多复杂的查询语句,建议采用MyBatis。
  • 从掌握程度来说,Hibernate要精通门槛更高,而且设计O/R映射难,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。Mybatis框架相对简单很容易上手。

28、Sql中delete与truncate的区别

  • delete:可选择性地删除数据,当删除整张表的数据时效率较低
  • truncate:只能删除整张表的数据,但效率高于使用delete语句,当truncate执行删除之后,自动生成的主键值重新从默认值开始。

29、XML的java解析有几种方式?

Dom解析、Sax解析、Dom4J解析、JDOM解析
下面比较官方提供的两种:

DOM解析适合于对文件进行修改和随机存取的操作,但是不适合于大型文件的操作;
SAX采用部分读取的方式,所以可以处理大型文件,而且只需要从文件中读取特定内容,SAX解析可以由用户自己建立自己的对象模型。

30、什么是事务?事务有那些特点?

事务:单个逻辑单元执行的一系列操作,要么全部执行,要么全部不执行。
  • 原子性(Atomicity):事务中各元素不可分割,要么执行所有操作,要么撤销所有操作
  • 一致性(Consistency):事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。比如,当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统在运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。
  • 隔离性(Isolation):事务是相对独立的,对某数据进行修改时,其他事务不变
  • 持久性(Durability):事务完成后对系统的影响是永久性的。

31、JSP由哪些内容组成?

  • 指令:<%@ %>
  • 脚本:<% %>
  • 表达式:<%=%>
  • 声明:<%! %>
  • 注释:<% -- %>
  • 动作:<jsp:动作名称 属性=””>
  • 静态内容:html内容

32、计算机网络有几层

  • 应用层
  • 表示层
  • 会话层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

33、TCP与UDP区别

  • TCP是面向连接的,发送数据前必须建立可靠的连接;而UDP是无连接的,不需要建立连接
  • TCP传输可靠,能保证数据正确性;而UDP是不可靠的,传输时可能丢包
  • TCP用于传输大量数据(流模式);UDP用于少量数据(数据包模式)
  • UDP比TCP快

34、创建Socket通信的步骤


35、JSP、Servlet中通信作用域有那些?

  • PageContext
  • Request
  • Session
  • Application

36、URL与URI,URL由哪些部分组成

URI:统一资源标识符;URL:统一资源定位符
 http://localhost:8080/myWeb/index.html:协议+主机地址+端口+项目名称+资源名称

37、HTTP状态码

  • 1**:信息,服务器收到请求,需要请求者继续执行操作
  • 2**:成功,操作被成功接收并处理,如200-请求成功
  • 3**:重定向,需要进一步的操作以完成请求,如301-资源被移到其他URL
  • 4**:客户端错误,如404-请求资源不存在
  • 5**:服务端错误,如500-内部服务器错误

38、使用sql写出一个分页程序?

Select top 3 * from tb_name where id not in (select top 3 id from tb_name)

39、什么是Web Service(Web服务)

WebService是一种跨编程语言和跨操作系统平台的远程调用技术。例如可以创建一个提供天气预报的Web Service,那么无论你用哪种编程语言开发的应用都可以通过调用它的API并传入城市信息来获得该城市的天气预报。

40、TCP三次握手

请求---应答---再次确认
  • 一次握手:建立连接时,客户端发送SYN包到服务端,并进入SYN_SEND状态,等待服务端确认
  • 二次握手:服务端收到SYN包后,必须确认客户的SYN包,同时自己也发送一个SYN包(即SYN+ACK包),此时服务端进入SYN_RECV状态
  • 三次握手:客户端收到服务端的SYN+ACK包,向服务端发送确认包ACK(ack=k+1),到此客户端和服务端进入建立连接状态

41、TCP四次撒手

  • 客户端向服务端发送一个FIN报文,告诉服务端我没有数据要发给你了
  • 服务端收到这个FIN报文后发回一个ACK,告诉客户端已收到请求,但我目前还没准备好,请等待我的回复信息,此时客户端进入FIN_WAIT状态
  • 服务端确定数据已传输完成后,向客户端发送一个FIN报文。告诉客户端我已准备好关闭连接
  • 客户端收到FIN报文后返回一个ACK(此时客户端进入TIME_WAIT状态,如果服务端没有收到ACK则可以重发),告诉服务器你可以关了,于是服务器就关闭了,客户端等待30s后没有收到回复也关闭了


  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值