1、jsp与servlet有什么不同?
jsp主要是用于进行页面数据的输出,而servlet主要是用于处理用户的请求;
2、为什么用javaEE写出来的网站在第一次运行的时候会比较慢?
因为它第一次运行的时候要先翻译成java文件,再编译成class。
3、JSP的语法包含哪些?
<1> JSP脚本 <% %> 主要用于写java代码,如:<% java代码 %> -->>翻译在方法里
<3> JSP输出表达式 <%= %> 主要用于输出数据,但是不能有;号
<4> JSP注释 <%-- --%>
<5> JSP指令 主要是通知Tomcat服务器做一个基本的设置和逻辑处理
<%@page %> 主要用于设置页面信息 最好写在页面的第一行
<%@include %> 主要用于包含页面 【静态包含】
<%@taglib %> 主要用于引入第三方的标签库
<%@ page language="java" 指定页面的JSP脚本中需要使用的脚本语言 java
import="java.util.*" 导包语句【重点】
pageEncoding="utf-8" 指定页面的编码方式 response.setCharacterEncoding()
autoFlush="true" 指定自动刷新缓冲区
buffer="8kb" 指定缓冲区的大小
contentType="text/html; charset=utf-8" 指定页面解码方式
errorPage="" 指定页面的错误页面【重点】
extends="" 指定翻译好的类继承的父类
info="" 指定页面的基本信息【不实用】
isELIgnored="false" 指定页面中是否忽略EL表达式
isErrorPage="false" 指定当前页面是否是处理错误的页面【重点】
isThreadSafe="true" 指定页面是否线程安全
session="true" 指定页面需要服务器创建session对象
%>
<6> JSP动作 主要用于处理JSP页面简单业务的标签
<jsp:include page=""></jsp:include> 包含动作【动态包含】
动态包含将包含页面和被包含页面分别进行翻译和编译。
<jsp:forward page=""></jsp:forward> 转发
相当于:request.getRequestDispatcher(path).forward(request,response)
<jsp:params/>
<7> JSP的九大隐含对象是什么?
request,response,pageContext,session,out,exception,application,config,page
且JSP中的九大隐含对象都是单例的
1、请说出JavaEE中使用单例的几个场景?
Servlet
JSP隐含对象
2、请说出项目开发中使用单例的几个场景?
工厂模式 ————》》 单例模式
配置文件 ————》》 操作配置文件的类是单例模式
4、修改JSP模板的编码:
window ---->> preferences ---->> 搜索JSP ---->> Encoding:utf-8.
5、在JSP中的包含指令<%@include %>的JSP页面在翻译的时候形成几个文件?
1个
6、静态包含与动态包含的区别?
1、实现方式不同
静态包含:<%@include file="" %>
动态包含:<jsp:include page="">
2、执行原理不同:
静态包含:<%@include file="" %> 翻译为同一个文件进行执行
动态包含:<jsp include page=""> 翻译为两个文件;先执行包含页面,再执行被包含页面
推荐使用动态包含【动态包含类似于懒汉式单例模式,懒加载】
7、println和<br/>的区别?
println :是源代码的换行
<br/> :是页面的换行
8、思考:print()和write()的区别
<%
int age = 97;
String str = null;
%>
<hr/>
<%
out.write(age); // a
out.write(str);
%>
<hr/>
<%
out.print(age); // 97 null
out.print(str);
%>
需要原样输出数据用print,或者write(age+" ")
思考:在项目如果用户登录成功,需要显示登录的用户名?
out.write(session.getAttribute("name")) 这里要用writer
9、在JSP中输出数据尽量使用out隐含对象,不要使用response流
但是,out是个字符流,不能读取图片,此时只能用response流
10、JSP中哪个隐含对象可以获取网站的某个资源的路径?
application
因为
application对象是servletContext类型的。(servletContext代表整个网站对象)
PageContext 代表当前JSP页面的对象
JSPContext 代表整个JSP页面
ServletContext 代表整个网站
11、在JSP中编写一段代码获取路径为"/imgs/中国.jpg"的图片?
ServletOutputStream sout = response.getOutputStream();
String path = application.getRealPath("/imgs/中国.jpg");
System.out.println(path);
String fileName = path.substring(path.lastIndexOf("\\")+1);
System.out.println(fileName);
response.setHeader("content-disposition","attachment:filename="+URLEncoder.encoder(fileName,"utf-8"));
FileInputStream in = new FileInputStream(path);
byte [] b = new byte[1024];
int len = 0;
while((len = in.read(b)) != -1){
sout.write(b,0,len);
}
in.close();
sout.close();
常见问题:
1. 路径问题
String path = application.getRealPath("/imgs/中国.jpg");
String fileName = path.substring(path.lastIndexOf("\\")+1);
多读数据 总长度 -1
2. 响应头问题
响应头错误依旧可以下载
response.setHeader("content-type","jack/lucy");
【下载的是整个页面】
response.setHeader("content-disposition","attachment:filename="+fileName);
如果写错 会将图片直接显示
3. 下载资源的中文文件名问题?
response.setHeader("content-disposition","attachment:filename="+URLEncoder.encode(fileName,"utf-8"));
4. 路径问题?
如果路径中有中文【不是文件】,那么输出路径中如果有中文就被编码为%ae%34%34
System.out.println(path);
path = URLDecoder.decode(path,"utf-8");
|
|