Web后台

目录

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

2、解释一下什么是 servlet

3、说一说 Servlet 的生命周期

4、Servlet 的基本架构

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

6、Request 对象的主要方法

7、forward 和 redirect 的区别

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

9、JSP 的常用指令

10、JSP 中动态 INCLUDE 与静态 INCLUDE 的区别

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

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

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

14、session 和 cookie 有什么区别

15、Java 反射技术主要实现类有哪些,作用分别是什么

16、讲一下什么是 Spring

17、Spring 的 IOC 和 AOP 机制

18、Spring 中 Autowired 和 Resource 关键字的区别

19、依赖注入的方式有几种,各是什么

20、解释一下 spring bean 的生命周期

21、解释 Spring 支持的几种 bean 的作用域

22、Spring 基于 xml 注入 bean 的几种方式

23、Spring 框架中都用到了哪些设计模式

24、Spring MVC 流程

25、SpringMVC 怎么样设定重定向和转发的


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 对象的主要方法

        setAttribute(String name,Object):设置名字为 name 的 request 的参数值
        getAttribute(String name):返回由 name 指定的属性值
        getAttributeNames():返回 request 对象所有属性的名字集合,结果是一个枚举的实例
        getCookies():返回客户端的所有 Cookie 对象,结果是一个 Cookie 数组
        getCharacterEncoding():返回请求中的字符编码方式
        getContentLength():返回请求的 Body 的长度
        getHeader(String name):获得 HTTP 协议定义的文件头信息
        getHeaders(String name):返回指定名字的 request Header 的所有值,结果是一个枚举的实例
        getHeaderNames():返回所以 request Header 的名字,结果是一个枚举的实例
        getInputStream():返回请求的输入流,用于获得请求中的数据
        getMethod():获得客户端向服务器端传送数据的方法
        getParameter(String name):获得客户端传送给服务器端的有 name 指定的参数值
        getParametervalues(String name):获得有 name 指定的参数的所有值
        getRequestURI():获取发出请求字符串的客户端地址
        getRemoteAddr():获取客户端的 IP 地址
        getSession([Boolean create]):返回和请求相关 Session
        getServerName():获取服务器的名字

7、forward 和 redirect 的区别

        转发与重定向
                (1)从地址栏显示来说
                forward 是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址;
                redirect 是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的 URL.

                (2)从数据共享来说
                forward:转发页面和转发到的页面可以共享 request 里面的数据.
                redirect:不能共享数据.

                 (3)从运用地方来说
                forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
                redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

                (4)从效率来说
                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:当前页面是一个处理错误的页面
        (2)include 指令: 页面包含(静态包含)指令,可以将一个 jsp 页面包含到另一个 jsp 页面中
格式:<%@ include file="被包含的文件地址"%>
        (3)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。
        4、单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。

15、Java 反射技术主要实现类有哪些,作用分别是什么

        在 JDK 中,主要由以下类来实现 Java 反射机制,这些类都位于 java.lang.reflect 包中
                1)Class 类:代表一个类
                2)Field 类:代表类的成员变量(属性)
                3)Method 类:代表类的成员方法
                4)Constructor 类:代表类的构造方法
                5)Array 类:提供了动态创建数组,以及访问数组的元素的静态方法

16、讲一下什么是 Spring

        Spring 是一个轻量级的 IoC 和 AOP 容器框架。是为 Java 应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于 XML 的配置、基于注解的配置、基于 Java 的配置。
54
主要由以下几个模块组成:
Spring Core:核心类库,提供 IOC 服务;
Spring Context:提供框架式的 Bean 访问方式,以及企业级功能(JNDI、定时任务等);
Spring AOP:AOP 服务;
Spring DAO:对 JDBC 的抽象,简化了数据访问异常的处理;
Spring ORM:对现有的 ORM 框架的支持;
Spring Web:提供了基本的面向 Web 的综合特性,例如多方文件上传;
Spring MVC:提供面向 Web 应用的 Model-View-Controller 实现。

17、Spring 的 IOC 和 AOP 机制

        我们是在使用 Spring 框架的过程中,其实就是为了使用 IOC,依赖注入,和 AOP,面向切面编程,这两个是 Spring 的灵魂

IOC:控制反转也叫依赖注入。利用了工厂模式将对象交给容器管理,你只需要在 spring 配置文件总配置相应的 bean,以及设置相关的属性,让 spring 容器来生成类的实例对象以及管理对象。在 spring 容器启动的时候,spring 会把你在配置文件中配置的bean 都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些 bean 分配给你需要 调用这些bean 的类(假设这个类名是 A),分配的方法就是调用 A 的 setter 方法来注入,而不需要你在 A 里面 new 这些 bean 了。

AOP:面向切面编程。(Aspect-Oriented Programming)
AOP 可以说是对 OOP 的补充和完善。OOP 引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP 则显得无能为力。
也就是说,OOP 允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。在 OOP 设计中,它导致了大量代码的重复,而不利于各个模块的重用。
将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。
实现 AOP 的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码. 简单点解释,比方说你想在你的 biz 层所有类中都加上一个打印‘你好’的功能,这时就可以用 aop 思想来做. 你先写个类写个类方法,方法经实现打印‘你好’,然后 Ioc 这个类 ref=“biz.*”让每个类都注入即可实现

18、Spring 中 Autowired 和 Resource 关键字的区别

        @Resource 和@Autowired 都是做 bean 的注入时使用,其实@Resource 并不是 Spring 的注解,它的包是 javax.annotation.Resource,需要导入,但是 Spring 支持该注解的注入。
1、共同点
两者都可以写在字段和 setter 方法上。两者如果都写在字段上,那么就不需要再写 setter 方法。
2、不同点
(1) @Autowired
@Autowired 为 Spring 提 供 的 注 解 , 需 要 导 入 包
org.springframework.beans.factory.annotation.Autowired;只按照 byType 注入

@Autowired 注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允 许null 值,可以设置它的 required 属性为 false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier 注解一起使用。如下

(2) @Resource
@Resource 默认按照 ByName 自动注入,由 J2EE 提供,需要导入包 javax.annotation.Resource

@Resource 有两个重要的属性:name 和 type,而 Spring 将@Resource 注解的 name 属性解析为 bean的 名字,而 type 属性则解析为 bean 的类型。所以,如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type 属性时则使用 byType 自动注入策略。如果既不制定 name 也不制定 type 属性,这时将通 过反射机制使用 byName 自动注入策略

@Resource 装配顺序:
①如果同时指定了 name 和 type,则从 Spring 上下文中找到唯一匹配的 bean 进行装配,找不到则抛出异常。
②如果指定了 name,则从上下文中查找名称(id)匹配的 bean 进行装配,找不到则抛出异常。
③如果指定了 type,则从上下文中找到类似匹配的唯一 bean 进行装配,找不到或是找到多个,都会抛 出异常。
④如果既没有指定 name,又没有指定 type,则自动按照 byName 方式进行装配;如果没有匹配,则回 退为一个原始类型进行匹配,如果匹配则自动装配。 @Resource 的作用相当于@Autowired,只不过@Autowired 按照 byType 自动注入。

19、依赖注入的方式有几种,各是什么

一、构造器注入
将被依赖对象通过构造函数的参数注入给依赖对象,并且在初始化对象的时候注入。
优点:
对象初始化完成后便可获得可使用的对象。
缺点:
当需要注入的对象很多时,构造器参数列表将会很长;
不够灵活。若有多种注入方式,每种方式只需注入指定几个依赖,那么就需要提供多个重载的构造函数,麻烦。
二、setter 方法注入IoC Service Provider 通过调用成员变量提供的 setter 函数将被依赖对象注入给依赖类。
优点:
灵活。可以选择性地注入需要的对象。
缺点:
依赖对象初始化完成后由于尚未注入被依赖对象,因此还不能使用。
三、接口注入
依赖类必须要实现指定的接口,然后实现该接口中的一个函数,该函数就是用于依赖注入。该函数的参数就是要注入的对象。
优点
接口注入中,接口的名字、函数的名字都不重要,只要保证函数的参数是要注入的对象类型即可。
缺点:
侵入行太强,不建议使用。
PS:什么是侵入行?
如果类 A 要使用别人提供的一个功能,若为了使用这功能,需要在自己的类中增加额外的代码,这就是侵入性。

20、解释一下 spring bean 的生命周期

首先说一下 Servlet 的生命周期:实例化,初始 init,接收请求 service,销毁 destroy;
Spring 上下文中的 Bean 生命周期也类似,如下:
(1)实例化 Bean:
对于 BeanFactory 容器,当客户向容器请求一个尚未初始化的 bean 时,或初始化 bean 的时候需要注入 另一个尚未初始化的依赖时,容器就会调用 createBean 进行实例化。对于 ApplicationContext 容器,当 容器启动结束后,通过获取 BeanDefinition 对象中的信息,
实例化所有的 bean。
(2)设置对象属性(依赖注入):
实例化后的对象被封装在 BeanWrapper 对象中,紧接着,Spring 根据 BeanDefinition 中的信息 以及 通过 BeanWrapper 提供的设置属性
的接口完成依赖注入。
(3)处理 Aware 接口:
接着,Spring 会检测该对象是否实现了 xxxAware 接口,并将相关的 xxxAware 实例注入给 Bean:
①如果这个 Bean 已经实现了 BeanNameAware 接口,会调用它实现的 setBeanName(String beanId)方法,此处传递的就是 Spring 配置文
件中 Bean 的 id 值;
②如果这个 Bean 已经实现了 BeanFactoryAware 接口,会调用它实现的 setBeanFactory()方法,传递的 是 Spring 工厂自身。
③如果这个 Bean 已经实现了 ApplicationContextAware 接口,会调用
setApplicationContext(ApplicationContext)方法,传入 Spring 上下文;
(4)BeanPostProcessor:
如果想对 Bean 进行一些自定义的处理,那么可以让 Bean 实现了 BeanPostProcessor 接口,那将会调用
postProcessBeforeInitialization(Object obj, String s)方法。
(5)InitializingBean 与 init-method:
如果 Bean 在 Spring 配置文件中配置了 init-method 属性,则会自动调用其配置的初始化方法。
(6)如果这个 Bean 实现了 BeanPostProcessor 接口,将会调用 postProcessAfterInitialization(Object obj, String s)方法;由于这个方法是在 Bean 初始化结束时调用的,所以可以被应用于内存或缓存技术;
以上几个步骤完成后,Bean 就已经被正确创建了,之后就可以使用这个 Bean 了。
(7)DisposableBean:
当 Bean 不再需要时,会经过清理阶段,如果 Bean 实现了 DisposableBean 这个接口,会调用其实现的destroy()方法;
(8)destroy-method:
最后,如果这个 Bean 的 Spring 配置中配置了 destroy-method 属性,会自动调用其配置的销毁方法。

 

21、解释 Spring 支持的几种 bean 的作用域

Spring 容器中的 bean 可以分为 5 个范围:
(1) singleton:默认,每个容器中只有一个 bean 的实例,单例的模式由 BeanFactory 自身来维护。
(2) prototype:为每一个 bean 请求提供一个实例。
(3) request:为每一个网络请求创建一个实例,在请求完成以后,bean 会失效并被垃圾回收器回收。
(4) session:与 request 范围类似,确保每个 session 中有一个 bean 的实例,在 session 过期后,bean 会随之失效。
(5) global-session:全局作用域,global-session 和 Portlet 应用相关。当你的应用部署在 Portlet 容器中工作时,它包含很多 portlet。如果你想要声明让所有的 portlet 共用全局的存储变量的话,那么这全局变量需要存储在 global-session 中。全局作用域与 Servlet 中的 session 作用域效果相同

22、Spring 基于 xml 注入 bean 的几种方式

(1) Set 方法注入;
(2) 构造器注入:①通过 index 设置参数的位置;②通过 type 设置参数类型;
(3) 静态工厂注入;
(4) 实例工厂;
详细内容可以阅读:https://blog.csdn.net/a745233700/article/details/89307518

23、Spring 框架中都用到了哪些设计模式

(1)工厂模式:BeanFactory 就是简单工厂模式的体现,用来创建对象的实例;
(2)单例模式:Bean 默认为单例模式。
(3)代理模式:Spring 的 AOP 功能用到了 JDK 的动态代理和 CGLIB 字节码生成技术;
(4)模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
(5)观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如 Spring 中 listener 的实现--ApplicationListener。

24、Spring MVC 流程

工作原理:

1、 用户发送请求至前端控制器 DispatcherServlet。
2、 DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。
3、 处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。
4、 DispatcherServlet 调用 HandlerAdapter 处理器适配器。
5、 HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、 Controller 执行完成返回 ModelAndView。
7、 HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet。
8、 DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。
9、 ViewReslover 解析后返回具体 View。
10、DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet 响应用户。

25、SpringMVC 怎么样设定重定向和转发的

(1) 转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"

(2) 重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值