一,JavaWeb三大组件
1. Servlet程序(Servlet):Servlet是JavaWeb应用程序中处理请求和生成响应的基本组件。它是一个Java类,通过实现或继承Servlet接口来处理客户端请求,并生成响应数据。Servlet可以接收HTTP请求,执行业务逻辑,与数据库交互,并生成动态的HTML、XML、JSON等响应给客户端。Servlet的主要作用是处理请求和响应的交互逻辑。
2. Listener监听器(ServletContextListener、HttpSessionListener等):监听器用于监听Web应用程序中的事件,并在事件发生时执行相应的逻辑处理。常见的监听器包括ServletContextListener(监听Web应用程序的启动和关闭事件)、HttpSessionListener(监听会话的创建和销毁事件)、ServletRequestListener(监听请求的创建和销毁事件)等。通过监听器,开发人员可以在特定的事件发生时执行初始化、清理、日志记录等操作。
3. Filter过滤器(Filter):过滤器用于在请求和响应的处理过程中对数据进行拦截和处理。它可以修改请求或响应的数据,以实现诸如权限验证、请求转发、日志记录、字符编码转换等功能。过滤器可以在请求到达Servlet之前拦截请求,并在响应返回给客户端之前拦截响应,形成一个链式处理。一个请求可以经过多个过滤器的处理,每个过滤器可以在请求的处理前后进行操作和拦截。
总结而言,Servlet程序用于处理请求和生成响应数据,Listener监听器用于监听特定的Web应用程序事件执行相应逻辑,Filter过滤器用于对请求和响应数据进行拦截和处理。它们各自在Web应用程序开发中具有重要的作用,能够实现灵活的请求处理、事件监听和数据过滤。
二,实现servlet程序有几种方式,区别是什么
1.直接实现Servlet接口,
优势:
实现Servlet接口提供了更灵活的选项,可以自定义处理方式,并实现所有Servlet接口中定义的方法。
可以避免继承限制。
缺点:
需要实现Servlet接口中的所有方法,包括service()方法,这可能导致一些冗余代码。
2.继承HttpServlet类,
优势:
HttpServlet类是Servlet规范提供的一个抽象类,它已经实现了Servlet接口中的大部分方法,简化了开发过程。
继承HttpServlet类可以重写需要的方法,如doGet()和doPost()来处理相应的HTTP请求。
可以使用更多的便捷方法,如getParameter()和getSession()等,以用于处理请求参数和操作会话。
HttpServlet类提供了对HTTP协议的高级控制和扩展性。
缺点:
类只能继承一个类,如果已经继承了其他类,则无法再继承HttpServlet类
三,url如何定位到具体的某一个servlet去访问

通过url解析地址,ip表示访问到主机,端口号表示具体服务器,第一个/后是工程路径,第二个/具体的资源路径,即通过资源名称访问相应的类
四,Servlet生命周期
- 执行Servlet构造器方法(在第一次访问执行一次)
- 执行init初始化方法(在第一次访问执行一次)
- 执行service方法(每次访问都会调用)
- 执行destory销毁方法(工程/项目停止服务的时候执行)
五,Servlet为什么会空指针异常
1. 未在Servlet的生命周期方法中正确地调用父类的init方法:如果在Servlet的init方法中没有正确地调用父类的init方法,就会导致ServletConfig对象无法被正确初始化。在使用继承HttpServlet类的方式时,应确保调用父类的init方法。
2. 缺少配置或配置错误: 如果在部署描述符(如web.xml)中没有正确配置Servlet的初始化参数或者配置不正确,那么在访问ServletConfig对象时可能会引发空指针异常。确保在部署描述符中正确配置了Servlet的初始化参数。
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.example.MyServlet</servlet-class>
<init-param>
<param-name>param1</param-name>
<param-value>value1</param-value>
</init-param>
<!-- 其他配置 -->
</servlet>
六,ServletConext对象的介绍
- ServletContext是一个接口,它表示Servlet上下文对象。
- 一个Web工程,只有一个ServletContext对象实例。
- ServletContext对象是一个域对象。
- ServletContext是在Web工程部署启动的时候创建,在Web工程停止的时候销毁。
七,ServletConext和ServletConfig
ServletConfig接口:
- ServletConfig接口包含有关单个Servlet的配置信息,如Servlet的初始化参数和Servlet的名称。
- 通过该接口,可以获取Servlet的初始化参数、获取Servlet的名称以及访问ServletContext对象。
- 每个Servlet都有一个对应的ServletConfig对象,并由Servlet容器在Servlet实例化后通过init()方法将其传递给Servlet。
ServletContext接口:
- ServletContext接口表示Servlet在Web应用程序中的上下文信息,它提供了与Servlet容器交互以及访问Web应用程序范围内的资源的方法。
- 一个Web应用程序只有一个全局的ServletContext实例,它在整个应用程序的生命周期中存在,并且在所有的Servlet之间共享。
- 通过ServletContext接口,可以获取Web应用程序的初始化参数、访问Web应用程序的资源、在Web应用程序范围内共享数据等。
区别:
- 生命周期:
- ServletConfig对象的生命周期与Servlet的生命周期一致。在Servlet实例化时,ServletConfig对象被创建,并在调用Servlet的init()方法时被传递给Servlet。
- ServletContext对象的生命周期与Web应用程序的生命周期一致。在Web应用程序启动时,ServletContext对象被创建,并在Web应用程序关闭时被销毁。
- 范围:
- ServletConfig对象的作用范围是单个Servlet。
- ServletContext对象的作用范围是整个Web应用程序。所有的Servlet都可以访问同一个ServletContext对象,并共享其中的数据。
- 用途:
- ServletConfig主要用于获取Servlet的初始化参数、获取Servlet的名称以及访问ServletContext对象。
- ServletContext用于获取Web应用程序的初始化参数、获取Web应用程序的资源,以及在Web应用程序范围内共享数据。
总结起来,ServletConfig用于获取单个Servlet的配置信息,而ServletContext用于获取整个Web应用程序的上下文信息并支持跨Servlet共享数据。
九,常用方法
ServletContext中的常用方法:
- getInitParameter(String name):根据参数名获取Web应用程序的初始化参数值。
- getInitParameterNames():获取所有Web应用程序的初始化参数名。
- getAttribute(String name):根据属性名获取ServletContext中存储的属性值。
- getAttributeNames():获取所有ServletContext中存储的属性名。
- setAttribute(String name, Object value):设置ServletContext中的属性值。
- getRealPath(String path):根据相对路径获取对应的真实文件系统路径。
- getResource(String path):根据相对路径获取Web应用程序的资源URL。
- log(String message):记录一条日志信息到服务器日志文件。
ServletConfig中的常用方法:
- getInitParameter(String name):根据参数名获取当前Servlet的初始化参数值。
- getInitParameterNames():获取当前Servlet的所有初始化参数名。
- getServletContext():获取当前Servlet所属的ServletContext对象。
- getServletName():获取当前Servlet的名称。
需要注意的是,ServletContext对象是在Web应用程序级别中有效的,在整个Web应用程序的生命周期内存在。而ServletConfig对象是在Servlet级别中有效的,在每个Servlet实例创建时被创建。
十,doGet和doPost
doGet()的使用场景:
1. 获取资源:当客户端需要获取某个资源时,可以使用GET请求,并在doGet()方法中实现资源的获取和返回。比如获取网页、图片、文本文件等。
2. 数据查询:在应用程序中进行数据查询操作时,可以使用GET请求来传递查询参数,并在doGet()方法中处理查询逻辑,然后返回查询结果。
3. 数据呈现:当需要向客户端展示数据时,可以使用GET请求,并在doGet()方法中获取数据,并将其转化为合适的HTML、JSON或其他格式,然后返回给客户端。
doPost()的使用场景:
1. 数据提交:当客户端需要向服务器提交表单数据、文件上传等操作时,可以使用POST请求,并在doPost()方法中处理提交的数据,并执行相应的业务逻辑。
2. 数据修改:当需要修改服务器端的数据时,可以使用POST请求,将修改数据作为请求的参数,并在doPost()方法中实现数据的修改逻辑。
3. 数据添加:当需要向服务器添加新的数据项时,可以使用POST请求,将新的数据作为请求的参数,并在doPost()方法中实现数据的添加逻辑。
一般来说,GET请求用于获取数据,具有幂等性(是指一个操作在多次执行时产生相同的结果)和安全性;POST请求用于提交、修改和添加数据,具有副作用。
附:HTTP常用请求
1. GET:用于从服务器上获取资源。GET请求是幂等的,也就是说多次相同的GET请求应该返回相同的结果,不会产生副作用。
2. POST:用于向服务器提交数据,对服务器资源执行具有副作用的操作,如提交表单、上传文件等。POST请求不是幂等的,多次相同的POST请求可能会产生不同的结果。
3. PUT:用于向服务器上传或更新资源。PUT方法是幂等的,多次相同的PUT请求应该产生相同的结果。
4. DELETE:用于从服务器删除资源。DELETE方法是幂等的,多次相同的DELETE请求应该产生相同的结果。
5. HEAD:类似于GET请求,但服务器只返回头部信息,不返回实际的内容。主要用于获取资源的元数据,如响应大小、最后修改时间等。
6. OPTIONS:用于获取服务器支持的请求方法列表,或获取特定资源所支持的方法列表。
7. PATCH:用于对服务器资源进行部分更新。
十一,HttpServletRequest和Httpservletresponse对象是做什么用的
HttpServletRequest的作用包括:
1. 获取请求参数:开发人员可以使用HttpServletRequest提供的方法来获取HTTP请求中携带的参数。这可以用于从表单中获取用户输入、处理URL中的查询参数等。
2. 获取请求的方法和URI:HttpServletRequest提供了方法用于获取HTTP请求的方法(GET、POST等)和请求的URI(统一资源标识符),从而可以根据请求的不同进行相应的处理。
3. 获取请求头信息:通过HttpServletRequest可以获取到请求中的各种头信息,如用户代理、来源页面、认证信息等。这些头信息对于进行身份验证、浏览器兼容性处理等非常有用。
4. 与会话管理相关的操作:HttpServletRequest提供了方法来管理会话(Session),如获取会话对象、创建或销毁会话等。这可以用于在不同的请求之间共享数据或实现用户登录等功能。
5. 获取客户端的IP地址和安全信息:HttpServletRequest提供了方法来获取客户端的IP地址,从而可以进行IP限制、访问控制等操作。此外,还可以通过isSecure()方法判断请求是否使用了安全通道(如HTTPS)发送。
HttpServletResponse的作用包括:
1. 发送响应数据:通过HttpServletResponse可以向客户端发送响应数据。常用的方法有以下几种:
- PrintWriter getWriter():获取一个用于向客户端发送字符数据的PrintWriter对象。
- ServletOutputStream getOutputStream():获取一个用于向客户端发送原始字节数据的ServletOutputStream对象。
- void sendRedirect(String location):重定向到指定的URL。
2. 设置响应头:HttpServletResponse提供了一系列的方法,用于设置响应头的各种属性,如Content-Type、Content-Length、Cache-Control以及自定义的响应头字段等。常用的方法有以下几种:
- void setContentType(String type):设置响应的内容类型。
- void setContentLength(int len):设置响应的内容长度。
- void setHeader(String name, String value):设置响应头的指定字段值。
3. 控制响应的缓存:HttpServletResponse提供了方法来控制缓存响应数据,例如设置缓存的有效期、禁用缓存等。常用的方法包括:
- void setDateHeader(String name, long date):设置指定响应头的日期值。
- void setExpires(long expires):设置响应的失效时间。
- void setCacheControl(String control):设置缓存控制。
4. 控制重定向:HttpServletResponse提供了一些方法用于控制重定向行为,如设置重定向的状态码、设置重定向位置等。常用的方法包括:
- void setStatus(int sc):设置响应的状态码。
- void sendRedirect(String location):重定向到指定的URL。
5. 其他辅助方法:HttpServletResponse还提供了其他一些辅助方法,用于设置响应状态、处理错误等操作。例如:
- void setStatus(int sc):设置响应的状态码。
- void sendError(int sc):发送一个错误状态码到客户端。
十二,请求转发与重定向的区别
1. 请求和响应处理方式:
- 内部转发:在内部转发中,请求由服务器内部转发给其他资源进行处理,客户端并不知道发生了转发,浏览器的地址栏保持不变。转发后的资源处理完成后,结果直接返回给客户端。
- 重定向:在重定向中,服务器会发送一个特殊的响应给客户端,通知其需要发送新的请求到另一个URL。浏览器会重新发起新的请求,地址栏中的URL会更新,因此客户端会发起两次请求。
2. 地址栏变化:
- 内部转发:地址栏不会发生变化,客户端不知道服务端进行了内部转发。
- 重定向:地址栏会发生变化,显示重定向后的URL。
3. 请求和响应对象:
- 内部转发:在转发过程中,使用同一个请求对象和响应对象,共享数据容易,可以在转发的资源中直接访问请求和响应对象。
- 重定向:在重定向中,每次请求发送到新的URL时,都会创建一个新的请求对象和响应对象,无法直接共享数据。
4. 多次请求:
- 内部转发:只需要一次请求,服务器直接将请求转发给其他资源进行处理,然后将结果返回给客户端。
- 重定向:需要两次请求,第一次请求是重定向的响应,浏览器根据该响应发送第二次请求到新的URL。
针对选择使用内部转发还是重定向,通常有以下考虑:
- 内部转发:当需要将请求交给服务器内部的其他资源进行处理时,且希望共享同一个请求和响应对象,方便数据共享时,可以使用内部转发。
- 重定向:当需要告知客户端发起新的请求到不同的URL时,例如资源重定位、避免表单重复提交、处理POST-REDIRECT-GET模式时,可以使用重定向。

十二,jsp中的内置对象有哪些 四大作用域是什么
在JSP(JavaServer Pages)中,有以下几个内置对象(Implicit Objects):
1. request:代表了HttpServletRequest对象,用于获取和操作HTTP请求相关的信息和属性。
2. response:代表了HttpServletResponse对象,用于控制和发送HTTP响应到客户端。
3. out:代表了JspWriter对象,用于向客户端输出内容。
4. session:代表了HttpSession对象,用于管理与客户端的会话状态。
5. application:代表了ServletContext对象,用于管理整个Web应用程序的全局信息。
6. page:代表了当前JSP页面本身,可以用于调用当前页面中定义的方法。
7. pageContext:代表了PageContext对象,提供了对其他内置对象的访问和管理。
8. config:代表了ServletConfig对象,用于获取当前JSP页面的Servlet配置信息。
除了以上内置对象,还可以通过EL表达式(Expression Language)访问其他作用域中的数据。JSP提供了四大作用域对象,用于在不同的范围内存储和共享数据:
1. pageScope:页面范围,存储在page对象中,只在当前页面有效。
2. requestScope:请求范围,存储在request对象中,只在当前请求中有效。
3. sessionScope:会话范围,存储在session对象中,与特定用户的会话相关,跨多个请求有效。
4. applicationScope:应用范围,存储在application对象中,与整个Web应用程序相关,全局共享。

十三,关于listener监听器的认识
监听器(Listener)是JavaWeb中的一个重要组件,它用于监听Web应用程序中发生的事件,并在特定事件发生时执行相应的操作。监听器可以用来实现应用程序的初始化、销毁、属性变化等功能。
监听器在JavaWeb中的作用是:
1. 监听Web应用的生命周期事件:通过实现ServletContextListener接口,可以监听Web应用的初始化和销毁事件,即当Web应用启动或关闭时,监听器可以执行相应的初始化和清理工作。
2. 监听会话(Session)事件:通过实现HttpSessionListener接口,可以监听会话的创建和销毁事件,即当会话被创建或销毁时,监听器可以进行相应的处理。
3. 监听请求和响应事件:通过实现ServletRequestListener和ServletResponseListener接口,可以监听请求的创建和销毁事件,以及响应的创建和销毁事件。这样可以对请求和响应进行一些处理,比如记录日志、统计请求次数等。
4. 监听属性变化事件:通过实现ServletContextAttributeListener和HttpSessionAttributeListener接口,可以监听上下文和会话属性的添加、移除和修改事件,从而对属性的变化作出响应。
ServletContextListener是一个接口,定义了两个方法:
1. contextInitialized(ServletContextEvent event):在Web应用程序启动时调用,用于执行初始化操作。当ServletContext对象创建后,容器会调用该方法,并将ServletContextEvent对象作为参数传递给该方法。
2. contextDestroyed(ServletContextEvent event):在Web应用程序关闭或重新加载时调用,用于执行清理和销毁操作。当ServletContext对象销毁前,容器会调用该方法,并将ServletContextEvent对象作为参数传递给该方法。
十四,数据绘画跟踪技术有哪些,怎么用,区别是什么
数据会话跟踪技术指的是在Web应用程序中跟踪和管理用户会话状态的技术。它可以在多个请求之间保持用户的状态信息,使得Web应用程序能够区分不同用户的请求并提供个性化的服务。以下是常用的数据会话跟踪技术:
1. Cookie:Cookie是存储在客户端浏览器的小型文本文件,其中可以包含一些数据。Web应用程序可以通过设置Cookie将相关信息发送到客户端,并在后续的请求中读取该Cookie来识别用户。通过设置Cookie的过期时间,可以控制会话的生命周期。开发人员可以使用HTTP的Cookie相关API来操作Cookie。
2. Session:Session是在服务器端存储用户会话信息的一种机制。当用户第一次访问Web应用程序时,服务器会为每个用户创建一个唯一的Session对象,并为该Session分配一个对应的会话ID。服务器将会话ID发送给客户端,并存储在Cookie或URL中,供后续的请求识别用户。开发人员可以使用Servlet API或框架提供的API来操作Session,存储和获取数据。
3. URL 重写:URL重写是一种基于URL参数的会话跟踪技术。在每个页面链接或表单中,将会话ID作为参数添加到URL中,以便在请求中传递会话信息。服务器通过解析URL参数中的会话ID来识别用户并维护会话状态。开发人员需要手动在每个URL或表单中添加会话ID参数,来实现会话跟踪。
这些数据会话跟踪技术的区别在于数据存储的位置和操作的方式:
- Cookie是存储在客户端浏览器中的,可以通过设置和读取浏览器的Cookie来进行操作。Cookie大小通常有限制,且可以被用户修改或删除。
- Session是存储在服务器端的,可以通过Servlet API或框架提供的API来操作。服务器会为每个用户创建一个Session对象,并通过会话ID来识别用户。Session可以存储大量的数据,但是消耗服务器的资源。
- URL重写是将会话ID作为URL参数添加到每个页面链接或表单中,从而进行会话跟踪。这种方式不依赖于Cookie,可以在不支持Cookie的环境中使用。但是URL重写会暴露会话ID,可能存在安全风险。
总体而言,Cookie适合存储少量非敏感数据,并提供了一种简单的会话跟踪方式;Session适合存储较大量或敏感数据,提供了更安全的会话管理方式;URL重写适用于不支持Cookie的环境或对安全性要求较高的场景,但会对URL的可读性和复杂性产生影响。选择合适的会话跟踪技术应根据具体需求、安全性和用户体验来进行评估和选择。
十五,session的超时控制怎么操作
public void setMaxInactiveInterval(int interval)设置session的超时时间(以秒为单位),超过指定时长,session就会被销毁。
- 值为正数的时候,设定session的超时时长
- 值为负数表示永远不超时(极少使用)
- public int getMaxInactiveInterval()获取session的超时时间
- public void invalidate()让当前session会话马上失效(超时无效)session.invalidate();
Session默认的超时时间长为30分钟,我们可以在自己的web.xml配置文件中做配置,这样就可以修改我们的web项目所有session的默认时长。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
十六,Filter过滤器的理解
过滤器用于在请求和响应的处理过程中对数据进行拦截和处理。它可以修改请求或响应的数据,过滤器可以在请求到达Servlet之前拦截请求,并在响应返回给客户端之前拦截响应,形成一个链式处理。一个请求可以经过多个过滤器的处理,每个过滤器可以在请求的处理前后进行操作和拦截。
使用场景:权限检查,日志操作,事务管理

十七,Filter生命周期
Filter生命周期包含以下几个方法:
- 构造器方法
- init初始化方法
第1,2步,在Web工程启动的时候就执行(Filter已经创建)
- doFilter过滤方法
第三步,每次拦截到请求,就会执行
- destory销毁
第4步,停止web工程的时候,就会执行(停止web工程,也会销毁Filter过滤器)
FilterConfig类介绍
Tomcat 每次创建Filter 的时候,也会同时创建一个FilterConfig类,这里包含了Filter 配置文件的配置信息。FilterConfig类的作用是获取filter 过滤器的配置内容:
- 获取Filter 的名称filter-name 的内容
- 获取在Filter 中配置的init-param 初始化参数
- 获取ServletContext对象

十八,Filter拦截路径的三种配置方式
- 精确匹配
|
<url-pattern>/target.jsp</url-pattern> |
|
以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/target.jsp |
- 目录匹配
|
<url-pattern>/admin/*</url-pattern> |
|
以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/admin/* |
- 后缀名匹配
|
<url-pattern>*.html</url-pattern> |
|
以上配置的路径,表示请求地址必须以.html 结尾才会拦截到 |
|
<url-pattern>*.do</url-pattern> |
|
以上配置的路径,表示请求地址必须以.do 结尾才会拦截到 |
|
<url-pattern>*.action</url-pattern> |
|
以上配置的路径,表示请求地址必须以.action 结尾才会拦截到 |
Filter 过滤器它只关心请求的地址是否匹配,不关心请求的资源是否存在!!!
十九,过滤器链
过滤器链的工作原理如下:
1. 当请求到达Web应用程序时,首先会经过第一个过滤器。
2. 第一个过滤器执行自身的拦截逻辑,可以修改请求数据或进行其他处理,并将请求传递给下一个过滤器。
3. 下一个过滤器继续执行拦截逻辑,可以基于前一个过滤器的结果进行处理,并将请求再次传递给下一个过滤器。
4. 这个过程会一直持续,直到到达最后一个过滤器。
5. 最后一个过滤器执行完自身的处理逻辑后,将请求传递给目标Servlet程序进行最终的处理。
6. 在响应返回给客户端时,响应数据会按照相反的顺序经过每个过滤器的处理,以实现相应的响应拦截和处理。
通过这种链式处理的方式,过滤器链能够很好地实现对请求和响应的多重拦截和处理。每个过滤器可以根据自身的需要进行特定的操作,多个过滤器可以协同工作,实现灵活的请求处理和响应处理,需要注意的是,过滤器链的顺序非常重要,因为每个过滤器的处理逻辑可能依赖上一个过滤器的结果。开发人员可以通过在web.xml文件中配置过滤器的顺序,或使用注解或配置类来指定过滤器的顺序。


5422

被折叠的 条评论
为什么被折叠?



