Web篇

1.HTTP 请求的GET 与POST 方式的区别

  1. get是从服务器上获取数据,post 是向服务器传送数据。

  2. 请求的时候参数的位置有区别:get 的参数是拼接在 url 后面,用户在浏览器地址栏可以看到;post 是放在 http 包的包体中

  3. 能提交的数据有区别,get 方式能提交的数据只能是文本,且大小不超过 1024 个字节,而 post 不仅可以提交文本还有二进制文件。 所以说想上传文件的话,那我们就需要使用 post 请求方式

  4. get 安全性非常低,post 安全性较高;比如说用户注册,不能把用户提交的注册信息用 get 的方式,会把用户的注册信息都显示在 Url 上,是不安全的。

2.解释一下什么是servlet

Servlet 是服务器端的程序,动态生成 html 页面发送到客户端,但是这样程序里会有很多 out.println(),java 与 html 语言混在一起很乱,所以后来 sun 公司推出了 JSP.其实JSP 就是Servlet,每次运行的时候 JSP 都首先被编译成 servlet 文件,然后再被编译成.class 文件运行。有了jsp,在 MVC 项目中 servlet 不再负责动态生成页面,转而去负责控制程序逻辑的作用,控制 jsp 与 javabean 之间的流转。

3.说一说Servlet 的生命周期?

Servlet 生命周期包括三部分:

  • 初始化:Web 容器加载 servlet,调用 init()方法

  • 处理请求:当请求到达时,运行其 service()方法。service()自动派遣运行与请求相对应的doXXX(doGet 或者 doPost)方法。

  • 销毁:服务结束,web 容器会调用 servlet 的 distroy()方法销毁 servlet。

4.Servlet 的基本架构

public class ServletName extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ }
    
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }
}

5.什么情况下调用doGet()和doPost()?

Jsp 页面中的 FORM 标签里的method 属性为 get 时调用 doGet(),为 post 时调用 doPost()。

6.Request 对象的主要方法:

  1. setAttribute(String name,Object):设置名字为 name 的 request 的参数值

  2. getAttribute(String name):返回由 name 指定的属性值

  3. getAttributeNames():返回 request 对象所有属性的名字集合,结果是一个枚举的实例

  4. getCookies():返回客户端的所有 Cookie 对象,结果是一个 Cookie 数组

  5. getCharacterEncoding():返回请求中的字符编码方式

  6. getContentLength():返回请求的 Body 的长度getHeader(String name):获得 HTTP 协议定义的文件头信息

  7. getHeaders(String name):返回指定名字的 request Header 的所有值,结果是一个枚举的实例

  8. getHeaderNames():返回所以 request Header 的名字,结果是一个枚举的实例9. getInputStream():返回请求的输入流,用于获得请求中的数据

  9. getMethod():获得客户端向服务器端传送数据的方法

  10. getParameter(String name):获得客户端传送给服务器端的有 name 指参数值

  11. getParametervalues(String name):获得有 name 指定的参数的所有值

  12. getRequestURI():获取发出请求字符串的客户端地址

  13. getRemoteAddr():获取客户端的 IP 地址

  14. getSession([Boolean create]):返回和请求相关 Session getServerName():获取服务器的名字

7.forward 和redirect 的区别

转发与重定向

  1. 从地址栏显示来说

​ forward 是服务器请求资源,服务器直接访问目标地址的 URL,把那个URL 的响应内容读取过来,然后把这些内容再发

给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址;

​ redirect 是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的 URL.

  1. 从数据共享来说

​ forward:转发页面和转发到的页面可以共享 request 里面的数据. redirect:不能共享数据.

  1. 从运用地方来说

​ forward:一般用于用户登陆的时候,根据角色转发到相应的模块. redirect:一般用于用户注销登陆时返回主页面和跳转

到其它的网站等.

  1. 从效率来说

​ forward:高. redirect:低

8.jsp 有哪些内置对象?作用分别是什么?

名称作用
request包含用户端请求的信息
response包含服务器传回客户端的响应信息
session与请求有关的会话期
pageContext管理网页属性
application服务器启动时创建,服务器关闭时停止,为多个应用程序保存信息
out向客户端输出数据
configservlet 的架构部件
page指网页本身
exception针对错误页面才可使用

9.JSP 的常用指令

  1. page 指令: 属性最多的指令(实际开发中 page 指令默认),属性最多的一个指令,根据不同的属性,指导整个页面特性格式:<%@ page 属性名 1= "属性值 1" 属性名 2= "属性值 2" ...%>

​ 常用属性如下:

​ language:jsp 脚本中可以嵌入的语言种类,这个没用,写与不写一样的; pageEncoding:当前 jsp 文件的本身编码---内部可以包含 contentType contentType:response.setContentType(text/html;charset=UTF-8) import:导入java 的包errorPage:当前页面出错后跳转到哪个页面isErrorPage:当前页面是一个处理错误的页面

  1. include 指令: 页面包含(静态包含)指令,可以将一个jsp 页面包含到另一个jsp 页面中格式:<%@ include file="被包含的文件地址"%>

  2. taglib 指令: 在 jsp 页面中引入标签库(jstl 标签库、struts2 标签库) 格式:<%@ taglib uri="标签库地址" prefix=" 前缀"%>

10.JSP 中动态INCLUDE 与静态 INCLUDE 的区别?

动态 INCLUDE 用 jsp:include 动作实现, <jsp:include page="included.jsp" flush="true"/>它总是会检查所含文件中的变化, 适合用于包含动态页面,并且可以带参数静态 INCLUDE 用 include 伪码实现,不会检查所含文件的变化,适用于包含静态页面 <%@ include file="included.html" %>

11.四种会话跟踪技术作用域

  1. page:一个页面

  2. request::一次请求

  3. session:一次会话

  4. application:服务器从启动到停止

12.MVC 的各个部分都有那些技术来实现?如何实现?

MVC 是 Model-View-Controller 的简写。

Model 代表的是应用的业务逻辑(通过 JavaBean,EJB 组件实现) View 是应用的表示面(由 JSP 页面产生)Controller 是提供应用的处理过程控制(一般是一个 Servlet)

通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现,这些组件可以进行交互和重用。

13.web.xml 文件中可以配置哪些内容?

web.xml 用于配置 Web 应用的相关信息,如:监听器(listener)、过滤器(filter)、 Servlet、相关参数、会话超时时

间、安全验证方式、错误页面.

14.session 和cookie 有什么区别?

  1. cookie 数据存放在客户的浏览器上,session 数据放在服务器上。

  2. cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗,考虑到安全应当使用 session。

  3. session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当

使用COOKIE。

  1. 单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。

15.BS 与CS 的联系与区别

​ C/S 是 Client/Server 的缩写。服务器通常采用高性能的 PC、工作站或小型机,并采用大型数据库系统,如 SQLServer、MySQL、Oracle 等,客户端需要安装专用的客户端软件。

​ B/S是 Brower/Server 的缩写,客户机上只要安装一个浏览器(Browser),如 Google 浏览器或 Internet Explorer,服务器安装 Oracle、MySQL 或 SQL Server 等数据库。在这种结构下,用户界面完全通过 WWW 浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。

C/S 与 B/S 区别

  1. 硬件环境不同:

C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务. B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比 C/S 更强的适应范围, 一般只要有操作系统和浏览器就行

  1. 对安全要求不同

C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用 C/S 结构适宜. 可以通过 B/S 发

布部分可公开信息. B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。

  1. 对程序架构不同

C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑. B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比 C/S 有更高的要求 ,B/S 结构的程序架构是发展的趋势。

  1. 软件重用不同

C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在 B/S 要求下的构件的重用性好. B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就如买来的餐桌可以再利用,而不是做在墙上的石头桌子

  1. 系统维护不同

C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级.

  1. 处理问题不同

C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统B/S 建立在广域网上,

面向不同的用户群, 分散地域, 这是 C/S 无法作到的. 与操作系统平台关系最小.

  1. 用户接口不同

C/S 多是建立的 Window 平台上,表现方法有限,对程序员普遍要求较高B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本.

  1. 信息流不同23

C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低, B/S 信息流向可变化, B-B B-C 等信息、流向的变化, 更像交易中心。

16.拦截器与过滤器的区别

拦截器是基于 java 的反射机制的,而过滤器是基于函数回调。拦截器不依赖与 servlet 容器,过滤器依赖与 servlet 容器。

拦截器只能对 action 请求起作用,而过滤器则可以对几乎所有的请求起作用。拦截器可以访问 action 上下文、值栈里的对象,而过滤器不能访问。

在 action 的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次, 拦截器可以获取 IOC 容器中的各个 bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。