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对象将响应内容写入响应体。
- 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的。