Servlet 常用类记录

1. ActionContext   -  com.opensymphony.xwork2.ActionContext  它本身就是一个Map,这个Map中存放是Action执行时的上下文,这些上下文也是一些Map组成的,它的大体结构可能就是 Action(Map(session(Map(……)),application(Map(……)),locale(Map(……))……));
xwork框架的ActionContext是Action执行时的上下文,存放Action执行时需要用到的对象。在使用webwork时, 其中放有Parameter、Session、ServletContext、Locale等信息。这样,webwork负责将Servlet相关数据转 换为与ServletAPI无关的Map对象(即ActionContext),使得xwork的Action实现与web层、逻辑层与表现层的解耦。
ServletActionContext   extends  ActionContext
2. ServletActionContext  -  org.apache.struts2. ServletActionContext
提供直接与Servlet容器交互的途径。通过它,可以取得HttpServletRequest、HttpServletResponse 、ServletConfig、ServletContext、PageContext 对象。但是,使用 ServletActionContext意味着Action与ServletAPI的紧密耦合。

3. ServletContext   -  javax.servlet.ServletContext可以通过取得:getRealPath(), getInitParameter(), getInitParameterNames(), getAttribute(), getAttributeNames()等等。可以理解为在web中管理参数,页面间数据传递等方面的数据。
ServletContext接口表示一个web应用的上下文。可以想象成一个web一个能用的共享数据区域,该区域保存整个web共享数据。当 一个web应用启动的时候,就会创建该ServletContext接口的实现类。我们可以在根据需求,读写ServletContext这个web共享 区的数据,那么如何获得ServletContext这个实例呢?下面提供了两种方法
方法1:可以通过ServletConfig接口的 getServletContext()方法获得
方法2:通过GenericServlet抽象类的 getServletContext()方法获得,不过这个方法其实也是调用了ServletConfig的 getServletContext()方法

4. RequestDispatcher  -  javax.servlet. RequestDispatcher
RequestDispatcher是一个Web资源的包装器,可以用来把当前request传递到该资源,或者把新的资源包括到当前响应中。RequestDispatcher接口中定义了两个方法:include/forward
HttpServletResponse.sendRedirect()方法将响应定向到参数location指定的、新的URL。 location可以是一个绝对的URL,如response.sendRedirect("http://java.sun.com")也可以使用相对 的URL。如果location以“/”开头,则容器认为相对于当前Web应用的根,否则,容器将解析为相对于当前请求的URL。这种重定向的方法,将导 致客户端浏览器的请求URL跳转。从浏览器中的地址栏中可以看到新的URL地址,作用类似于上面设置HTTP响应头信息的实现。
RequestDispatcher.forward()方法将当前的request和response重定向到该 RequestDispacher指定的资源。这在实际项目中大量使用,因为完成一个业务操作往往需要跨越多个步骤,每一步骤完成相应的处理后,转向到下 一个步骤。比如,通常业务处理在Servlet中处理,处理的结果转向到一个JSP页面进行显示。这样看起来类似于Servlet链的功能,但是还有一些 区别。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源,而不仅仅是另外一个Servlet。 include()方法将把Request Dispatcher资源的输出包含到当前输出中。
如果需要从servlet向下一页面(jsp、servlet……)传递request中的值时,使用页面转发RequestDispatcher,使用方法如下:
RequestDispatcher rd = this.getServletConfig(). getServletContext().getRequestDispatcher("your URL");
d.forward(request.response);

5. ActionInvocation  - com.opensymphony.xwork2.ActionInvocation   将Web页面中的输入元素封装为一个(请求)数据对象
ActionInvocation是Xwork中 Action 的调度的核心。 而对 Interceptor 的调度,也是有 ActionInvocation 负责。ActionInvocation 是一个接口,而DefaultActionInvocation 则是Webwork 对ActionInvocation的默认实现。

6. PageContext  -  javax.servlet.jsp.PageContext extends JspContext 对象提供存取所有在此网页中可被利用的隐含对象,并且可以管理它们的属性。 是隐含对象对应于javax.servlet.jsp.PageContext型态之对象它的主要功能在提供一个单一个接口,以管理各种的公开对象(像是 HttpSession、ServletContext、ServletConfig、ServletRequest、ServletResponse等 等),提供一个单一的API来管理属性作用范围等等。也可以是隐含对象都自动的被加入至pageContext中,您可以藉由它来取得与JSP相关的隐含 对象对应之Servlet对象,像是 getRequest()可以取得ServletRequest,getServletConfig()可以取得ServletConfig, getSession()可以取得HttpSession等等。
7. Jsp 中特殊字符的处理
单引号 ' 改为 \'
双引号 " 改为 \"
斜线 \ 改为 \\
起始标签 结束标签 %> 改为 %\>

8. Jsp page 指令的使用
language ="scriptingLanguage"  主要指定JSP Container要用什么语言来编译JSP 网页。
JSP 2.0 规范中指出,目前只可以使用Java语言,不过未来不排除增加其他语言,如C、C++、Perl 等等。默认值为Java
extends = "className"          主要定义此JSP 网页产生的Servlet 是继承哪个父类
import = "importList"             主要定义此JSP 网页可以使用哪些Java API
session = "true | false"            决定此JSP 网页是否可以使用session 对象。默认值为true
buffer = "none | size inkb"        决定输出流 (output stream)是否有缓冲区。默认值为
8KB 的缓冲区
autoFlush = "true |false"          决定输出流的缓冲区是否要自动清除,缓冲区满了会产生异常 (Exception)。默认值为 true
isThreadSafe = "true |false        主要是告诉JSP Container,此JSP 网页能处理超过一个false" 以上的请求。默认值为 true,如果此值设为 false,SingleThreadModel 将会被使用。SingleThreadModel 在Servlet 2.4 中已经声明不赞成使用(deprecate)
info = "text"                     主要表示此JSP 网页的相关信息
errorPage = "error_url"           表示如果发生异常错误时,网页会被重新指向那一个URL
isErrorPage = "true |false"        表示此JSP Page 是否为处理异常错误的网页
contentType = "ctinfo"            表示MIME 类型和JSP 网页的编码方式
pageEncoding = "ctinfo"          表示JSP 网页的编码方式
isELIgnored = "true |false"        表示是否在此JSP 网页中执行或忽略EL 表达式。如果为true 时,JSP Container将


9.EL 隐含对象
PageContext    javax.servlet.ServletContext    表示此JSP 的PageContext
PageScope     java.util.Map        取得Page范围的属性名称所对应的值
RequestScope   java.util.Map       取得Request 范围的属性名称所对应的值
sessionScope   java.util.Map        取得Session 范围的属性名称所对应的值
applicationScope    java.util.Map    取得Application 范围的属性名称所对应的值
param         java.util.Map        如同ServletRequest.getParameter(String name)。回传String 类型的值

总结性概述:

-- 1 --
 ### ActionContext ###  --- 不能获得response对象

static ActionContext getContext()   获得当前线程的向下文
                           
                                    相当于
Object get(Object key)               ---- getAttribute()

void put( Object key, Object value ) ---- setAttribute()

Map getParameter()    相当于Servlet中的getParameterMap()

Map getApplication()   对应于ServletContext


如:

action
ActionContext.getContext().put("zhangsan","hello");

jsp
张三:${ requestScope.zhangsan }

 

-- 2 --
通过接口使用 --- 典型的依赖注入

### ServletContextAware ### 接口

void setServletContext( ServletContext )

### ServletRequestAware ### 接口

void setServletRequest( HttpServletRequest )

### ServletResponseAware ### 接口

void setServletResponse( HttpServletResponse )


例:
public class LoginAction extends ActionSupport
 implements ServletRequestAware,
  ServletResponseAware {

 private String username;
 private String password;
 //setter...getter...

 private HttpServletRequest request;
 private HttpServletResponse response;

 public String execute() throws Exception {

  //使用request对象 
  request.setAttribute("zhangshan","hello");

  //使用response对象
  Cookie cookie = new Cookie("username",
      this.getUsername());
  cookie.setMaxAge(1000);
  response.addCookie(cookie);

  return "success";
 }

 //这个方法由Strust2框架来自动调用
 //调用后,便可以使用容器的request对象了
 public void setServletRequest(HttpServletRequest request) {

  this.request = request;
 }

 public void setServletResponse(HttpServletResponse responset) {

  this.response = response;
 }
}


---------------------
jsp页面中显示cookie

 cookie: ${ cookie.username.value }

--------------------


-- 3 --

使用 org.apache.struts2.ServletActionContext
---继承于 com.opensymphony.xwork2.ActionContext

内部全部为static的方法

static ActionContext getActionContext(HttpServletRequest req)

static PageContext getPageContext() 

static HttpServletRequest getRequest()
 
static HttpServletResponse getResponse() 

static ServletContext getServletContext() 

static ValueStack getValueStack(HttpServletRequest req) 

-----

static void setRequest(HttpServletRequest request)

static void setResponse(HttpServletResponse response)

static void setServletContext(ServletContext servletContext)

 

例:
public class LoginAction extends ActionSupport {

 private String username;
 private String password;
 //setter...getter...

 

 public String execute() throws Exception {

  HttpServletResponse response = ServletActionContext.getResponse();
  HttpServletRequest request = ServletActionContext.getRequest();
  HttpSession session = request.getSession();

  return "success";
 }
}



Web 应用程序开发中,除了将请求参数自动设置到 Action 的字段中,我们往往也需要在 Action 里直接获取请求 (Request) 或会话( Session )的一些信息 , 甚至需要直接对 JavaServlet Http 的请求( HttpServletRequest )、响应 (HttpServletResponse) 操作。
我们需要在 Action 中取得 request 请求参数“ username ”的值:
ActionContext context = ActionContext.getContext();
Map params = context.getParameters();
String username = (String) params.get(“username”);
ActionContext com.opensymphony.xwork.ActionContext )是 Action 执行时的上下文,上下文可以看作是一个容器(其实我们这里的容器就是一个 Map 而已),它存放放的是 Action 在执行时需要用到的对象
一般情况,我们的 ActionContext 都是通过: ActionContext context = (ActionContext) actionContext.get(); 来获取的。我们再来看看这里的 actionContext 对象的创建: static ThreadLocal actionContext = new ActionContextThreadLocal(); ActionContextThreadLocal 是实现 ThreadLocal 的一个内部类。 ThreadLocal 可以命名为“线程局部变量”,它为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。这样,我们 ActionContext 里的属性只会在对应的当前请求线程中可见,从而保证它是线程安全的。
下面我们看看怎么通过 ActionContext 取得我们的 HttpSession
Map session = ActionContext.getContext().getSession()
ServletActionContext com.opensymphony.webwork. ServletActionContext ),这个类直接继承了我们上面介绍的 ActionContext ,它提供了直接与 JavaServlet 相关对象访问的功能,它可以取得的对象有:
1、    javax.servlet.http.HttpServletRequest HTTPservlet 请求对象
2、    javax.servlet.http.HttpServletResponse; HTTPservlet 相应对象
3、    javax.servlet.ServletContext Servlet 上下文信息
4、    javax.servlet.ServletConfig Servlet 配置对象
5、    javax.servlet.jsp.PageContext Http 页面上下文
下面我们看看几个简单的例子,让我们了解如何从 ServletActionContext 里取得 JavaServlet 的相关对象:
1、    取得 HttpServletRequest 对象:
HttpServletRequest request = ServletActionContext. getRequest();
2、    取得 HttpSession 对象:
HttpSession session = ServletActionContext. getRequest().getSession();
ServletActionContext ActionContext 有着一些重复的功能,在我们的 Action 中,该如何去抉择呢?我们遵循的原则是:如果 ActionContext 能够实现我们的功能,那最好就不要使用 ServletActionContext ,让我们的 Action 尽量不要直接去访问 JavaServlet 的相关对象。在使用 ActionContext 时有一点要注意:不要在 Action 的构造函数里使用 ActionContext.getContext() ,因为这个时候 ActionContext 里的一些值也许没有设置,这时通过 ActionContext 取得的值也许是 null

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17179887/viewspace-610525/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/17179887/viewspace-610525/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值