螺竹编程
发布于 2024-05-19 / 6 阅读
1

Java面试题/Java基础: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");

过滤器和监听器

过滤器(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是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 应用程序,包括多个页面、请求和会话的一个全局作用域。