java基础web

文章目录

目录

文章目录

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

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

2、解释一下什么是 servlet S

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 关键字的区别


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 关键字的区别


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

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

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

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

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

2、解释一下什么是 servlet S

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)
getAttribute(String name)
getAttributeNames()
getCookies()
getCharacterEncoding()
getContentLength()
getHeader(String name)
getHeaders(String name)
getHeaderNames()
getInputStream()
getMethod()
getParameter(String name)
getParametervalues(String name)
getRequestURI()
getRemoteAddr()
getSession([Boolean create])
getServerName()

1.设置名字为 name 的 request 的参数值

2.返回由 name 指定的属性值

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

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

5.返回请求中的字符编码方式

6.返回请求的 Body 的长度

7.获得 HTTP 协议定义的文件头信息

8.返回指定名字的 request Header 的所有值,结果是一个枚举的实例

9.返回所以 request Header 的名字,结果是一个枚举的实例

10.返回请求的输入流,用于获得请求中的数据

11.获得客户端向服务器端传送数据的方法

12.获得客户端传送给服务器端的有 name 指定的参数值

13.获得有 name 指定的参数的所有值

14.获取发出请求字符串的客户端地址

15.获取客户端的 IP 地址

16.返回和请求相关

17获取服务器的名字

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 向客户端输出数据

config servlet                                                    的架构部件

page                                                                 指网页本身

exception                                                          针对错误页面才可使用

9、JSP 的常用指令

(1)page 指令: 属性最多的指令(实际开发中 page 指令默认),属性最多的一个指令,根据不同的属性,指导整个页面特性格式:

常用属性如下:

language:jsp 脚本中可以嵌入的语言种类,这个没用,写与不写一样的;

pageEncoding:当前 jsp 文件的本身编码---内部可以包含

contentType contentType:response.setContentType(text/html;charset=UTF-8) import:

导入 java 的包 errorPage:当前页面出错后跳转到哪个页面 isErrorPage:

当前页面是一个处理错误的页面

(2)include 指令: 页面包含(静态包含)指令,可以将一个 jsp 页面包含到另一个 jsp 页面中

格式: (3)taglib 指令: 在 jsp 页面中引入标签库(jstl 标签库、struts2 标签库) 

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

动态 INCLUDE 用 jsp:include 动作实现, 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数

静态 INCLUDE 用 include 伪码实现,不会检查所含文件的变化,适用于包含静态页面

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 就是典型的工厂模式,通过 sessionfactory 去注入实例。
AOP 就是典型的代理模式的体现。
代理模式是常用的 java 设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类
预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在
关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通
过调用委托类的对象的相关方法,来提供特定的服务。
spring 的 IOC 容器是 spring 的核心,spring AOP 是 spring 框架的重要组成部分。
在传统的程序设计中,当调用者需要被调用者的协助时,通常由调用者来创建被调用者的实例。但在

spring 里创建被调用者的工作不再由调用者来完成,因此控制反转(IOC);创建被调用者实例的工作通
常由 spring 容器来完成,然后注入调用者,因此也被称为依赖注入(DI),依赖注入和控制反转是同一
个概念。
面向方面编程(AOP)是以另一个角度来考虑程序结构,通过分析程序结构的关注点来完善面向对象编程
(OOP)。OOP 将应用程序分解成各个层次的对象,而 AOP 将程序分解成多个切面。spring AOP 只实现
了方法级别的连接点,在 J2EE 应用中,AOP 拦截到方法级别的操作就已经足够。在 spring 中,未来使 IoC
方便地使用健壮、灵活的企业服务,需要利用 spring AOP 实现为 IoC 和企业服务之间建立联系。

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

 

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 注入
 

public class TestServiceImpl {
// 下面两种@Autowired 只要使用一种即可
@Autowired
private UserDao userDao; // 用于字段上
@Autowired
public void setUserDao(UserDao userDao) { // 用于属性的方法上
this.userDao = userDao;
}
}

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

public class TestServiceImpl
{ @Autowired
@Qualifier("userDao")
private UserDao userDao;
}

(2) @Resource
@Resource 默认按照 ByName 自动注入,由 J2EE 提供,需要导入包 javax.annotation.Resource。
@Resource 有两个重要的属性:name 和 type,而 Spring 将@Resource 注解的 name 属性解析为 bean
的 名字,而 type 属性则解析为 bean 的类型。所以,如果使用 name 属性,则使用 byName 的自动
注入策略,而使用 type 属性时则使用 byType 自动注入策略。如果既不制定 name 也不制定 type 属性,这
时将通 过反射机制使用 byName
 

public class TestServiceImpl {
// 下面两种@Resource 只要使用一种即可
@Resource(name="userDao")
private UserDao userDao; // 用于字段上
@Resource(name="userDao")
public void setUserDao(UserDao userDao) { // 用于属性的 setter 方法上
this.userDao = userDao;
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值