ActionServlet深入探讨
servlet请求方法
servlet请求方法Servlet是用Java编写的服务器端程序,它可以处理来自客户端(浏览器)的请求并生成相应的响应。
在Servlet中,我们可以使用不同的请求方法来处理不同类型的请求。
下面是一些相关参考内容,介绍了常用的Servlet请求方法。
1. doGet方法:doGet方法用于处理客户端的GET请求。
在这种情况下,查询字符串会被附加到URL后面,并且可以通过getParameter方法来访问这些参数的值。
这个方法通常用于获取信息,而不是对服务器上的数据进行修改。
例如,一个简单的例子可以是根据用户的请求来返回一个HTML页面。
2. doPost方法:doPost方法用于处理客户端的POST请求。
与GET请求不同,POST请求将数据作为请求体的一部分发送给服务器。
在Servlet中,可以使用getParameter方法来访问这些参数的值。
这个方法通常用于在服务器上创建或更改数据。
例如,当用户提交一个表单时,表单数据会通过POST请求发送给服务器。
3. doPut方法:doPut方法用于处理客户端的PUT请求。
PUT请求用于向服务器添加新的资源或更新现有资源。
在Servlet中,可以使用getInputStream方法来读取请求的正文,并使用请求参数来访问表单字段的值。
这个方法通常用于在服务器上更新数据。
4. doDelete方法:doDelete方法用于处理客户端的DELETE请求。
DELETE请求用于删除服务器上的资源。
在Servlet中,可以使用getParameter方法来访问请求参数的值。
例如,当用户点击"删除"按钮时,可以通过发送DELETE请求来删除特定的数据。
5. doOptions方法:doOptions方法用于处理客户端的OPTION请求。
OPTION请求用于获取服务器支持的请求方法、请求头字段和响应头字段。
在Servlet中,可以使用setHeader方法来设置响应头字段,并使用getHeader方法来获取请求头字段的值。
servlet的基本运行流程
Servlet的基本运行流程Servlet是Java Web中的一种技术,能够处理来自客户端的请求并生成响应。
它是在Web服务器上运行的Java类,可以与容器进行交互。
下面将详细描述Servlet的基本运行流程的步骤和流程。
1. Servlet的生命周期Servlet的生命周期包括以下三个阶段: - 初始化阶段(Initialization) - 服务阶段(Service) - 销毁阶段(Destroy)1.1 初始化阶段在Servlet类被加载到容器中时,(通常在Web应用程序启动时),容器会实例化Servlet对象,并调用其init()方法来进行初始化。
该方法只会在Servlet生命周期中被调用一次。
1.2 服务阶段一旦Servlet被初始化后,在其生命周期内,任何对Servlet的请求都会被容器处理。
当接收到一个客户端请求时,容器会创建一个新的线程,并调用Servlet的service()方法来处理该请求。
service()方法会根据请求的类型(GET、POST等)来调用相应的方法(如doGet()、doPost()等)进行处理。
1.3 销毁阶段当Web应用程序被关闭或Servlet容器被关闭时,容器会调用Servlet的destroy()方法来清除资源、释放内存和进行最后的操作,以完成Servlet的销毁过程。
2. Servlet运行流程Servlet的运行流程包括以下几个步骤:2.1 客户端发送请求当客户端(如浏览器)向Web服务器发送一个HTTP请求时,请求首先会到达Web容器。
2.2 容器寻找匹配的ServletWeb容器根据请求的URL来确定匹配的Servlet。
容器会维护一个Servlet映射表,将URL与对应的Servlet进行关联。
2.3 容器创建或获取Servlet实例如果Servlet实例不存在,则容器会创建一个新的Servlet实例,并调用其init()方法来进行初始化。
ActionInvocation源码解读
ActionInvocation
1、ActionInvocation的实现类是
DefaultActionInvocation:
其中有一个invoke方法:
它控制了整个访问action的执行流程:先去查看注册的监听器,并以此调用拦截器的intercept方法,直到所有的都执行完毕。
它就去调用invokeAction方法,让action去执行。
Action执行完毕之后有去遍历所有的
preResultListener,并以此调用它们的beforeResult 方法。
然后就会接着执行executeResult方法:
executeResult方法调用result对象的execute方法:
它的result对象是由createResult方法得到到,我们跟进去看看,
调用proxy的getConfig方法,然后调用getResult 方法,这样就得到了Result的配置。
接着调用objectFactory的buildR方法,产生一个
Result对象,并返回。
好了,我们得到了result对象,看看这个result:
它是一个接口,我们查看它的实现类:
这正是resultType对应的类。
我们进入ServletDispatcherResult类里面看看:
先获得request、response dispatcher对象,
然后forward。
最后我们配置的resultpage就会呈现出来。
servlet工作原理
servlet工作原理
servlet是Java Web开发的重要组件之一,用于处理Web应用程序
的HTTP请求和响应。
servlet的工作原理如下:
1.客户端发起HTTP请求,包含请求头和请求体。
2. Web服务器(如Tomcat)接收请求,将请求头解析成HttpServletRequest对象,将请求体交给ServletInputStream对象。
3. 根据请求的URL匹配相应的servlet,创建一个新线程并将HttpServletRequest、HttpServletResponse对象传入servlet。
4. servlet处理请求,做出相应动作并生成响应数据,然后将响应
数据写入HttpServletResponse对象中。
5. HttpServletResponse对象将响应头和响应体发送给Web服务器。
6. Web服务器将响应头和响应体发送到客户端。
总之,servlet是在Web服务器上运行的Java程序,通过HTTP协议
对外提供服务,可以接收和处理请求,并生成相应的响应数据。
它们充当Web服务器和Web应用程序之间的中介,使开发人员可以以面向对象的方
式实现Web应用程序。
简述 servlet 的概念和技术特点。
简述servlet 的概念和技术特点。
解析:
servlet 的概念:Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态内容。
Servlet 技术具有如下特点:
1.方便:Servlet 提供了大量的实用工具例程,如处理很难完成的HTML 表
单数据、读取和设置HTTP 头,以及处理Cookie 和跟踪会话等。
2.跨平台:Servlet 使用Java 类编写,可以在不同的操作系统平台和不同的
应用服务器平台运行。
3.灵活性和可扩展性强:采用Servlet 开发的Web 应用程序,由于Java类
的继承性及构造函数等特点,使得应用灵活,可随意扩展。
三大框架的原理及优缺点
Struts的原理和优点.Struts工作原理MVC即Model-View-Controller的缩写,是一种常用的设计模式。
MVC减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。
MVC的工作原理,如下图1所示:Struts是MVC的一种实现,它将Servlet和JSP 标记(属于J2EE 规范)用作实现的一部分。
Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。
Struts的工作原理,视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库:Html,Bean,Logic,Template等,这有利于分开表现逻辑和程序逻辑。
控制:在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。
ActionServlet是一个通用的控制组件。
这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。
它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。
另外控制组件也负责用相应的请求参数填充ActionFrom(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。
动作类实现核心商业逻辑,它可以访问javabean或调用EJB。
最后动作类把控制权传给后续的JSP 文件,后者生成视图。
所有这些控制逻辑利用Struts-config.xml文件来配置。
模型:模型以一个或多个javabean的形式存在。
这些bean分为三类:ActionForm、Action、JavaBeanorEJB。
ActionForm通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。
Action通常称之为ActionBean,获取从ActionSevlet传来的FormBean,取出FormBean中的相关信息,并做出相关的处理,一般是调用JavaBean或EJB等。
Servlet工作原理
Servlet工作原理Servlet是Java编写的服务器端程序,用于处理客户端的请求并生成响应。
它是JavaEE(Java Enterprise Edition)规范的一部分,可以在支持Servlet规范的Web 服务器上运行。
Servlet工作原理可以概括为以下几个步骤:1. 客户端发起请求:当用户在浏览器中输入URL或点击链接时,会发送HTTP 请求到Web服务器。
2. Web服务器接收请求:Web服务器接收到客户端的请求后,会根据URL将请求发送给相应的Servlet。
3. Servlet容器加载Servlet:Servlet容器(如Tomcat)负责加载Servlet并创建Servlet实例。
Servlet容器是Web服务器的一部分,负责管理Servlet的生命周期和处理Servlet的请求。
4. Servlet初始化:在Servlet实例创建后,容器会调用其init()方法进行初始化。
在初始化阶段,可以进行一些必要的配置,如读取配置文件、建立数据库连接等。
5. 处理请求:一旦Servlet初始化完成,容器会调用其service()方法来处理客户端的请求。
service()方法根据请求的类型(GET、POST等)调用相应的doGet()、doPost()等方法进行处理。
6. 生成响应:在处理请求的过程中,Servlet可以通过调用response对象的方法生成响应内容。
可以设置响应的状态码、头部信息和正文内容。
7. 响应发送给客户端:当Servlet生成完响应后,容器会将响应发送给Web服务器,然后Web服务器将其传输给客户端。
8. Servlet销毁:当Web服务器关闭或重新加载Web应用时,容器会销毁Servlet实例。
在销毁之前,容器会调用Servlet的destroy()方法执行一些清理工作。
Servlet工作原理的关键是Servlet容器的管理和调度。
Servlet容器负责接收请求、加载Servlet、调用Servlet的方法、生成响应并发送给客户端。
servlet 的请求和响应处理机制
servlet 的请求和响应处理机制Servlet是JavaEE中的一种技术,用于处理Web请求和生成Web响应。
它是一个服务器端组件,运行在Web服务器中,可以接收HTTP 请求并返回HTTP响应。
在本文中,将详细介绍Servlet的请求和响应处理机制。
一、Servlet请求处理机制1. 请求的触发:当客户端发起HTTP请求时,请求会首先到达Web 服务器。
Web服务器根据URL的映射规则将请求转发给相应的Servlet组件进行处理。
2. Servlet的生命周期:Servlet的生命周期包括初始化、服务和销毁三个阶段。
在初始化阶段,Servlet会被实例化并执行一些初始化操作;在服务阶段,Servlet会根据请求的类型(GET、POST等)调用相应的方法进行处理;在销毁阶段,Servlet会被销毁并释放资源。
3. 请求参数的获取:Servlet可以通过HttpServletRequest对象获取请求中的参数。
可以通过getParameter()方法获取单个参数的值,也可以通过getParameterValues()方法获取多个参数的值。
4. 请求的处理:Servlet可以根据请求的类型(GET、POST等)执行相应的处理逻辑。
可以通过HttpServletRequest对象获取请求的URL、请求头、请求体等信息,并根据这些信息进行相应的处理。
二、Servlet响应处理机制1. 响应的生成:Servlet可以通过HttpServletResponse对象生成Web响应。
可以通过设置响应头、写入响应体等方式生成具体的响应内容。
2. 响应头的设置:Servlet可以通过HttpServletResponse对象设置响应头。
可以设置Content-Type、Content-Length、Cache-Control等头信息,以控制响应的内容类型、大小和缓存策略等。
3. 响应体的写入:Servlet可以通过HttpServletResponse对象将响应内容写入响应体。
Servlet工作原理解析
Servlet⼯作原理解析Tomcat中真正管理Servlet的是Context容器,⼀个Context对应⼀个Web⼯程,在Tomcat的配置⽂件中可以很容易发现:<Context path-"" docBase="" reloadable="true"/>Tomcat7开始⽀持嵌⼊式⽅式,通过添加⼀个启动类org.apache.catalina.startup.Tomcat,创建⼀个这个类的实例对象并调⽤start⽅法就可以很容易启动Tomcat(SpringBoot的内嵌Tomcat容器启动⼤概就基于此),还可以通过这个对象来添加和修改Tomcat的配置参数,如动态添加Context,Servlet 等Servlet容器启动过程添加⼀个Web应⽤时将会创建⼀个StandardContext对象,这个对象就是Tomcat中管理Servlet的Context具体对象了。
并且会给这个容器对象设置必要的参数,如url和path分别对应这个应⽤在Tomcat中的访问路径和这个应⽤实际的物理路径Tomcat的启⽤逻辑是基于观察者模式设计的,所有的容器都会继承Lifecycle(⽣命周期)接⼝,它管理着容器的整个⽣命周期,所有容器的修改和状态的改变都会由它去通知已经注册的观察者(Listener)Web应⽤的初始化⼯作Web应⽤的初始化⼯作是在ContextConfig的configureStart⽅法中实现的,引⽤⽤的初始化主要是解析web.xml⽂件,这个⽂件描述了⼀个Web 应⽤的关键信息,也是⼀个Web应⽤的⼊⼝web.xml⽂件中的各个配置项会被解析成相应的属性保存在WebXml对象中,如果当前的应⽤⽀持Servlet3.0还会完成⼀些额外的操作,这些操作主要是Servlet3.0新特性的解析以及对annotations注解的⽀持接下来将WebXml对象中的属性设置到Context容器中,当然这⾥包括创建Servlet对象,Filter,Listener等在Tomcat中Servlet会被包装成StandardWrapper,这是因为StandardWrapper是Tomcat容器的⼀部分,具有容器的特性,⽽Servlet作为独⽴的Web开发标准,不应该强耦合在Tomcat⾥,这⾥主要是为了解耦除了将Servlet包装成StandardWrapper并作为⼦容器添加到Context外,其他所有的web.xml属性都被解析到Context中,所以说Context才是真正运⾏Servlet的地⽅⼀个Web应⽤对应⼀个Context容器,容器的配置属性由应⽤的web.xml指定创建Ser vlet实例创建Se r v le t对象如果Servlet的load-on-startup配置项⼤于0,那么在Context容器启动时就会被实例化在Tomcat的conf下的web.xml⽂件(默认配置⽂件)定义了两个Servlet,分别是org.apache.catalina.servlets.DefaultServlet和org.apache.jasper.servlet.JspServlet。
servlet运行机制
servlet运行机制Servlet是Java Web开发中的重要组件,它是基于Java编写的服务器端程序,用于处理客户端的请求并生成响应。
本文将详细介绍Servlet的运行机制,包括Servlet的生命周期、Servlet容器和Servlet线程模型。
一、Servlet的生命周期Servlet的生命周期包括初始化阶段、请求处理阶段和销毁阶段三个阶段。
1. 初始化阶段:当Servlet容器加载Servlet时,会调用其init()方法进行初始化。
在该方法中,可以进行一些初始化的工作,如读取配置文件、建立数据库连接等。
当Servlet被初始化后,就可以接收并处理客户端的请求。
2. 请求处理阶段:当客户端发起请求时,Servlet容器会创建一个Servlet实例,并调用其service()方法来处理请求。
在service()方法中,可以根据请求类型(GET、POST等)执行相应的业务逻辑,并生成响应内容。
3. 销毁阶段:当Servlet容器关闭或重新加载Web应用时,会调用Servlet的destroy()方法进行销毁。
在该方法中,可以释放资源、关闭数据库连接等清理工作。
二、Servlet容器Servlet容器是指Web服务器或应用服务器,它负责加载、初始化、调用和销毁Servlet。
常见的Servlet容器有Tomcat、Jetty、GlassFish等。
1. 加载和初始化:当Servlet容器启动时,会读取Web应用的配置文件(如web.xml),根据配置信息加载并初始化Servlet。
初始化过程包括创建Servlet实例、调用init()方法等。
2. 调用和处理:当客户端发起请求时,Servlet容器会根据请求URL的映射规则找到对应的Servlet,并创建一个线程来处理该请求。
Servlet线程会调用Servlet的service()方法来处理请求,并生成响应。
3. 销毁:当Servlet容器关闭或重新加载Web应用时,会销毁所有已加载的Servlet。
简述servlet的作用
简述servlet的作用Servlet是Java编写的服务器端程序,用于处理客户端的HTTP请求并生成响应。
它是JavaEE(Java Enterprise Edition)的一部分,是构建动态Web应用程序的重要组件。
Servlet的作用主要有以下几个方面:1. 处理HTTP请求和生成响应:Servlet可以接收来自客户端的HTTP请求,并根据请求的内容进行相应的处理,例如查询数据库、计算、生成动态HTML等。
然后,Servlet可以生成一个包含响应内容的HTTP响应,返回给客户端。
2. 实现业务逻辑:Servlet可以作为Web应用程序的控制器,根据不同的请求参数或路径,调用相应的业务逻辑处理方法。
它可以处理用户注册、登录、查询、修改等各种业务功能。
3. 与数据库交互:Servlet可以通过Java的数据库连接技术(如JDBC)与数据库进行交互,实现数据的读取、插入、更新和删除等操作。
它可以接收客户端的请求,从数据库中查询数据并返回给客户端,或者将客户端提交的数据写入数据库。
4. 生成动态内容:Servlet可以根据客户端请求的不同,动态生成HTML、XML、JSON等格式的内容,并将其作为响应返回给客户端。
这样就可以实现个性化、实时更新的Web页面。
5. 跨域访问:Servlet可以处理跨域请求,通过设置响应头部信息,实现浏览器端的跨域访问控制。
这在多个域名或端口之间共享资源时非常有用。
6. 会话管理:Servlet可以通过会话对象(HttpSession)来管理用户会话状态。
它可以创建、销毁和跟踪会话,并存储和读取会话数据。
这对于实现用户登录、权限控制、购物车等功能至关重要。
7. 过滤和拦截:Servlet可以通过过滤器(Filter)来拦截请求和响应,对其进行预处理和后处理。
它可以用于验证用户身份、记录日志、压缩响应内容等。
通过过滤器,可以实现对请求和响应的统一处理,提高代码的复用性和可维护性。
servlet的执行流程
servlet的执行流程Servlet是JavaWeb中的一种特殊的Java类,用于处理Web请求和响应。
它是JavaWeb开发的重要组成部分,可以说是整个JavaWeb应用程序的核心。
本文将介绍Servlet的执行流程,以帮助读者更好地理解Servlet的工作原理。
一、Servlet的初始化在Servlet的生命周期中,初始化是第一个阶段。
当Web容器启动时,会创建Servlet的实例,并调用其init()方法进行初始化。
在init()方法中,可以进行一些必要的初始化操作,例如创建数据库连接、加载配置文件等。
需要注意的是,一个Servlet类只会被初始化一次,即使有多个请求同时访问。
二、处理请求当有请求到达服务器时,Web容器会根据请求的URL找到对应的Servlet,并调用其service()方法进行请求处理。
service()方法会根据请求的类型(GET、POST等)调用相应的doXXX()方法(例如doGet()、doPost()),这些方法是我们自己在Servlet中实现的。
三、请求参数获取在doXXX()方法中,我们可以通过HttpServletRequest对象获取请求的参数。
可以使用getParameter()方法获取单个参数的值,也可以使用getParameterValues()方法获取多个参数的值。
通过这些方法,我们可以获取到客户端传递过来的数据,并进行相应的处理。
四、业务逻辑处理在处理请求的过程中,我们可以根据具体的业务需求,对请求参数进行处理,并进行相应的业务逻辑操作。
例如,可以根据请求参数查询数据库、调用其他服务接口等。
在这个阶段,我们可以编写自己的业务代码,实现具体的功能。
五、生成响应在处理完业务逻辑后,我们需要生成响应结果并发送给客户端。
在Servlet中,我们可以通过HttpServletResponse对象来设置响应的内容和格式。
可以使用setContentType()方法设置响应的类型(如text/html、application/json等),使用getWriter()方法获取输出流,并使用println()方法将响应内容写入输出流。
servlet接口方法
servlet接口方法摘要:一、Servlet接口方法概述二、Servlet生命周期及其方法1.装载Servlet类2.创建Servlet实例3.初始化Servlet4.处理客户端请求5.终止Servlet三、Servlet接口方法详解1.void init(ServletConfig config)2.void service(ServletRequest req, ServletResponse res)3.void destroy()4.ServletConfig getServletConfig()5.String getServletInfo()正文:Servlet接口方法是Java Web开发中非常重要的部分,它定义了Servlet 的基本行为和功能。
Servlet接口共有四个方法,分别为init、service、destroy和getServletConfig、getServletInfo。
接下来,我们将详细介绍这五个方法。
首先,我们来了解一下Servlet的生命周期。
Servlet的生命周期主要包括五个阶段:装载Servlet类、创建Servlet实例、初始化Servlet、处理客户端请求和终止Servlet。
在这五个阶段中,涉及到Servlet接口的方法如下:1.装载Servlet类:当Web服务器接收到客户端的请求时,会根据请求的URL查找对应的Servlet类,并将该类加载到内存中。
这一阶段不涉及Servlet 接口的方法。
2.创建Servlet实例:服务器找到对应的Servlet类后,会创建一个Servlet实例。
这个实例主要用于处理后续的客户端请求。
3.初始化Servlet:创建Servlet实例后,服务器会调用init方法对Servlet进行初始化。
init方法只调用一次,用于完成一些一次性的工作,例如加载配置文件、初始化数据结构等。
4.处理客户端请求:Servlet初始化完成后,服务器会调用service方法来处理客户端的请求。
简述servlet体系结构
简述servlet体系结构
Servlet体系结构是一个 Web 应用程序。
Servlet体系结构由以下组成部分组成:
一、Servlet容器:
Servlet容器是一个Web服务器,它负责与客户端(例如浏览器)的通信,将客户端的请求转发给Servlet,并接收来自Servlet的响应,这样可以把Servlet摆脱和客户端通信的繁重工作。
二、Servlet
Servlet是一种Java类,它提供了与客户端HTTP请求和响应进行交互的能力,Servlet运行于Servlet容器中,Servlet通过HttpServletRequest对象获取客户端的请求,通过HttpServletResponse对象向客户端发送响应。
三、JavaServer Pages(JSP)
JSP是一种动态Web页面,它允许你将HTML代码和Java代码混合到一起,当用户访问JSP页面时,JSP页面被编译成 Servlet,然后Servlet被执行,给客户端返回一个静态页面。
四、JavaBean
JavaBean是一种可以编写在某种语言(如Java)中的、用于与其他组件集成的、一组相关属性和方法的对象模型。
它可用于在JSP 页面中获取和储存数据。
总之,Servlet体系结构包括Servlet容器、Servlet、JSP和JavaBean,它们各自起着重要的作用,共同构成了一个完整的Web应用程序。
servlet 规范
servlet 规范Servlet规范是一套由Java社区制定的标准,用于开发Web应用程序。
它定义了一种在Web服务器上运行的Java程序,用于处理客户端请求并生成动态内容。
Servlet规范分为两个层面:API(Application Programming Interface)和执行环境。
API定义了开发人员使用的类和接口,用于处理HTTP请求和响应。
执行环境是指Web服务器,它负责加载和执行Servlet程序,并提供运行时环境。
Servlet规范的主要内容包括:1. Servlet类和接口:Servlet规范定义了一些类和接口,用于开发Servlet程序。
其中最重要的是javax.servlet.Servlet接口,通过实现这个接口可以创建一个Servlet程序。
另外,javax.servlet.http.HttpServlet类是一个抽象类,提供了处理HTTP请求和生成HTTP响应的方法。
2. 生命周期管理:Servlet规范定义了Servlet的生命周期方法,包括init()、service()和destroy()。
init()方法在Servlet被加载时调用,用于进行一些初始化操作;service()方法在每次接收到客户端请求时调用,用于处理请求和生成响应;destroy()方法在Servlet被卸载时调用,用于释放资源。
3. URL映射和请求处理:Servlet规范定义了如何将URL映射到Servlet程序,并且规定了Servlet如何处理HTTP请求。
通过在web.xml文件中配置URL模式和Servlet类,可以将HTTP请求路由到相应的Servlet程序进行处理。
4. 请求和响应对象:Servlet规范定义了javax.servlet.ServletRequest和javax.servlet.ServletResponse接口,用于表示HTTP请求和响应。
这些接口提供了访问请求参数、请求头和响应内容的方法。
struts1之ActionServlet详解
struts1之ActionServlet详解在web.xml中我们除了配置ActionServlet还配置了一些初始化参数信息,首先我们看第一个config参数,这里配置的是/WEB-INF/struts-config.xml,因为要下面传递一个这样一个配置信息,这个xml文件名是struts1标准的名字,所以这里这个初始化信息完全可以删除,如果不用这个标准名称这里就必须要在这里配置。
现在我们配置的是标准名字,所以我们可以删除,这是为什么呢?这里要看ActionServlet源代码才可以。
从图片上我们能看到ActionServlet中已经写好了默认的config信息了,就是标准名字。
所以这里删除也是可以的。
在看下面的debug和detail参数,这两个参数信息是有关日志信息级别的设置,主要关于解析配置文件/WEB-INF/struts-config.xml级别的初始化参数。
这里这两个参数可以完全去掉也不影响。
最后还有一个load-on-startup配置,这个是初始化servlet级别的初始化信息,这个参数如果大于等于0就是说明在服务器一启动就把servlet初始化,也就是调用ActionServlet的init方法,这个也可以到ActionServlet的源代码中去查找。
当ActionServlet初始化的时候就会读取/WEB-INF/struts-config.xml信息到内存中,读到内存是以什么样的形式展现的呢?我们现在可以看一下以前博客的那个mvc实例,那里面读取配置文件中的信息是以Actionmapping的形式展现的。
另外servlet-mapping的配置就不讲解了,这个都知道就是匹配url路径的,当遇到url-pattern的路径时候就会实例化Actionservlet。
通过这篇文章我们知道了当我们请求的时候ActionServlet是怎样实例化的,也知道为什么我们要配置web.xml信息了。
webservlet注解原理
webservlet注解原理
WebServlet注解是Java Servlet规范中的一部分,用于帮助开发者在Servlet类上定义Servlet的属性。
它的原理是基于Java 的注解机制,通过在Servlet类上使用@WebServlet注解来配置Servlet的属性,以取代传统的在web.xml文件中配置Servlet的方式。
@WebServlet注解的原理是基于Java的元数据,它允许开发者在Servlet类上直接声明一些属性,如Servlet的URL映射、初始化参数、显示名称等。
当应用程序部署到Servlet容器时,容器会扫描应用程序中所有的类,当发现带有@WebServlet注解的类时,容器会根据注解中的配置信息来注册这个Servlet。
在实际运行时,容器会根据@WebServlet注解中配置的URL映射来匹配请求,并调用相应的Servlet类来处理请求。
这样,开发者可以通过@WebServlet注解来简化Servlet的配置,使得Servlet 的管理更加方便和灵活。
另外,@WebServlet注解也支持通过initParams属性来配置Servlet的初始化参数,通过loadOnStartup属性来指定Servlet
的加载顺序,通过asyncSupported属性来指示Servlet是否支持异步处理请求等功能,这些都是@WebServlet注解的原理所支持的特性。
总的来说,@WebServlet注解的原理是基于Java的注解机制,通过在Servlet类上使用注解来配置Servlet的属性,从而简化Servlet的配置和管理,提高开发效率。
同时,它也是Servlet 3.0规范引入的新特性,为Servlet开发带来了便利和灵活性。
struts的工作流程
struts的工作流程Struts的工作流程Struts是一个开源的Java Web应用程序框架,它的工作流程是一个基于MVC设计模式的过程。
本文将详细介绍Struts的工作流程,以帮助读者更好地理解和使用该框架。
1. 控制器层Struts的工作流程始于控制器层,它负责接收用户的请求并进行处理。
控制器层主要由ActionServlet组成,它是Struts框架的核心控制器。
当用户发起请求时,ActionServlet首先接收到请求,并根据配置文件中的映射规则将请求分发给相应的Action处理。
2. Action层Action层是Struts框架中的核心处理逻辑层。
当ActionServlet将请求分发给相应的Action后,Action会根据请求的类型和参数进行相应的处理。
Action可以从请求中获取用户提交的数据,并进行验证、处理和转换。
在处理完请求后,Action会将处理结果封装成一个ActionForm对象,并将控制权交给视图层。
3. 视图层视图层是Struts框架中负责展示数据的部分。
在Struts中,视图层通常由JSP页面来实现。
当Action将处理结果封装成ActionForm 对象后,它会将该对象传递给相应的JSP页面进行展示。
JSP页面可以通过EL表达式或JSTL标签库来访问ActionForm对象中的数据,并将其展示给用户。
4. 数据模型层数据模型层是Struts框架中负责处理业务逻辑的部分。
在Struts中,数据模型层通常由业务逻辑组件和数据访问组件组成。
业务逻辑组件负责处理业务逻辑,如验证用户输入、计算数据等;数据访问组件负责与数据库交互,如查询、插入、更新等操作。
在Struts的工作流程中,数据模型层主要由Action调用和协调。
以上就是Struts的基本工作流程。
当用户发起请求时,控制器层的ActionServlet接收到请求并将其分发给相应的Action处理。
Action负责处理请求并将处理结果封装成ActionForm对象。
action类的请求处理方法的返回类型
action类的请求处理方法的返回类型action类的请求处理方法的返回类型可以根据具体需求选择不同的类型,常用的类型包括void、String、ModelAndView、Map、List、Json等。
1. void类型:该返回类型表示不需要返回任何数据,一般用于处理不需要返回结果给前端的请求,例如只进行一些后台操作或仅仅返回状态码,由前端自行处理。
2. String类型:该返回类型表示返回一个字符串,通常用于返回页面的名称或者重定向的地址。
这种返回类型适用于传统的MVC模式,通过字符串返回视图的路径,让控制器跳转到指定页面。
3. ModelAndView类型:该返回类型表示返回一个ModelAndView对象,包含视图名称和模型对象。
视图名称表示要返回的页面,模型对象包含了需要在页面上显示的数据。
通常用于需要在请求中传递多个数据给前端的场景。
4. Map类型:该返回类型表示返回一个Map对象,可以将数据以键值对的形式传递给前端。
Map类型可以配合@ResponseBody注解使用,将数据自动转换成JSON格式并返回给前端。
5. List类型:该返回类型表示返回一个列表对象,用于返回一组数据给前端。
List类型同样可以配合@ResponseBody注解使用,将数据转换成JSON格式返回给前端。
6. Json类型:该返回类型表示返回一个JSON格式的数据,常用于前后端分离的项目中。
通过@ResponseBody注解,可以将Java对象转换成JSON格式返回给前端。
在实际开发中,可以根据需求选择合适的返回类型。
对于简单的请求,可以选择void或String类型;对于需要返回多个数据的请求,可以选择ModelAndView、Map或List类型;对于前后端分离的项目,Json类型是一个常见选择。
需要注意的是,在选择Json类型返回时,需要确保引入了相关的依赖库,例如Jackson或Gson,并在配置文件中进行相关的配置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ActionServlet深入探讨ng.Object|+--javax.servlet.GenericServlet|+--javax.servlet.http.HttpServlet|+--org.apache.struts.action.ActionServletStruts提供了一个缺省版本的ActionServlet类,你可以继承这个类,覆盖其中的一些方法来达到你的特殊处理的需要。
ActionServlet继承与javax.servlet.http.HttpServlet,所以在本质上它和一个普通的servlet没有区别,你完全可以把它当做一个servlet来看待,只是在其中完成的功能不同罢了。
ActionServlet主要完成如下功能:将一个来自客户端的URI映射到一个相应的Action类∙如果是这个Action类是第一次被调用,那么实例化一个并放入缓存∙如果在配置文件(struts-config.xml)中指定了相应的ActionForm,那么从Request中抓取数据填充FormBean∙调用这个Action类的perform()方法,传入ActionMapping的一个引用,对应的ActionForm、以及由容器传给ActionServlet的HttpServletRequest、HttpServletResponse对象。
确省版本的ActionServlet会从配置文件web.xml中读取如下初始化参数:∙application应用使用的资源包(resources bundle)的基类∙factory用于创建应用的MessageResources对象的MessageResourcesFactory的类名。
确省是org.apache.struts.util.PropertyMessageResourcesFactory。
∙configStruts的配置文件,确省是/WEB-INF/struts-config.xml。
注意这儿是与应用Context 关联的相对路径。
∙content定义了确省的内容类型和编码格式,它会被自动地被设置到每个response中,如果JSP/Servlet中没有明确的设置。
确省是text/html。
∙debug调试信息的级别。
默认为0,比当前级别高的调试信息会被log到日志文件中。
∙detail与debug的作用类似,只是这个detail是initMapping()时专用的。
调试信息会被打印到System.out,而不是日志文件。
∙formBeanActionFormBean的实现类,确省为org.apache.struts.action.ActionFormBean∙forward应用中使用的ActionForward类,确省是org.apache.struts.action.ActionForward。
∙locale指定了确省使用的Locale对象。
设为true,当得到一个session时,会自动在session 中存储一个以Action.LOCALE_KEY标示的Locale对象,如果session中还没有与Action.LOCALE_KEY绑定的Locale对象。
∙mapping应用中使用的ActionMapping类,确省是org.apache.struts.action.ActionMapping。
∙multipartClass文件上传使用的MutipartRequestHandler的实现类。
确省为org.apache.struts.upload.DiskMultipartRequestHandler∙nocache如果设为true,那么ActionServlet会自动在每个到客户端的响应中添加nocache的HTML头,这样客户端就不会对应用中的页面进行缓存。
确省为false∙null如果设置为true,那么应用在得到一个未定义的message资源时,会返回null,而不是返回一个错误信息。
确省是true。
∙maxFileSize文件上传的大小上限,确省为250M∙bufferSize文件上传时的缓冲区的大小,确省为4M∙tempDir设置用于上传时的临时目录。
工作目录会作为一个Servlet环境(Context)的属性提供。
∙validateAre we using the new configuration file format?确省为true。
∙validating在解析配置XML文件是是否进行有效性的验证。
确省为trueActionServlet中应用了命令设计模式。
一个Servlet在由容器生成时,首先会调用init()方法进行初始化,在接到一个HTTP请求时,调用相应的方法进行处理;比如GET请求调用doGet()方法,POST请求调用doPost()方法。
所以首先看看ActionServlet的init()方法,你就会很清楚为什么ActionServlet 可以完成这些功能了。
init()在它的init()方法中,ActionServlet依次调用如下protected的方法完成初始化:∙initActions() -大家可能还曾有这个疑问:Struts为什么可以找到一个请求URI对应的action类呢?答案就在这儿,ActionServlet有一个actions属性,类型为org.apache.struts.util.FastHashMap,用于存储以类的全名为key的已实例化的Action类。
在init()时首先调用的就是initActions()方法,在这个方法中只是简单的清除map中的所有的名值对,1.2.synchronized (actions) {3. actions.setFast(false);4. actions.clear();5. actions.setFast(true);6. }首先把actions设为slow模式,这时对FastHashMap的访问是线程同步的,然后清除actions中的所有的已存在的名/值对,最后再把actions的模式设为fast。
由于FastHashMap是struts在java.util.HashMap的基础上的一个扩展类,是为了适应多线程、并且对HashMap的访问大部分是只读的特殊环境的需要。
大家知道java.util.HashMap是非线程安全的,所以HashMap一般适用于单线程环境下。
org.apache.struts.FastHashMap就是继承于java.util.HashMap,在其中添加多线程的支持产生的。
在fast模式下的工作方式是这样的:读取是非线程同步的;写入时首先克隆当前map,然后在这个克隆上做写入操做,完成后用这个修改后的克隆版本替换原来的map。
那么在什么时候会把Actions类添加到这个map中呢?我们已经提到了struts是动态的生成Action类的实例的,在每次ActionServlet接收到一个GET或POST的HTTP 请求时,会在这个map中查找对应的Action类的实例,如果不存在,那么就实例化一个,并放入map中。
可见这个actions属性起到了对Action类实例的缓存的作用。
initInternal() -初始化ActionServlet内部使用的资源包MessageResources,使用MessageResources.getMessageResources(internalName)得到 internalName 为"org.apache.struts.action.ActionResources"对应的ActionResources.properties文件。
这个资源包主要用于ActionServlet处理过程中的用到的提示信息,这儿不展开讨论。
∙initDebug() -从web.xml中读取本应用的debug级别参数getServletConfig().getInitParameter("debug"),然后赋给debug属性。
∙initApplication()-初始化应用资源包,并放置入ServletContext中。
1.2.String factory =getServletConfig().getInitParameter(“factory”);3.String oldFacory = MessageResourcesFactory.getFactoryClass();4.if (factory !=null)5. MessageResourcesFactory.setFactoryClass(factory);6.String value = getServletConfig().getInitParameter("application");7. MessageResourcesFactory factoryObject =8. MessageResourcesFactory.createFactory();9. application = factoryObject.createResources(value);10. MessageResourcesFactory.setFactory(oldFactory);11. getServletContext().setAttribute(Action.MESSAGES_KEY, application);说明:文中引用的代码片断可能会省略了一些例外检查等非主线的内容,敬请注意。
首先从配置文件中读取factory参数,如果这个参数不为空,那么就在MessageResourcesFactory中使用这个指定的Factory类;否则,使用默认的工厂类org.apche.struts.util.PropertyMessageResourceFactory。
然后调用MessageResourcesFactory的静态createFactory()方法,生成一个具体的MessageResourceFactory对象(注意:MessageResourcesFactory是抽象类)。
这样就可以调用这个具体的MessageResourceFactory的createResource()方法得到配置文件(web.xml)中定义的资源文件了。
上面的application对象类型为MessageResources。
在web.xml中在配置ActionServlet时可以指定一个特定的工厂类。
不能直接MessageResourcesFactory的createResources()方法,因为这个方法是abstract的。