JavaWeb面试

来源:互联网 发布:淘宝店铺标志制作 编辑:程序博客网 时间:2024/05/17 23:42

Spring

Spring 原理

1.IOC,动态注入,让一个对象的创建不用经过new的方式创建。可以自动生产(主要是 java的反射)
2.AOP,面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能

Spring 的事物

1.编程事物
2.声明事物

SpringMVC的工作机制

  1. SpringMVC会将所有的客户端请求转交到 dispatcherServlet
  2. DispatcherServlet 会去查询 HandelerMapping 找到处理的 Controller,并将请求提交到Controller
  3. Controller 在进行业务逻辑处理后 ,会返回一个ModelAndView
    4.Dispatcher 查询 ViewResolve 找到ModelAndView 对象指定的视图对象
    5.视图对象负责渲染返回给客户端

Struts

Struts 的工作流程

在web应用启动时就会加载初始化ActionServlet,ActionServlet从 struts-config.xml文件中读取配置信息,把它们存放到各种配置对象 当ActionServlet接收到一个客户请求时,将执行如下流程.

1.客户端初始化一个指向Servlet容器的请求;
2. 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3.接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action
4. 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5.ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6.ActionProxy创建一个ActionInvocation的实例。
7.ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8.一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

Struts的设计模式

MVC模式: web应用程序启动时就会加载并初始化ActionServlet。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数 据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的 Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用 Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对 象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动 态的网页,返回给客户。

Struts 的优点

1.实现MVC模式,结构清晰,是开发者只需要关注业务逻辑的实现
2.丰富的tag 可以使用。
3.国际化

Hibernate

Hibernate工作原理

原理
1.读取并解析配置文件。
2.读取并解析映射文件。
3.创建SessionFactory
4.打开session
5.创建事物 transaction
6.持久化操作
7.关闭session
8.关闭SessionFactory

为什么要用Hibernate

1.对JDBC代码进行了封装操作,简化了Dao层 繁琐的工作
2.hibernate使用 Java的反射机制 ,而不是字节码增加程序来实现透明。
3.Hibernate 是轻量级框架,映射的灵活性非常出色,并且支持各种关系型数据库,从一对一到多对多的各种复杂的关系

Hibernate 的延迟加载

当Hibernate在查询数据的时候,数据并不会存在内存中,只有当真正的对数据进行操作的时候,才会将对象放在内存中,极大的节省了服务器内存的开销,从而提高服务器的性能

Hibernate 中如何 实现类的对应关系

类与类之间的关系主要是通过表与表之间的关系,然后通过配置文件进行映射 many to one ,one to many ,many to many

如何优化 Hibernate

1.使用双向一对多关联,不适用单项多对一关联
2.灵活使用单项一对多关联
3.不用一对一,用多对一取代
4.配置对象缓存,不使用集合缓存

JavaWeb方面

tomcat的优化经验

1.去掉对web.xml的监视 把jsp 提前编辑成servlet
2.加大tomcat 的jvm内存

Http的Get请求与Post请求的区别

1.从Url中可以看出,Get是明文的方式,而且具有1024字节大小的限制,Post请求没有限制。并且数据是通过html header 进行提交
2.对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

什么是Servlet

servlet是具有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达的Class

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的长度
7.getHeader(String name):获得HTTP协议定义的文件头信息
8.getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例
9.getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例
10.getInputStream():返回请求的输入流,用于获得请求中的数据
11.getMethod():获得客户端向服务器端传送数据的方法
12.getParameter(String name):获得客户端传送给服务器端的有name指定的参数值
13.getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
14.getParametervalues(String name):获得有name指定的参数的所有值
15.getProtocol():获取客户端向服务器端传送数据所依据的协议名称
16.getQueryString():获得查询字符串
17.getRequestURI():获取发出请求字符串的客户端地址
18.getRemoteAddr():获取客户端的IP地址 getRemoteHost():获取客户端的名字
19.getSession([Boolean create]):返回和请求相关Session
20.getServerName():获取服务器的名字
21.getServletPath():获取客户端所请求的脚本文件的路径
22.getServerPort():获取服务器的端口号
23.removeAttribute(String name):删除请求中的一个属性

JSP有哪些内置对象

1.request
2.respons
3.pageContext
4.session
5.application
6.out
7.page Jsp