Java面试(八)
1、什么情况下调用 doGet()和 doPost()?
2、Request 对象的主要方法:
3、jsp 有哪些内置对象?作用分别是什么? 分别有什么方法?
4、jsp 有哪些动作?作用分别是什么?
5、JSP 中动态 INCLUDE 与静态 INCLUDE 的区别?
6、页面间对象传递的方法
7、JSP 和 Servlet 有哪些相同点和不同点,他们之间的联系是什么?
8、MVC 的各个部分都有那些技术来实现?如何实现?
9、我们在 web 应用开发过程中经常遇到输出某种编码的字符如 iso8859-1 等,如何输出一个某种编码的字符串?
10、数据库三范式是什么?
1、什么情况下调用 doGet()和 doPost()?
Jsp 页面中的 FORM 标签里的 method 属性为 get 时调用 doGet(),为 post 时调用 doPost()。
2、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):删除请求中的一个属性
3、jsp 有哪些内置对象?作用分别是什么? 分别有什么方法?
JSP 共有以下 9 个内置的对象:
- request 用户端请求,此请求会包含来自 GET/POST 请求的参数
- request 表示 HttpServletRequest 对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取 cookie, header, 和 session 数据的有用的方法。
- response 网页传回用户端的回应
- response 表示 HttpServletResponse 对象,并提供了几个用于设置送回 浏览器的响应的方法(如 cookies,头信 息等)
- pageContext 网页的属性是在这里管理
- pageContext 表示一个 javax.servlet.jsp.PageContext 对象。它是用于方便存取各种范围的名字空间、servlet 相 关的对象的 API,并且包装了通用的 servlet 相关功能的方法。
- session 与请求有关的会话期
- session 表示一个请求的 javax.servlet.http.HttpSession 对象。Session 可以存贮用户的状态信息
- application servlet 正在执行的内容
- applicaton 表示一个 javax.servle.ServletContext 对象。这有助于查找有关 servlet 引擎和 servlet 环境的信息
- out 用来传送回应的输出
- out 对象是 javax.jsp.JspWriter 的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
- config servlet 的构架部件
- config 表示一个 javax.servlet.ServletConfig 对象。该对象用于存取 servlet 实例的初始化参数。
- page JSP 网页本身
- page 表示从该页面产生的一个 servlet 实例
- exception 针对错误网页,未捕捉的例外
4、jsp 有哪些动作?作用分别是什么?
JSP 共有以下 6 种基本动作
- jsp:include:在页面被请求的时候引入一个文件。
- jsp:useBean:寻找或者实例化一个 JavaBean。
- jsp:setProperty:设置 JavaBean 的属性。
- jsp:getProperty:输出某个 JavaBean 的属性。
- jsp:forward:把请求转到一个新的页面。
- jsp:plugin:根据浏览器类型为 Java 插件生成 OBJECT 或 EMBED 标记
5、JSP 中动态 INCLUDE 与静态 INCLUDE 的区别?
动态 INCLUDE 用 jsp:include 动作实现
<jsp:include page=included.jsp flush=true />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带 参数 静态 INCLUDE 用 include 伪码实现,定不会检查所含文件的变化,适用于包含静态页面 <%@ include file=included.htm %>
6、页面间对象传递的方法
request,session,application,cookie 等
7、JSP 和 Servlet 有哪些相同点和不同点,他们之间的联系是什么?
JSP 是 Servlet 技术的扩展,本质上是 Servlet 的简易方式,更强调应用的外表表达。
JSP 编译后是"类 servlet"。 Servlet 和 JSP 最主要的不同点在于,Servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的 HTML 里分离开来。而 JSP 的情况是 Java 和 HTML 可以组合成一个扩展名为.jsp 的文件。JSP 侧重于视图,Servlet 主要用于控制逻辑。
8、MVC 的各个部分都有那些技术来实现?如何实现?
MVC 是 Model-View-Controller 的简写。
Model 代表的是应用的业务逻辑(通过 JavaBean,EJB 组件实现),
View 是应用的表示面(由 JSP 页面产生),
Controller 是提供应用的处理过程控制(一般是一个 Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
9、我们在 web 应用开发过程中经常遇到输出某种编码的字符如 iso8859-1 等,如何输出一个某种编码的字符串?
public String translate(String str) {
String tempStr = "";
try {
tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
tempStr = tempStr.trim();
} catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}
10、数据库三范式是什么?
第一范式(1NF):
字段具有原子性,不可再分。所有关系型数据库系统都满足第一范式)
数据库表中的字段都是单一属性的,不可再分。例如,姓名字段,其中的姓和名必须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两个独立的字段。
第二范式(2NF):
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。 要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储各个实例的惟一标识。 这个惟一属性列被称为主关键字或主键。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是非主 属性非部分依赖于主关键字。
第三范式的要求如下:
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
所以第三范式具有如下特征:
1,每一列只有一个值
2,每一行都能区分。
3,每一个表都不包含其他表已经包含的非主关键字信息。
例如,帖子表中只能出现发帖人的 id,而不能出现发帖人的 id,还同时出现发帖人姓名,否则,只要出现同一发帖人 id 的所有记录,它们中的姓名部分都必须严格保持一致,这就是数据冗余。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现