Java Web基础面试题整理

Tomcat的缺省端口是多少,怎么修改

tomcat默认缺省端口是8080

修改方法:

  1. 找到Tomcat目录下的conf文件夹
  2. 进入conf文件夹里面找到server.xml文件
  3. 打开server.xml文件
  4. 在server.xml文件里面找到下列信息
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" uriEncoding="utf-8"/>

修改port属性,改成你想要的端口。

Tomcat有几种部署方式

  1. 直接把Web项目打包成war包放置在webapps下,Tomcat会自动将其部署。
  2. 在server.xml文件上配置 节点,设置相关的属性即可。
  3. 通过Catalina来进行配置:进入到conf\Catalina\localhost文件下,创建一个xml文件,该文件的名字就是站点的名字。编写XML的方式来进行设置。

Tomcat容器是如何创建servlet类实例

当容器启动时,会读取在web目录下所有的web应用中的web.xml文件,然后对xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。(有时候也是在第一次请求时实例化)在servlet注册时加上如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

Servlet接口中有哪些方法及Servlet生命周期

Servlet接口定义了5个方法,其中前三个方法与Servlet生命周期相关:

  • void init(ServletConfig config) throws ServletException
  • void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException
  • void destory()
  • java.lang.String getServletInfo()
  • ServletConfig getServletConfig()

生命周期:

  • Web容器加载Servlet并将其实例化,容器运行其init()方法进行Servlet的初始化;
  • 接受请求时调用service()方法,service()方法会根据需要调用与请求对应的doGet()doPost()等方法;
  • 当服务器关闭或项目被卸载时服务器会将Servlet实例销毁,此时会调用destroy()方法。

init方法和destory方法只会执行一次,service方法客户端每次请求Servlet都会执行。Servlet中有时会用到一些需要初始化与销毁的资源,因此可以把初始化资源的代码放入init方法中,销毁资源的代码放入destroy方法中,这样就不需要每次处理客户端的请求都要初始化与销毁资源。

get和post请求的区别

  • get请求用来从服务器上获得资源,而post是用来向服务器提交数据;
  • get将表单中数据按照name=value的形式,添加到action 所指向的URL 后面,并且两者使用"?"连接,而各个变量之间使用"&"连接;post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL;
  • get传输的数据量小,这主要应为受url长度限制;而post可以传输大量的数据,所有上传文件只能用post提交;
  • get是不安全的,它的请求参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post;
  • get限制form表单的数据集必须为ASCII字符;而post支持整个IS01 0646字符集。

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

form表单默认是get请求,因此默认调用doGet()方法,JSP页面中的Form表单的method属性设置为post的时候,调用的为doPost()方法;为get的时候,调用deGet()方法。

转发(Forward)和重定向(Redirect)的区别

转发是服务器行为,重定向是客户端行为。

转发(Forword)通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法实现的。RequestDispatcher可以通过HttpServletRequest的getRequestDispatcher()方法获得。例如下面的代码就是跳转到success.jsp页面。

 request.getRequestDispatcher("success.jsp").forward(request, response);

重定向(Redirect) 是利用服务器返回的状态吗来实现的。客户端浏览器请求服务器的时候,服务器会返回一个状态码。服务器通过HttpServletRequestResponse的setStatus(int status)方法设置状态码。如果服务器返回301或者302,则浏览器会到新的网址重新请求该资源。

1.从地址栏显示来说

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

2.从数据共享来说

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

redirect:不能共享数据.

3.从运用地方来说

forward:一般用于用户登陆的时候,根据角色转发到相应的模块.

redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等

4.从效率来说

forward:高.

redirect:低.

JSP工作原理

JSP(Java Server Page)本质上就是一种Servlet,但是与HttpServlet的工作方式不太一样。HttpServlet是先由源代码编译为class文件后部署到服务器下,为先编译后部署。而JSP则是先部署后编译。JSP会在客户端第一次请求JSP文件时被编译为HttpJspPage类(接口Servlet的一个子类)。该类会被服务器临时存放在服务器工作目录里面。

JSP的内置对象有哪些,分别有什么作用

  1. request(HttpServletRequest):封装客户端的请求,其中包含来自GET或POST请求的参数;
  2. response(HttpServletResponse):封装服务器对客户端的响应;
  3. pageContext(PageContext):通过该对象可以获取其他对象;
  4. session(HttpSession):封装用户会话的对象;
  5. application(ServletContext):封装服务器运行环境的对象;
  6. out(JspWriter):输出服务器响应的输出流对象;
  7. config(ServletConfig):Web应用的配置对象;
  8. page(Object):JSP页面本身(相当于Java程序中的this);
  9. exception(Throwable):封装页面抛出异常的对象。

JSP的指令有哪些

  • page指令: 指定页面的的一些属性,例如:
    • contentType指定文档类型
    • pageEncoding指定页面编码格式
  • include指令: 包含别一个jsp页面
  • taglib指令: 引入一个标签库

JSP中动态include与静态include的区别

动态include:,包含的动作是在jsp对应的Serlet处理请求时去执行的,每次请求都会执行.

静态include:<%@include%>,包含的动作是在jsp被编译成java文件时执行的, 只有第一次请求时执行.

Cookie和Session的联系与区别

Cookie和Session都是web应用的会话跟踪技术。

Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。

Session:保存在服务端,每一个session在服务端有一个sessionID作一个标识。存储的数据量大,安全性高。占用服务端的内存资源。

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

MVC 是Model-View-Controller 的简写。"Model" 代表的是应用的业务逻辑,"View" 是应用的表示面(由JSP 页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。


如果文章有错的地方欢迎指正,大家互相交流。感谢关注公众号:developerLeo

你可能感兴趣的:(Java Web基础面试题整理)