JavaWeb面试题
JavaWeb面试题
服务器
什么是Web服务器?
Web 服务器是一种对外提供 Web 服务的软件,它可以接收浏览器的 HTTP 请求,并将处理结果返回给浏览器。
Web服务器的作用?
将某个主机上的资源映射为一个URL供外界访问。
JavaBean
什么是JavaBeans?
JavaBeans是一种Java语言的组件模型,它提供了一种标准的方式来创建可重用的组件。JavaBeans通常用于构建Web应用程序中的业务逻辑和数据访问层。
JavaBeans有哪些特性?
JavaBeans有以下特性:
- 可序列化:JavaBeans可以被序列化到磁盘或通过网络传输。
- 可定制化:JavaBeans可以使用属性编辑器进行定制。
- 可持久化:JavaBeans可以使用持久化机制将数据存储到数据库中。
- 可组合:JavaBeans可以与其他JavaBeans组合使用。
- 可事件化:JavaBeans可以处理事件。
如何创建一个JavaBean?
创建一个JavaBean需要满足以下要求:
- 公共默认构造方法:JavaBean必须有一个公共的默认构造方法,没有参数。
- 私有属性:JavaBean必须有私有的属性。
- 公共的getter和setter方法:JavaBean必须有公共的getter和setter方法,用于访问私有属性。
- 实现Serializable接口(可选):如果需要将JavaBean序列化,则需要实现Serializable接口。
如何使用JavaBean?
使用JavaBean需要以下步骤:
- 创建JavaBean对象。
- 使用setter方法设置JavaBean的属性。
- 使用getter方法访问JavaBean的属性。
如何定制JavaBean的属性编辑器?
可以使用PropertyEditorSupport类来创建JavaBean的属性编辑器。需要继承PropertyEditorSupport类,并实现getAsText()和setAsText()方法来将属性值转换为字符串和将字符串转换为属性值。
例如,以下代码创建了一个自定义的日期属性编辑器:
public class DateEditor extends PropertyEditorSupport {
private DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
@Override
public void setAsText(String text) throws IllegalArgumentException {
try {
Date date = format.parse(text);
setValue(date);
} catch (ParseException e) {
throw new IllegalArgumentException("Invalid date format");
}
}
@Override
public String getAsText() {
Date date = (Date) getValue();
return format.format(date);
}
}
什么是JavaBean的自省?
JavaBean的自省是指通过反射来获取JavaBean的属性和方法信息。可以使用Introspector类来实现JavaBean的自省。
例如,以下代码获取了一个JavaBean的所有属性:
BeanInfo beanInfo = Introspector.getBeanInfo(MyBean.class);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : propertyDescriptors) {
System.out.println(pd.getName());
}
Servlet
什么是Servlet?
Servlet 是 Sun 公司推出的一种基于 Java 的动态网站开发技术。
Servlet是Java Web中的一种组件,它在服务器端接收HTTP请求并生成响应。Servlet通常用于动态生成Web页面,处理表单数据等。
编写 Servlet 代码需要遵循 Java 语法,一个 Servlet 程序其实就是一个按照 Servlet 规范编写的 Java 类。
什么是Servlet容器?
Servlet 容器就是 Servlet 代码的运行环境(运行时),它除了实现 Servlet 规范定义的各种接口和类,为 Servlet 的运行提供底层支持,还需要管理由用户编写的 Servlet 类,比如实例化类(创建对象)、调用方法、销毁类等。
Servlet的生命周期是什么?
Servlet的生命周期包括以下方法:
- init():当Servlet第一次被创建时调用,用于初始化Servlet。
- service():每次接收到HTTP请求时调用,用于处理请求并生成响应。
- destroy():当Servlet被销毁时调用,用于清理资源。
如何创建一个Servlet?
创建一个Servlet需要以下步骤:
- 创建一个Java类并继承HttpServlet类。
- 重写doGet()或doPost()方法,用于处理HTTP请求并生成响应。
- 在web.xml文件中配置Servlet的映射关系。
例如,以下代码创建了一个简单的Servlet:
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Hello World</title></head>");
out.println("<body>");
out.println("<h1>Hello World</h1>");
out.println("</body></html>");
}
}
如何获取Servlet的初始化参数?
可以使用getInitParameter()方法获取Servlet的初始化参数。Servlet的初始化参数可以在web.xml文件中配置。
例如,以下代码获取了一个名为"dbUrl"的初始化参数:
String dbUrl = getInitParameter("dbUrl");
如何获取HTTP请求参数?
可以使用HttpServletRequest对象的getParameter()方法获取HTTP请求参数。getParameter()方法接收一个参数名,返回参数值。
例如,以下代码获取了一个名为"name"的请求参数:
String name = request.getParameter("name");
如何在Servlet中使用会话(Session)?
可以使用HttpServletRequest对象的getSession()方法来获取会话对象。会话对象可以用来存储用户信息和状态。
例如,以下代码将一个名为"name"的属性存储到会话中:
HttpSession session = request.getSession();
session.setAttribute("name", "John");
过滤器和监听器
当涉及JavaWeb中的过滤器(Filter)和监听器(Listener)时,以下是一些常见的面试问题及其答案:
过滤器(Filter)的作用是什么?如何在JavaWeb应用程序中使用过滤器?
过滤器用于在请求到达目标资源之前或响应返回给客户端之前,对请求和响应进行预处理和后处理。它们用于实现一些共同的任务,如身份验证、日志记录、字符编码转换等。在JavaWeb应用程序中,可以通过在web.xml文件中配置过滤器来使用它们。
监听器(Listener)的作用是什么?如何在JavaWeb应用程序中使用监听器?
监听器用于监视Web应用程序中的事件,如Servlet生命周期事件、会话事件、上下文事件等。它们可以用于执行一些特定的任务,如在应用程序初始化时执行某些操作、在会话创建或销毁时执行某些操作等。在JavaWeb应用程序中,可以通过在web.xml文件中配置监听器来使用它们。
什么是过滤器链(Filter Chain)?
过滤器链是指多个过滤器按照一定的顺序组合在一起处理请求。当请求到达时,它会按照配置的顺序依次经过每个过滤器,每个过滤器可以对请求进行处理或修改,然后将请求传递给下一个过滤器,直到达到目标资源。过滤器链可以实现一系列过滤器的协作处理。
过滤器和拦截器(Interceptor)有什么区别?
过滤器和拦截器都是在请求处理过程中进行预处理和后处理的组件,但它们存在一些区别。过滤器是基于Servlet规范的一部分,运行在Servlet容器中,可以对所有请求进行拦截和处理。拦截器是特定于某个Web框架(如Spring MVC)的组件,它通过拦截控制器方法的调用来实现请求处理。另外,过滤器能够在请求和响应之间进行处理,而拦截器可以访问控制器方法的参数和返回值。
过滤器如何通过配置在web.xml文件中进行注册?
在web.xml文件中,可以使用以下配置来注册过滤器:
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.example.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
其中,<filter>
元素用于配置过滤器的名称和类名,<filter-mapping>
元素用于指定过滤器的映射规则,例如<url-pattern>
用于指定过滤器要拦截的URL模式。
JDBC
以下是几个常见的JDBC相关面试题及其答案:
JDBC是什么?它的作用是什么?
JDBC是Java Database Connectivity的缩写,是一种用于连接和操作数据库的Java API。它提供了一种标准的方式来访问不同类型的数据库。JDBC的作用是使Java程序能够与数据库进行通信,执行SQL语句并获取结果。
JDBC中的Statement和PreparedStatement有什么区别?
Statement和PreparedStatement都是用于执行SQL语句的接口,但有一些区别。Statement执行SQL语句时,每次都要将SQL语句发送给数据库进行编译,因此在执行相同的SQL语句时,Statement的性能会比较低。而PreparedStatement在第一次执行SQL语句时,会将SQL语句发送给数据库进行编译,并将编译结果缓存起来,以后执行相同的SQL语句时,只需将参数传递给预编译的语句即可,因此PreparedStatement的性能比Statement更好。此外,PreparedStatement还可以防止SQL注入攻击。
JDBC中如何处理事务?
JDBC中处理事务通常涉及到以下三个步骤: (1)获取连接:使用DriverManager类的getConnection()方法获取数据库连接。 (2)关闭自动提交:调用Connection对象的setAutoCommit()方法将自动提交设置为false。 (3)提交或回滚事务:如果事务执行成功,则调用Connection对象的commit()方法提交事务;如果出现错误,则调用Connection对象的rollback()方法回滚事务。
JDBC中如何处理结果集?
JDBC中的结果集通常使用ResultSet接口来表示。可以通过调用Statement或PreparedStatement对象的executeQuery()方法来执行SQL查询,并获取结果集。可以使用ResultSet对象的next()方法遍历结果集中的所有行,使用getXXX()系列方法获取每个字段的值。在使用完ResultSet对象后,需要调用close()方法将其关闭。
JDBC中如何处理Blob和Clob数据类型?
Blob和Clob都是用于存储大量文本或二进制数据的数据类型。在JDBC中,可以使用PreparedStatement的setBlob()和setClob()方法将Blob和Clob类型的数据插入到数据库中,使用ResultSet的getBlob()和getClob()方法从数据库中获取Blob和Clob类型的数据。在获取Blob和Clob类型的数据后,可以使用其对应的getBinaryStream()和getCharacterStream()方法获取数据流,并进行操作。
JSP
什么是JSP?
JSP(JavaServer Pages)是一种Java Web技术,它允许在HTML页面中嵌入Java代码。JSP的代码会在服务器端执行,生成动态的HTML页面。
JSP和servlet 有什么区别?
JSP 是 servlet 技术的扩展,本质上就是 servlet 的简易方式。servlet 和 JSP 最主要的不同点在于,servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的 html 里分离开来,而 JSP 的情况是 Java 和 html 可以组合成一个扩展名为 JSP 的文件。JSP 侧重于视图,servlet 主要用于控制逻辑。
说一下 JSP 的 4 种作用域?
JSP4中作用域从小到大: page < request < session < application
- page:代表与一个页面相关的对象和属性。
- request:代表与客户端发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件;需要在页面显示的临时数据可以置于此作用域。
- session:代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的 session 中。
- application:代表与整个 Web 应用程序相关的对象和属性,它实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。