jsp and servlet

1、jsp有哪些内置对象作用分别是什么
答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):
 request 用户端请求,此请求会包含来自GET/POST请求的参数
response 网页传回用户端的回应
pageContext 网页的属性是在这里管理
session 与请求有关的会话期
application servlet 正在执行的内容
out 用来传送回应的输出
config servlet的构架部件
page JSP网页本身
exception 针对错误网页,未捕捉的例外
2、jsp有哪些动作作用分别是什么
答:JSP共有以下6种基本动作
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记
3、JSP中动态INCLUDE与静态INCLUDE的区别?
答:动态INCLUDE用jsp:include动作实现
它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面

4、两种跳转方式分别是什么有什么区别
答:有两种,分别为:
1) redirect方式
request和response没有传给目标页面
response.sendRedirect(“/a.jsp”);
页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中,如:
response.sendRedirect(“URL”);跳转后浏览器地址栏变化。
这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。
传值:HttpSession session = request.getSession();
session.setAttribute(“bbbb”, 1111111111);
取值:session.getAttribute(“bbbb”);
传值:RequestDispatcher rd = application.getRequestDispatcher(“/queryResult.jsp?a=”+000);
取值:request.getParameter(“a”)
2) forward方式
ServletContext application = this.getServletContext();//this是这个页面
RequestDispatcher rd = application.getRequestDispatcher(“/目标页面”);
rd.forward(request, response);
Servlet页面跳转的路径是相对路径。forward方式只能跳转到本web应用中的页面上,跳转后浏览器地址栏不会变化。
使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute
传值:request.setAttribute(“a”, 00);
取值:request.getAttribute(“a”);
传值:HttpSession session = request.getSession();
session.setAttribute(“bbbb”, 1111111111);
取值:session.getAttribute(“bbbb”);
传值:RequestDispatcher rd = application.getRequestDispatcher(“/queryResult.jsp?a=”+000);
取值:request.getParameter(“a”);
getParameter只能传递字符串setAttribute/getAttribute可以传递对象
其次getParameter方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。
只能是页面发送到后台或者Web客户端传到Web服务器端

5、JSP的内置对象及方法。
request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。
response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)
session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page表示从该页面产生的一个servlet实例
详解

二、JSP&Servlet技术
1. 描述JSP和Servlet的区别、共同点、各自应用的范围
2. 在Web开发中需要处理HTML标记时,应做什么样的处理,要筛选那些字符(< > &“”)
3. 在JSP中如何读取客户端的请求,如何访问CGI变量,如何确定某个Jsp文件的真实路径。
4. 描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。
5. 列出Jsp中包含外部文件的方式,两者有何区别。
6. 说明Jsp中errorPage的作用,应用范围。
7. 介绍在Jsp中如何使用JavaBeans。
8. 简单介绍JSP的标记库
9. Jsp和Servlet中的请求转发分别如何实现。
10. JSP的常用指令
isErrorPage(是否能使用Exception对象),isELIgnored(是否忽略表达式)

11、什么情况下调用doGet()和doPost()?
Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。

12、servlet的生命周期
web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。
13、如何现实servlet的单线程模式

14、跳转和传值
跳转:重定向和转发
重定向(response.sendRedirect(“页面跳转地址”))是客户端的,request不可共用,地址发生改变
转发(foward.) 服务器端跳转,request可共用,地址不发生改变
// 准备跳转到此页面
RequestDispatcher rd = req.getRequestDispatcher(“jump.jsp”) ;//servlet–>jsp
// 把所有的请求向下继续传递
rd.forward(req,resp) ;

传值:
jsp–》servlet :form表单action、超链接、servlet方式(session.setAttribute(“testSession”,”Hello session”); reqeust.setAttribute(“testRequest”,”Hello request”);)
servlet—>jsp
HttpSession session = request.getSession();
session.setAttribute(“bbbb”, 1111111111);

传值:RequestDispatcher rd = application.getRequestDispatcher(“/queryResult.jsp?a=”+000);
取值:request.getParameter(“a”);

利用这个方法可以判断 session是否过期,如下(SQL注入)
if(request.getSession(false)==null)
System.out.println(“Session has been invalidated!”);
else
System.out.println(“Session is active!”);
详解

15、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
JSP侧重于视图<% %>,Servlet主要用于控制逻辑。
response.setContentType(“text/html;charset=utf-8”);
PrintWriter out = response.getWriter();
out.println(“”);
out.println(“”);
out.println(” A Servlet“);
out.println(” ”);
out.println(“”);
out.println(“

” + “\n” + “
”)

out.println(“

“);
out.println(“\n\n”);
out.println(” ”);
out.println(“”);
out.flush();
out.close();
}
是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是”类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。

16、四种会话跟踪技术
(1)。jsp四种作用域不同的的内置对象
page -> 页面级别,显然只有在一个页面内可用。
request -> 请求级别 服务器跳转,一次请求之后消失。
session -> 会话级别 客户端跳转(服务器跳转),与浏览器有关,ie是在重新打开ie时才会不同。
application = 应用级别,当重启服务器时才会消失

17、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指定的参数值
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
getParameterValues(String name):获得有name指定的参数的所有值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString():获得查询字符串
getRequestURI():获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端的名字
getSession([Boolean create]):返回和请求相关Session
getServerName():获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径
getServerPort():获取服务器的端口号
removeAttribute(String name):删除请求中的一个属性

18、Servlet执行时一般实现哪几个方法?
public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)

19.怎么创建和销毁session
Session的创建和销毁不是说过吗?当客户端发出第一个请求时(不管是被访问网站的任何页面)就会在此站点的服务其中开辟一块内存空间,这块内存就是session,session的销毁有两种方式,一种是session过期时间已到,会自动销毁(注意这里不是马上就会销毁,具体销毁时间由Tomcat容器所决定)。在我们项目中的web.xml中就可以配置:

30

表示设置session过期时间为30分钟。值得注意的就是上面说的即使30分钟到了session不一定会马上销毁,可以通过session监听器测试得到每次session销毁的时间都不一样。如果要想安全的话就用下面第二种方法。在Tomcat的conf文件夹中的web.xml中可以找到Tomcat默认的session过期时间为30分钟。如果我们在我们的站点中配置了session过期时间Tomcat容器会以站点配置为主,如果我们没有在站点中配置session过期时间,将会以Tomcat下conf文件夹下的web.xml文件中配置的session过期时间为准。

第二种销毁方式通过手工方式销毁,这种销毁方式会立刻释放服务器端session的资源,我们手动销毁可以通过session().invalidate();实现。