学习思路如下:
三、Java web编程—题目
❤3、web编程原理
1、get和post区别?
2、请谈谈转发和重定向的区别?
3、说说你对get和post请求,并且说说它们之间的区别?
4、cookie 和session 的区别?
5、forward 和redirect的区别
6、BS与CS的联系与区别。
7、如何设置请求的编码以及响应内容的类型?
8、什么是Web Service(Web服务)?
9、谈谈Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分别是做什么的?有什么区别?
10、大型网站在架构上应当考虑哪些问题?
11、请对J2EE中常用的名词进行解释(或简单描述)
答案部分:3)web编程原理
参考—https://blog.csdn.net/qq_38977097/article/details/88853266
1、get和post区别?
答:区别:
- ①get请求用来从服务器上获得资源,而post是用来向服务器提交数据;
- ②get将表单中数据按照name=value的形式,添加到action所指向的URL 后面,并且两者使用"?“连接,而各个变量之间使用”&“连接;post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL;
- ③get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据,上传文件通常要使用post方式;
- ④使用get时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post;
- ⑤get使用MIME类型application/x-www-form-urlencoded的URL编码(也叫百分号编码)文本的格式传递参数,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是”%20"。
2、请谈谈转发和重定向的区别?
答:
-
1)实现
转发:用request的getRequestDispatcher()方法得到ReuqestDispatcher对象,调用forward()方法
request.getRequestDispatcher("other.jsp").forward(request, response);
重定向:调用response的sendRedirect()方法
response.sendRedirect("other.jsp");
-
2)地址栏
转发:不变,不会显示出转向的地址
重定向:会显示转向之后的地址 -
3)请求
重定向:至少提交了两次请求 -
4)数据
转发:对request对象的信息不会丢失,因此可以在多个页面交互过程中实现请求数据的共享
重定向:request信息将丢失 -
5)原理
转发:在服务器内部控制权的转移,是由服务器区请求,客户端并不知道是怎样转移的,客户端浏览器的地址不会显示转向的地址。
重定向:是服务器告诉了客户端要转向哪个地址,客户端再自己去请求转向的地址,因此会显示转向后的地址,也可以理解浏览器至少进行了两次的访问请求。
3、说说你对get和post请求,并且说说它们之间的区别?
答:Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。
- URL全称是资源描述符,get用于获取数据,而post一般用于提交数据。
1)get参数有长度限制(受限于url长度,具体的数值取决于浏览器和服务器的限制),而post无限制。
2)GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连。
3)POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。
4)POST把提交的数据则放置在是HTTP包的包体中。
总结: Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET"。
实质上,GET和POST只是发送机制不同,并不是一个取一个发!
4、cookie 和session 的区别?
答:
- 1)cookie的存储限制了数据量,只允许4KB,而session是无限量的。
- 2)我们可以轻松访问cookie值但是我们无法轻松访问session,因此cookie它更安全。
- 3)Cookie以文本文件格式存储在浏览器中,而session存储在服务端它存储了限制数据量。
- 4)设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁session。
- 总结: 如果我们需要经常登录一个站点时,最好用cookie来保存信息,要不然每次登陆都特别麻烦,如果对于需要安全性高的站点以及控制数据的能力时需要用session效果更佳,当然我们也可以结合两者,让网站按照我们的想法进行运行。
5、forward 和redirect的区别?
答:
-
1)实现
转发:用request的getRequestDispatcher()方法得到ReuqestDispatcher对象,调用forward()方法
request.getRequestDispatcher("other.jsp").forward(request, response);
重定向:调用response的sendRedirect()方法
response.sendRedirect("other.jsp");
-
2)地址栏
转发:不变,不会显示出转向的地址
重定向:会显示转向之后的地址 -
3)请求
重定向:至少提交了两次请求 -
4)数据
转发:对request对象的信息不会丢失,因此可以在多个页面交互过程中实现请求数据的共享
重定向:request信息将丢失 -
5)原理
转发:在服务器内部控制权的转移,是由服务器区请求,客户端并不知道是怎样转移的,客户端浏览器的地址不会显示转向的地址。
重定向:是服务器告诉了客户端要转向哪个地址,客户端再自己去请求转向的地址,因此会显示转向后的地址,也可以理解浏览器至少进行了两次的访问请求。
6、BS与CS的联系与区别?
答:概念:
- 1)B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser)。 如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。
- 2)C/S是Client/Server的缩写,客户端需要安装专用的客户端软件(Client)。 服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。
7、如何设置请求的编码以及响应内容的类型?
答:
1)通过HttpServletResponse对象的setHeader(String, String)方法来设置;
2)通过请求对象(ServletRequest)的setCharacterEncoding(String)方法可以设置请求的编码;
3)通过响应对象(ServletResponse)的setContentType(String)方法可以设置响应内容的类型;
4)其实要彻底解决乱码问题就应该让页面、服务器、请求和响应、Java程序都使用统一的编码,最好的选择当然是UTF-8;
8、什么是Web Service(Web服务)?
答:
- 1、什么是Web?
简单来说,Web就是在Http协议基础之上,利用浏览器进行访问的网站。目前来看最常用的意义是指在 Intenet 上和 HTML 相关的部分。换句话说,目前在 Intenet 上通过非浏览器访问的网络资源并不称为 Web。Web page指网站内的网页。我们常说的WWW(World Wide Web 万维网)就是这个概念下的内容。
而Internet(互联网)则是一个更大的概念, Internet上不只有Web, 还有FTP, P2P,Email, 或者App等其他多种不同的互联网应用方式. Web只是其中最广泛的一种. Internet的概念要大于Web。“Web已死 Internet永生”, 意思是传统网站的重要性可能会降低,新生的互联网服务可能会取代其重要性。虽然单纯从流量上看,Web已经不是最大的互联网应用。但由于其主体是文本(或者说是超文本hypertext),流量开销本身就远小于视频等其他应用。Web可能仍是最最重要的互联网载体。 - 2、什么是Web服务器?Web服务器和应用服务器的区别是什么?
严格意义上Web服务器只负责处理HTTP协议,只能发送静态页面的内容。而JSP,ASP,PHP等动态内容需要通过CGI、FastCGI、ISAPI等接口交给其他程序去处理。这个其他程序就是应用服务器。
1)Web服务器的设计目的是提供HTTP内容,应用服务器也可以提供HTTP内容,但不限于HTTP,它还可以提供其他协议支持。
2)Web服务器主要是为提供静态内容而设计的,不过大多数Web服务器都有插件来支持脚本语言,比如Perl、PHP、ASP、JSP等,通过这些插件,这些服务器就可以生成动态的HTTP内容。
3)大多数应用服务器都将Web服务器作为其不可分割的一部分,这意味着应用服务器可以做任何Web服务器所能做的事情。此外,应用服务器有组件和特性来支持应用级服务,如连接池、对象池、事务支持、消息传递服务等。
4)由于web服务器非常适合用于提供静态内容,而应用服务器适合提供动态内容,因此大多数生产环境都有web服务器充当应用服务器的反向代理。这意味着在页面请求时,web服务器会通过提供静态内容(例如图像/静态HTML)来解释请求,并且它还会使用某种过滤技术(主要是请求资源的扩展)识别动态内容请求,并透明地转发到应用服务器。 - 非严谨的总结:前台接待(web服务器) 与真正的价值服务者(应用服务器)。
9、谈谈Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分别是做什么的?有什么区别?
答:Hibernate的对象有三种状态,分别是:瞬时态(transient)、持久态(persistent)、游离态(detached)
1)瞬时态的实例可以通过调用save()、persist()或者saveOrUpdate()方法变成持久态。
2)游离态的实例可以通过调用update()、saveOrUpdate()、lock()或者replicate()方法变成持久态。
作用:
1)save()和update()方法的区别在于前者是将瞬时态对象变成持久态,后者是将游离态对象变成持久态。
2)merge()方法可以完成save()和update()方法的功能,它的意图是将新的状态合并到已有的持久化对象上或创建新的持久化对象。
3)lock()方法和update()方法的区别,update()方法是把一个已经更改过的脱管状态的对象变成持久态,lock()方法是把一个没有更改过的脱管状态的对象变成持久态。
4)persist()方法把一个瞬时态的实例持久化,但是并不保证标识符被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时间persist()方法保证当它在一个事务外部被调用的时候并不触发一个INSERT语句。
5)saveOrUpdate()方法判断对象是否已经存在,如若不存在,则将这个瞬时态对象变成持久态,如若存在,则将这个游离态对象持久化。
6)replicate()方法同样是将游离态对象持久化,不同的是,假设你的对象的ID是用hibernate 负责生成的,但现在你想在数据库中插入一条已经指定ID的记录,这是就需要replicate()方法了。
10、大型网站在架构上应当考虑哪些问题?
答:
- 1)分层:
分层是处理任何复杂系统最常见的手段之一,将系统横向切分成若干个层面,每个层面只承担单一的职责,通过下层为上层提供的支撑和服务以及上层对下层的调用来形成一个完整的复杂的系统。
比较常见的分层模式是MVC:将软件系统分为持久层M(提供数据存储和访问服务)、业务层C(处理业务逻辑,系统中最核心的部分)和表示层V(系统交互、视图展示)。
需要指出的是:
分层是逻辑上的划分,在物理上可以位于同一设备上也可以在不同的设备上部署不同的功能模块,这样可以使用更多的计算资源来应对用户的并发访问;层与层之间应当有清晰的边界,这样分层才有意义,才更利于软件的开发和维护。 - 2)分割:
分割是对软件的纵向切分。我们可以将系统的不同功能和服务分割开,形成高内聚低耦合的功能模块(单元)。在设计初期可以做一个粗粒度的分割,将系统分割为若干个功能模块,后期还可以进一步对每个模块进行细粒度的分割,这样一方面有助于软件的开发和维护,另一方面有助于分布式的部署,提供网站的并发处理能力和功能的扩展。 - 3)分布式:
除了上面提到的内容,网站的静态资源(JavaScript、CSS、图片等)也可以采用独立分布式部署并采用独立的域名,这样可以减轻应用服务器的负载压力,也使得浏览器对资源的加载更快。数据的存取也应该是分布式的,传统的商业级关系型数据库产品基本上都支持分布式部署,而新生的NoSQL产品几乎都是分布式的。当然,网站后台的业务处理也要使用分布式技术,例如查询索引的构建、数据分析等,这些业务计算规模庞大,可以使用Hadoop以及MapReduce分布式计算框架来处理。 - 4)集群:
集群使得有更多的服务器提供相同的服务,可以更好的提供对并发的支持。 - 5)缓存:
所谓缓存就是用空间换取时间的技术,将数据尽可能放在距离计算最近的位置。使用缓存是服务器优化的第一定律。我们通常说的CDN、反向代理、热点数据都是对缓存技术的使用。 - 6)异步:
异步是实现软件实体之间解耦合的又一重要手段。异步架构是典型的生产者消费者模式,二者之间没有直接的调用关系,只要保持数据结构不变,彼此功能实现可以随意变化而不互相影响,这对系统的扩展非常有利。使用异步处理还可以提高系统可用性,加快服务器的响应速度,同时还可以起到削峰作用,应对瞬时高并)。
能推迟处理的都要推迟处理是服务器优化的第二定律,而异步是践行服务器优化第二定律的重要手段。 - 7)容灾:
各种服务器都要提供相应的容灾服务器以便在某台或某些服务器宕机时还能保证网站可以正常工作,同时也提供了灾难恢复的可能性。冗余是系统高可用性的重要保证。
11、请对J2EE中常用的名词进行解释(或简单描述)
答:
- web容器: 给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量交互,不必关注其它系统问题,主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等,该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准,我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
- EJB容器: Enterprise java bean 容器。更具有行业领域特色,他提供给运行在其中的组件EJB各种管理功能,只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理,并且可以通过现成的接口来获得系统级别的服务,例如邮件服务、事务管理。
- JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
- JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯,包括点对点和广播。
- JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务,应用程序只需调用其提供的接口即可。
- JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架,让开发者通过各种部署和自定义实现自己的个性安全控制策略。
- RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信,RMI是JAVA特有的。