四、jsp/servlet部分
1、Tomcat的优化经验
去掉对web.xml的监视,把jsp提前编辑成Servlet。
有富余物理内存的情况,加大tomcat使用的jvm的内存
2、Tomcat根目录下有哪些文件
1)config 配置文件存放的路径
2)webapps 项目部署的目录
3)bin tomcat运行需要的脚本与jar包的目录
4)lib 运行项目时所需要的jar包的目录
5)work 部署项目的缓存目录
6)temp 临时文件存放的目录
7)logs 记录日志的目录
3、什么是TOMCAT,怎样启动停止,配置文件,日志文件的存储。
xtomcat其实是一种web服务器,java编写的web项目可以部署在其上,用户在客户端请求时,都是先将请求发送到tomcat上,tomcat再将请求发送到对应的项目上。
启动tomcat
在Windows下:进入bin目录,双击startup.bat
在Linux下:cd进入bin目录,sh startup.sh
在开发工具eclipse中,右键选择Debug Server或者Run Server
停止tomcat
在Windows下:进入bin目录,双击shutdown.bat
在Linux下:cd进入bin目录,sh shutdown.sh
在开发工具eclipse中,选择服务器stop Server
配置文件在tomcat的config文件夹下
日志文件在logs文件夹下
4、解释一下什么是servlet;什么是servlet容器;
在web容器中运行的服务器端java程序,主要用于响应HTTP请求。Servlet一般用于mvc中的控制器部分。
用来管理servlet生命周期的应用程序如(tomcat webloc等)
5、说一说Servlet的生命周期,执行过程?
Servlet生命周期分为实例化、初始化、响应请求调用service()方法、消亡阶段调用destroy()方法。
执行过程如下:
1)当浏览器发送一个请求地址,tomcat会接收这个请求
2)tomcat会读取项目中的web.xml中的配置
3)当请求地址符合servlet-mapping标签映射的地址,会进入这个servlet
4)servlet首先会实例化(构造),然后初始化执行init()方法,init()方法至始至终执行一次,servlet对象是单实例
5)根据请求的方式是get或post,在service()方法中调用doget()或dopost()方法,完成此次请求
6)当服务器停止,会调用destroy()方法,销毁实例
6、实例化servlet有几种方式
Servlet实例化有两种,如下:
- 第一次请求时,实例化servlet对象
2)在web.XML文件中的之间添加1,tomcat启动时就会实例化servlet对象
7、HTTP请求的GET与POST方式的区别
Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:
1)Get是用来从服务器上获得数据,而Post是用来向服务器上传数据;
2)Get将表单中数据按照variable=value的形式,添加到action所指向的URL后面,并且两者使用
“?”连接,而各个变量之间使用“&”
连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL;
3)Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的;
4)Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post;
5)Get限制Form表单的数据集必须为ASCII字符,而Post支持整个ISO10646字符集;
6)Get是Form的默认方法。
8、请写一个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 {
}
}
9、forward 和redirect的区别?
forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取,并且从浏览器的地址栏中可以看到跳转后的链接地址。前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。
总结:forward是程序内部跳转,不会跳出tomcat服务器,redirect可以外部跳转,从一个服务器跳转到另一个服务器。
10、servlet中怎么定义forward 和redirect
转发:request.getRequestDispatcher (“demo.jsp"). forward(request, response);
重定向:response.sendRedirect(“demo.jsp");
11、过滤器有哪些作用?
可以验证客户是否来自可信的网络,可以对客户提交的数据进行重新编码,可以从系统里获得配置的信息,可以过滤掉客户的某些不应该出现的词汇,可以验证用户是否登录,可以验证客户的浏览器是否支持当前的应用,可以记录系统的日志等等。
12、JSP的常用指令?
<%@page language=”java” contenType=”text/html;charset=gb2312” session=”true” buffer=”64kb” autoFlush=”true” isThreadSafe=”true” info=”text” errorPage=”error.jsp” isErrorPage=”true” isELIgnored=”true” pageEncoding=”gb2312” import=”java.sql.*”%>
isErrorPage:是否能使用Exception对象;isELIgnored:是否忽略EL表达式;
<%@include file=”filename”%>
<%@taglib prefix=”c”uri=”http://……”%>
13、JSP和Servlet中的请求转发分别如何实现?
JSP中的请求转发可利用forward动作实现:;
Serlvet中实现请求转发的方式为:
getServletContext().getRequestDispatcher(path).forward(req,res)。
14、JSP乱码如何解决?
1)JSP页面乱码
<%@ page contentType=”text/html ; charset=utf-8”%>
2)表单提交中文时出现乱码
如果是post请求: request.setCharacterEncoding(“utf-8”);
如果是get请求:可以通过编码再解码的方法
public class TestCodeCast {
public static void main(String[] args) {
String messageString="创新二路";
String s1 =URLEncoder.encode(messageString);//编码
System.out.println(s1);
//%E5%88%9B%E6%96%B0%E4%BA%8C%E8%B7%AF
String s2 =URLDecoder.decode(s1);//解码
System.out.println(s2);
//创新二路
}
}
3)数据库连接出现乱码
是数据库连接中加入useUnicode=true&characterEncoding=utf-8;
15、session 和 application的区别?
1)两者的作用范围不同:
Session对象是用户级的,而Application是应用程序级别的
一个用户一个session对象,每个用户的session对象不同,在用户所访问的网站多个页面之间共享同一个session对象
一个Web应用程序一个application对象,每个Web应用程序的application对象不同,但一个Web应用程序的多个用户之间共享同一个application对象。
两者的生命周期不同:
session对象的生命周期:用户首次访问网站创建,用户离开该网站 (不一定要关闭浏览器) 消亡。
application对象的生命周期:启动Web服务器创建,关闭Web服务器销毁。
16、jsp有哪些内置对象?作用分别是什么?
JSP共有以下9种基本内置组件
request:用户端请求,此请求会包含来自GET/POST请求的参数;
response:网页传回用户端的回应;
pageContext:网页的属性是在这里管理;
session:与请求有关的会话期;
application:servlet正在执行的内容;
out:用来传送回应的输出;
config:servlet的构架部件;
page:JSP网页本身;
exception:针对错误网页,未捕捉的例外
17、Jsp有哪些动作?作用分别是什么?
JSP共有以下6种基本动作
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记
18、JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:include动作实现,它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数 ,先将嵌入的jsp页面编译和主页进行编译然后再包含,编译两次。
静态INCLUDE用include伪码实现,使用jsp指令引用<%@ include file=included.htm %>,不会检查所含文件的变化,适用于包含静态页面,先将内容先包含到主页面然后在一起编译,只编译一次。
19、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。
20、页面传递对象的方法?
Request、session、application、cookie等
21、Cookied和session区别?
1)cookie数据存放在客户的浏览器上,session数据放在服务器上。
2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。
4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。