系统架构包括C/S架构和B/S架构

2.C/S架构是什么?

C/S全称是Client/Server,也便是客户端/做事器。

jbossjsp中文乱码Java从保持到精晓Javaweb连续更新ing Python

C/S架构的软件有QQ、英雄同盟等。

特点:须要安装特定的客户端软件。

优点:速率快、体验好、界面酷炫、做事器压力小、安全等

缺陷:升级掩护比较麻烦

3.B/S架构是什么?

B/S全称是Browser/Server,也便是浏览器/做事器。

实际上B/S构造的系统还是一个C/S,只不过这个C比较分外,这个Client是一个固定不变的浏览器软件。

优点:升级掩护方便、不需安装软件即可操作

缺陷:速率慢、体验差、不屈安

4.Web做事器与运用做事器

Web做事器有:Tomcat、jetty

运用做事器:JBOSS、WebLogic、WebSphere

web做事器与运用做事器之间的差异?

运用做事器实现了JavaEE的所有规范(JavaEE有13个不同的规范)

Web做事器只实现了JavaEE钟大哥Servlet + JSP两个核心规范

5.tomcat中startup.bat的实行流程

实行startup.bat,实际上是指向实行了catalina.bat文件,catalina.bat里面又利用了JAVA_HOME,再找到MAlNCLASS=org.apache.catalina.startup.Bootstrap,也便是main方法,启动做事器。

6.前端访问路径的简写形式

正常的地址访问形式如href="http://127.0.0.1:8080/oa/login.html",可以简化掉协议、IP地址以及端口号,直接href="/oa/login.html"即可,把稳开头有个斜杠。

7.Servlet工具的生命周期

默认情形下,做事器在启动的时候,Servlet工具并不会被实例化(由于布局方法未实行)。

如果想要让Servlet工具在做事器启动时就创建,须要在web.xml中的<servlet>标签中添加<load-on-startup>子标签,中间填写整数即可,数字越小,优先级越高,如写0。

用户在发送第一次要求的时候, 先实行布局方法,然后实行init方法,且都只实行一次。
然后实行service方法,每次要求实行一次service方法。

以是,Servlet工具是单例的(单实例的,但是,Servlet工具是单实例的,Servlet类并不符合单例模式,我们称之为假单例。
之以是单例是由于Servlet工具的创建我们程序员管不着,这个工具的创建只能是Tomcat来说了算,Tomcat只创建了一个,以是导致了单例,但是属于假单例。
真单例模式,布局方法是私有化的。

做事器关闭前,destroy会被调用。

8.ServletConfig接口详解

一个Servlet工具对应一个ServletConfig工具。
(一对一关系)

ServletConfig里面包装了web.xml中<servlet>标签中的内容。

可以获取初始化参数的key和value,通过getInitParameter(String)和getInitParameterNames()方法

9.ServletContext接口详解

对付一个webapp来说,ServletContext工具只有一个。

常用方法:

public string getInitParameter(string name); //通过初始化参数的name获取valuepublic Enumeration<string> getInitParameterNames(); // 获取所有的初始化参数

// 以上两个方法是ServletContext工具的方法,获取的是如下配置在web.xml中的信息:

<context-param> <param-name>pageSize</param-name> <param-value>10</param-value></context-param><context-param> <param-name>startIndex</param-name> <param-value>0</param-value></context-param>

常用方法:

getContextPath():获取运用高下文的根路径getRealPath(String):获取文件的绝对路径,从web根目录下开始获取,可以写“/”或者不写。

ServletContext工具还有另一个名字:运用域(后面还有其他域,例如:要求域、会话域)

如果所有的用户共享一份数据,并且这个数据很少被修正且数据量很少,可以将这些数据放到ServletContext这个运用域中

10.HttpServlet的继续构造

HttpServlet继续GenericServlet,GenericServlet实现Servlet

11.Get要乞降Post要求的差异?

get要求只能携带普通的字符串,且发送的长度有限定。

post要求可以发送任何类型的数据,包括字符串、视频、声音、图片等,理论上没有限定。

get要求支持缓存,get要求的相应结果会被缓存起来。
实际上每次get要求,浏览器都先会在缓存中找,找不到才发送要求

post要求不支持缓存,缓存没故意义

如果不肯望get走缓存,可以在地址栏后面加上系统毫秒数之类的必定会变革的参数

12.HttpServlet源码解析

个中的service()方法利用了模板方法的设计模式,详细的实现延迟到子类去完成。

个中的doGet()方法和doPost()方法都是抛出了405非常(访问方法禁绝确状态码),以是如果不肯望在要求的时候抛出405非常,字类就一定要重写doGet()方法和doPost()。

13.如何设置欢迎页面(不加资源名的默认页面)

在web.xml文件中添加如下标签

<welcome-file-list> <welcome-file>login.html</welcome-file></welcome-file-list>

14.关于WEB-INF目录

把稳,放在WEB-INF目录下的资源是受保护的,在浏览器上不能直接访问,以是像html、css、js、image等静态资源一定要放到WEB-INF目录外。

15.HttpServletRequest接口详解

HttpServletRequest是一个接口,终极的实现类是RequestFacade。

16.request工具

request工具又称为“要求域”工具,在一个要求内有效。

17.要求域中怎么共享数据

可以利用转发机制来实现。
(一次要求中)

详细实当代码如下:

request.getRequestDispatcher("/b").forward(request, response);

把稳,要求转发也可以转发到静态资源页。

18.获取前真个要求体乱码问题

tomcat10版本已经设置了utf-8,但是tomcat9以及9之前的版本,未设置字符集,可以利用request.setCharacterEncoding("UTF-8");设置字符集

19.如何获取运用根路径?

可以利用request.getContextPath()。

20.资源绑定器的用法

如果我们在src下有properties资源文件,可以利用资源绑定器。
详细利用如下:

private static ResourceBundle bundle = ResourceBundle.getBundle("resources.jdbc");private static String driver = bundle.getrString("driver");

21.要求转发和重定向的差异

要求转发,不管转发了多少次,都是一次要求,浏览器地址栏的地址不变。

重定向是多次要求,浏览器的地址栏会改变。
(浏览器是自发地向做事器发送新的要求,路径上须要添加项目名),如:

response.sendRedirect(request.getContextPath() + "/b");

22.Servlet的表明式开拓

可以在servlet类上添加@WebServlet来替代原来的web.xml中的servlet方法。

23.JSP实质

访问jsp文件会天生相应的.java文件,该文件中的类继续HttpJspBase,再继续HttpServlet。

24.JSP相应乱码的问题

利用<%@page contentType="text/html;charset=UTF-8"%>办理相应乱码问题。

25.JSP基本语法

<%%>中间书写java代码,存在于service()方法中。

<%! %>这里面的代码会被翻译到service()方法外。

<%=%>如果输出内容包含java代码,可以直接写在等号后面,终极是被翻译成out.print();,且里面不能加分号,由于翻译后已经包含了分号。

26.session机制

session指的是会话,会话指的是用户打开浏览器,进行操作后,关闭浏览器,是一次会话。
会话对应做事器真个session工具。
一个会话中包含多次要求。
request.getSession()可以获取到做事器的session工具。

为什么须要session工具来保持会话状态呢?

由于HTTP协议是一种无状态协议,也便是在要求时才建立B/S的连接,要求结束后就断开连接。

为什么HTTP要设置成无状态协议,可以减少做事器与客户真个压力。

做事器不知道浏览器的关闭状态。

打开浏览器,发送要求或者打开浏览器标签,都是共享同一个会话,只有右上角的浏览器关闭才是结束会话。

request.getSession(false);如果传参false,获取不到session时,不会新建session,会返回null。

27.session的实现事理

在web做事器中有一个session列表,类似于map凑集,这个map凑集的key存储的是sessionid,value存储的是对应的session工具

用户发送第一次要求的时候:做事器会创建一个新的session工具,同时给该工具天生一个id,也便是sessionid,然后发送给浏览器,浏览器保存该sessionid到缓存中。

用户发送第二次要求的时候,会自动将浏览器缓存中的sessionid自动发送给做事器,做事器获取到sessionid,然后从session列表中找到对应的session工具。

JSESSIONID=xxx,这个因此cookie的形式保存在浏览器内存中的

28.为什么关闭浏览器,session会话会结束?

由于关闭浏览器之后,浏览器中保存的sessionid消逝了,下次重新打开浏览器之后,浏览器缓存没有对应的sessionid,就找不到做事器中的session工具。

29.session工具的销毁

session工具有两种销毁办法,一是超时自动销毁,二是用户手动销毁(安全退出的办法)。

session.invalidate();

30.Cookie禁用了,session还能找到吗?

cookie禁用:做事器正常发送JSESSIONID给浏览器,但是浏览器不要了,相称于缓存中没有sessionid。
以是会找不到做事器的session。
但是session机制还能实现吗?可以的。
须要利用URL重写机制。
在地址栏后面加上分号再加jsessionid=xxx。

31.Cookie理论根本

JSESSIONID=xxx,这样的键值对存在于cookie中,这个cookie制备保存在浏览器的“运行内存”中的,只要浏览器不关闭,用户再次发送要求的时候,会自动将运行内存中的cookie发送给做事器。

cookie的创建:Cookie cookie = new Cookie(String, String);

利用时,须要利用response.add(cookie);

32.cookie的有效韶光

设置有效韶光:cookie.setMaxAge(int);参数是秒

如果没有设置有效韶光,默认保存在浏览器的运行内存中,浏览器关闭则cookie消逝。

设置cookie的MaxAge>0时,计时生效设置cookie的MaxAge=0时,删除同名cookie设置cookie的MaxAge<0时,不会被存储到硬盘文件中,放在浏览器运行内存中,与不写是一样的,浏览器关闭则cookie失落效

33.什么情形下,cookie会被携带发送?

默认情形下:在设置cookie的时候,要求的路径的父路径以及这个父路径的子路径再次要求时,会携带这个cookie。

手动设置cookie的path:cookie.setPath("/servlet");表示只假如这个servlet项目的要求路径,都会提交cookie给做事器。

34.jsp中page指令的一些属性

<%page errorPage="/error.jsp"%>:当前页面涌现非常后,跳转到error.jsp页面

<%page isErrorPage="true"%>:表示启用JSP九大内置工具之一:exception,默认值是false

35.EL表达式

格式:${表达式}

浸染:1.从某个域中取数据2.将取出的数据转换成字符串3.将字符串输出到浏览器

36.Filter过滤器

Filter是过滤器,可以在Servlet目标程序实行之前添加代码,也可以在目标程序实行之后添加代码,之前之后都可以添加过滤规则。

一样平常情形下,过滤器中编写的都是公共代码。

filter工具中的方法解释:init():在filter工具第一次被创建后调用,并且只调用一次doFilter():只要用户发送一次要求,则实行一次。
发送N次要求实行N次。
这里实行过滤规则。
destroy():在filter工具被开释/销毁之前调用,并且只实行一次。