- 浏览: 801986 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (120)
- Spring (10)
- ExtJs (2)
- Struts (15)
- Hibernate (4)
- 数据库 (2)
- Java (7)
- JSP (4)
- JavaScript (7)
- Oracle (5)
- 面试总结(收集的) (0)
- XML (3)
- 常用小技巧 (8)
- Ruby On Rails (4)
- JBPM (1)
- hsqldb (1)
- Java与模式 (5)
- Linux (5)
- WebLogic (2)
- FreeMarker (1)
- Android (1)
- PHP (1)
- Lucene (9)
- WebService----CXF (9)
- DB2 (4)
- MyBatis (1)
- JVM (3)
- GIT (1)
- JMS及ActiveMQ (4)
- Shiro (1)
最新评论
-
yadongliang:
楼主,我的地址栏http://localhost:8080/p ...
CXF之三(REST风格的支持) -
wangyudong:
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
CXF之三(REST风格的支持) -
renguoliang0508:
renguoliang0508 写道你好,我又来了,按你这里的 ...
CXF之六(对请求参数和返回给客户数据处理) -
renguoliang0508:
你好,我又来了,按你这里的实现。POST形式中获取不到参数。请 ...
CXF之六(对请求参数和返回给客户数据处理) -
renguoliang0508:
首先对您标示感谢,从拦截器的实现那篇参照做的,过程有点异常最终 ...
CXF之六(对请求参数和返回给客户数据处理)
ServletContext是定义在javax.servlet包中的对象。它定义了用于WEB应用中的服务器端组件关联servlet容器的方法集合。
ServletContext经常被用于存储对象的区域,这些对象在WEB应用中的所有的服务器端组件中使用。你可以把ServletContext当作在WEB应用中共享的存储区域。把一个对象放置到ServletContext中时,它存在于WEB应用的整个生命周期中,除非它被明确的删除或替换。在ServletContext中定义了四个方法来实现存储区的共享功能。
表2.1描述了四个方法:
方法名 |
描述 |
setAttribute(String name,Object obj) |
通过名称绑定一个对象并存储对象到当前ServletContext。如果指定的名称已经被使用过,这个方法会删除旧对象绑定为新对象。 |
getAttribute(String name) |
返回指定名称的对象,如果名称不存在返回null。 |
removeAttribute(String name) |
从ServletContext中删除指定名称的对象
|
getAttributeNames()
|
返回在ServletContext中的指定名称的对象集合 |
Web 应用和ServletContext的关系:
ServletContext 在WEB应用中充当容器的角色。在WEB应用中只有一个ServletContext 实例,Java Servlet规范指定ServletContext作为所有servlet 的容器。The ServletContext acts
为了了解它在WEB组件中的关系,我们将使用一个Servlet和一个JSP来说明。
在这个Servlet中。我们可以看到在ServletContext中存储的一个对象,这个对象在所有的服务端组件中都可使用。
列表2.2显示了servlet的源代码:
Listing 2.2 ContextServlet.java.
----------------------------------------------------------------------------------
package chapter2;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class ContextServlet extends HttpServlet {
private static final String CONTENT_TYPE = "text/html";
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Get a reference to the ServletContext
ServletContext context = getServletContext();
// Get the userName attribute from the ServletContext
String userName = (String)context.getAttribute("USERNAME");
// If there was no attribute USERNAME, then create
// one and add it to the ServletContext
if ( userName == null ) {
userName = new String("Bob Roberts");
context.setAttribute("USERNAME", userName);
}
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Context Servlet</title></head>");
out.println("<body>");
// Output the current value of the attribute USERNAME
out.println("<p>The current User is : " + userName +
".</p>");
out.println("</body></html>");
}
public void destroy() {
}
}
如你看到的ContextServlet,你注意到它执行了下面的步骤:
1.首先通过getServletContext()方法得到ServletContext的一个引用。
ServletContext context = getServletContext();
2.一旦你得到了ServletContext的引用,它将通过getAttribute()方法去获取绑定的名称的对象。绑定名称为USERNAME:.
String userName =(String)context.getAttribute("USERNAME");
3.检验返回的对象是否正确,如果getAttribute()方法返回null,说明没有对象绑定到名称USERNAME上。如果对象没有找到,它将创建一个,并添加到ServletContext中。绑定名称USERNAME,使用setAttribute()方法
// If there was no attribute USERNAME, then create
// one and add it to the ServletContext
if ( userName == null ) {
userName = new String("Bob Roberts");
context.setAttribute("USERNAME", userName);
}
4.通过PrintWriter.println(),传送获取的数据到输出流中。
// Output the current value of the attribute USERNAME
out.println("<p>The current User is : " +
userName + ".</p>");
编译你的servlet,并把编译后的class文件放到<CATALINA_HOME>/webapps/wileyapp/WEB-INF/classes/chapter2/目录下,这样servlet被部署到WEB应用中了。
在我们即将写的JSP中会和上面的servlet有很多相似之处,但是有两个不同的地方:ServletContext是在JSP脚本中本访问(这个问题我们将在本章稍后讨论)。
如果JSP中没有发现USERNAME属性,它不能添加一个新的。
代码实现的功能在本质上是一样的,只不过在JSP中。你可以查看源代码:
列表 2.3: Context.jsp.
<HTML>
<HEAD>
<TITLE>
Context
</TITLE>
</HEAD>
<BODY>
<%
// Try to get the USERNAME attribute from the ServletContext
String userName = (String)application.getAttribute("USERNAME");
// If there was no attribute USERNAME, then create
// one and add it to the ServletContext
if ( userName == null ) {
// Don’t try to add it just, say that you can’t find it
out.println("<b>Attribute USERNAME not found");
}
else {
out.println("<b>The current User is : " + userName +
"</b>");
}
%>
</BODY>
</HTML>
注意:Context.jsp中,我们使用了两个固有对象,application(用于引用ServletContext),out(用于输出流到客户端)。在这章的后面我们将讨论这两个对象。现在复制Context.jsp文件到<CATALINA_HOME>/webapps/wileyapp/,重新启动Tomcat;在浏览器中输入地址:
http://localhost:8080/wileyapp/Context.jsp
你会看到输出:Attribute USERNAME not found
Context.jsp没有发现USERNAME属性。如果你输入如下地址:
http://localhost:8080/wileyapp/servlet/chapter2.ContextServlet
会输出:The current User is Bob Roberts
运行servlet后,一个对象被绑定到ServletContext 中的属性USERNAME上,查看WEB应用的变化,打开前面的Context.jsp文件,地址为:http://localhost:8080/wileyapp/Context.jsp
USERNAME已经不为空。
注意:从ServletContext中删除一个对象的方法:重起JSP/Servlet容器或者使用ServletContext.removeAttribute()方法。
Using Servlets to Retrieve HTTP Data
在这一节,我们将实现servlet如何查找从客户端传送过来的信息。
有三个方法被用来查找:getParameter(), getParameterValues(), 和 getParameterNames()。每个方法的定义如下:
public String ServletRequest.getParameter(String name);
public String[] ServletRequest.getParameterValues(String name);
public Enumeration ServletRequest.getParameterNames ();
getParameter()方法返回单个字符串或者null(如果参数不存在),使用这个方法你确保只返回单个值。如果返回多个值,你必须使用getParameterValues()方法,它将返回一个字符串数组或返回null。getParameterNames()返回请求的参数名称的集合或者空集合。
为了了解如何使用这些方法查找数据,让我们来看servlet的Post方法,它是如何查找参数的,并把取得的值返回到客户端。
列表2.4: ParameterServlet.java.
-----------------------------------------------------------------
package chapter2;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class ParameterServlet extends HttpServlet {
public void init(ServletConfig config)
throws ServletException {
// Always pass the ServletConfig object to the super class
super.init(config);
}
// Process the HTTP GET request
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
// Process the HTTP POST request
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Parameter Servlet</title>");
out.println("</head>");
out.println("<body>");
// Get an enumeration of the parameter names
Enumeration parameters = request.getParameterNames();
String param = null;
// Iterate over the paramater names,
// getting the parameters values
while ( parameters.hasMoreElements() ) {
param = (String)parameters.nextElement();
out.println(param + " : " +
request.getParameter(param) +
"<BR>");
}
out.println("</body></html>");
out.close();
}
}
首先要注意的是servlet通过request的getParameterNames()方法取得所有的参数名。一旦取得参数集合后,它执行while循环来取得参数名和通过getParameter()来取得参数名对应的参数值,并打印。
创建一个HTML页面访问来ParameterServlet,如下:
列表 2.5: Form.html.
-------------------------------------------------------------
<HTML>
<HEAD>
<TITLE>
Parameter Servlet Form
</TITLE>
</HEAD>
<BODY>
<form
action="servlet/chapter2.ParameterServlet"
method=POST>
<table width="400" border="0" cellspacing="0">
<tr>
<td>Name: </td>
<td>
<input type="text"
name="name"
size="20"
maxlength="20">
</td>
<td>SSN:</td>
<td>
<input type="text" name="ssn" size="11" maxlength="11">
</td>
</tr>
<tr>
<td>Age:</td>
<td>
<input type="text" name="age" size="3" maxlength="3">
</td>
<td>email:</td>
<td>
<input type="text"
name="email"
size="30"
maxlength="30">
</td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td>
<input type="submit" name="Submit" value="Submit">
<input type="reset" name="Reset" value="Reset">
</td>
</tr>
</table>
</FORM>
</BODY>
</HTML>
这个HTML文件包含了一个简单的HTML form,它用来递交到ParameterServlet的请求。
编译servlet,复制class文件到:
<CATALINA_HOME>/webapps/ wileyapp/WEB-INF/classes/chapter2目录下
把HTML文件放到:
<CATALINA_HOME>/webapps/wileyapp/ 目录下。
现在打开浏览器,输入如下地址:http://localhost:8080/wileyapp/Form.html
输入数据,点击提交按钮,输出结果。
发表评论
-
HttpSessionListener 和HttpSessionBindingListener的区别
2009-08-04 08:49 2273使用HttpSessionListener编写一个Onlin ... -
使用HttpSessionBindingListener 方法
2009-08-04 08:47 14668捕获Session事件的意义: 1、 记录网站的客户登录 ... -
struts plugin
2009-07-31 09:18 1427第二篇 struts的执行 本篇详细介绍str ... -
web.xml中load-on-startup标签的含义
2009-07-31 09:11 1336在servlet的配置当中,<load-on-start ... -
使用Struts的PlugIn进行Web应用的扩展
2009-07-31 09:02 1324Struts提供了PlugIn的方式来扩展Struts的功 ... -
RequestProcessor及其在struts-config.xml中的配置
2009-07-30 17:37 1677RequestProcessor及其在struts-confi ... -
Struts1.整合Spring的三种方法
2009-06-23 13:37 1537使用 Spring 的 ActionSupport 类 ... -
struts使用list提交多行表单
2009-06-13 11:23 2882在struts框架中常常会遇到多行表单的情况, 如何有效的利用 ... -
五个有用的过滤器 Filter
2009-06-13 11:22 1188一、使浏览器不缓存页面的过滤器 import java ... -
利用令牌机制解决重复重复提交问题
2009-06-13 10:53 2077用Token解决重复重复提交:Struts利用同步令牌(Tok ... -
log4j的日志处理
2009-05-08 11:20 1701在日常的开发中经常需要通过输出一些信息进行程序的 ... -
Struts2中使用request,response对象方法
2009-05-07 14:05 1494***************1.[一般推荐使用](只能获得r ... -
Struts2中多次提交问题
2009-05-07 14:02 1361struts.xml如下: <?xml version= ... -
struts1的工作流程
2009-04-29 10:43 1753在web应用启动时就会加载初始化ActionServlet,A ...
相关推荐
### 精通Struts技术 #### 第一章:Jakarta Struts 项目的介绍和支持组件 **Jakarta Struts 项目简介** Jakarta Struts 是一个由 Apache Software Foundation 发起的开源项目,该项目实现了 Model-View-Controller...
`ServletContext`是Java Web开发中的一个关键概念,它是Servlet API的一部分,主要用于在多个Servlet之间共享信息。在Myeclipse这样的集成开发环境中,我们经常会用到`ServletContext`来增强应用程序的功能和交互性...
在Servlet的世界里,`ServletContext`扮演着至关重要的角色。它是一个全局的、跨.servlet共享的上下文对象,为整个Web应用提供了一个共享数据和资源的平台。在这个实例中,我们将深入探讨`ServletContext`如何用于...
3. **配置管理**:`ServletContext`用于存储全局配置信息,Struts2通过它获取配置文件和插件信息。 单元测试是软件开发中不可或缺的一部分,它可以帮助开发者确保代码的正确性和稳定性。在Struts2中,可以使用JUnit...
ServletConfig 与 ServletContext 的关系 在 Servlet 编程中,ServletConfig 和 ServletContext 两个对象经常被混淆,然而它们有着截然不同的作用域和用途。 首先, lets 看看 ServletConfig 对象。ServletConfig ...
在Java Web开发中,`ServletContext`是一个至关重要的接口,它代表了整个Web应用程序的上下文。这个上下文包含了关于Web应用的所有信息,如全局的初始化参数、资源、以及与所有Servlet共享的对象。在这个实例中,...
Ssh获取ServletContext 只需要更改struts-config action中的type就可以了ru :type="com.uo.spring.SpringDelegatingActionProxy" 大家有什么疑问可以直接去我的blog查看http://blog.csdn.net/chen1255/ 《[正解]Ssh...
`servletContext`是Servlet API中的一个关键概念,代表了整个Web应用程序的上下文。在这个上下文中,Servlet可以共享信息,如全局属性、监听器等。下面将详细讨论`servletContext`及其在实际开发中的应用。 一、...
ServletContext 读取 web 应用中的资源文件 在 Web 应用程序中,我们经常需要读取某些资源文件,如配置文件、图片等等。为了实现这一点,ServletContext 接口提供了一些方法来读取 web 应用中的资源文件,这些方法...
在Struts2中,由于设计模式的改变,我们不再直接使用Servlet对象,而是通过`ServletActionContext`来获取`ServletContext`。以下是在Struts2中获取相对路径的示例: ```java String upload_filepath = new File...
- 它是在`struts-default.xml`文件中定义的,此文件是Struts2框架默认加载的配置文件之一。 - 大多数情况下,建议项目中的每个自定义包都继承`struts-default`包,以便充分利用Struts2提供的功能。 #### 六、Struts...
Struts2 访问 Servlet API 方法总结 Struts2 框架提供了多种方式来访问 Servlet API,包括使用 ActionContext 类、实现接口和使用 ServletActionContext 类等。在本文中,我们将详细介绍 Struts2 访问 Servlet API ...
北大青鸟的这份文档是为了帮助学习者入门和精通Struts所编写的,包含了对Struts源码的详细解析。 首先,了解Struts的核心控制器ActionServlet是必要的。ActionServlet继承自javax.servlet.http.HttpServlet类,负责...
- **ActionServlet** 是Struts2的核心组件之一,用于处理HTTP请求。 - 在`web.xml`中,需要配置ActionServlet的初始化参数,例如资源文件路径等。 - 初始化参数通常包括`configuration`、`resources`等,用以指定...
它在Struts2框架中扮演着极其重要的角色,是Struts2实现动态数据处理的核心技术之一。 OGNL的主要特点包括: 1. **支持属性方法调用**:如`objName.methodName()`。 2. **支持内置函数调用**:例如`@java.lang....
每个模块的配置信息(ModuleConfig和MessageResources)会以模块名称作为标识存储在ServletContext中,方便后续请求的处理。 **总结** Struts 1.2的核心在于提供了一种规范化的架构,将业务逻辑、视图展示和控制...
Struts2是一个流行的Java web开发框架,用于构建可维护...以上就是Struts2框架中实现下载功能的核心步骤和技术要点,涵盖了配置、Action类的编写以及前端交互。通过这些步骤,开发者可以构建出一个可靠的文件下载系统。
Struts是Apache软件基金会下的一个开源框架,主要用于构建企业级的Java Web应用程序。它基于Model-View-Controller(MVC)设计模式,提供了一种结构化的、可扩展的方式来组织和控制应用程序的流程。在深入探讨Struts...