精华内容
下载资源
问答
  • 在 java 中, 常见的 Context 有很,像: ServletContext, ActionContext, ServletActionContext, ApplicationContext, ... 直译是上下文、环境的意思。比如像: "今天我收到了一束花, 男朋友送的!" 又或者 "今天...

    在 java 中, 常见的 Context 有很多,

    像: ServletContext, ActionContext, ServletActionContext, ApplicationContext, PageContext, SessionContext ...

    那么, Context 究竟是什么东西呢? 直译是上下文、环境的意思。比如像: "今天我收到了一束花, 男朋友送的!" 又或者 "今天我收到了一束花, 送花的人送错了的!"

    同样是收到一束花, 在不同的上下文环境中表达的意义是不一样的。

    同样的, Context 其实也是一样, 它离不开所在的上下文环境, 否则就是断章取义了。

    另外, 在网络上也有些人把 Context 看成是一些公用信息或者把它看做是一个容器的, 个人觉得这种解释稍好。

    接下来说说 ServletContext, ActionContext, ServletActionContext。

    1> ServletContext

    一个 WEB 运用程序只有一个 ServletContext 实例, 它是在容器(包括 JBoss, Tomcat 等)完全启动 WEB 项目之前被创建, 生命周期伴随整个 WEB 运用。

    当在编写一个 Servlet 类的时候, 首先是要去继承一个抽象类 HttpServlet, 然后可以直接通过 getServletContext() 方法来获得 ServletContext 对象。

    这是因为 HttpServlet 类中实现了 ServletConfig 接口, 而 ServletConfig 接口中维护了一个 ServletContext 的对象的引用。

    利用 ServletContext 能够获得 WEB 运用的配置信息, 实现在多个 Servlet 之间共享数据等。

    eg:

    url

    jdbc:oracle:thin:@localhost:1521:ORC

    username

    scott

    password

    tigger

    ConnectionServlet

    net.yeah.fancydeepin.servlet.ConnectionServlet

    ConnectionServlet

    /ConnectionServlet.action

    PrepareConnectionServlet

    net.yeah.fancydeepin.servlet.PrepareConnectionServlet

    PrepareConnectionServlet

    /PrepareConnectionServlet.action

    package net.yeah.fancydeepin.servlet;import java.io.IOException;

    import javax.servlet.ServletContext;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    public class PrepareConnectionServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void init() throws ServletException {

    ServletContext context = getServletContext();

    String url = context.getInitParameter("url");

    String username = context.getInitParameter("username");

    String password = context.getInitParameter("password");

    context.setAttribute("url", url);

    context.setAttribute("username", username);

    context.setAttribute("password", password);

    }

    protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{

    doPost(request, response);

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    response.sendRedirect("ConnectionServlet.action");

    }

    }

    package net.yeah.fancydeepin.servlet;

    import java.io.IOException;

    import javax.servlet.ServletContext;

    import javax.servlet.ServletException;

    import javax.servlet.ServletRequest;

    import javax.servlet.ServletResponse;

    import javax.servlet.http.HttpServlet;

    public class ConnectionServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {

    ServletContext context = getServletContext();

    System.out.println("***************************************");

    System.out.println("URL: " + context.getAttribute("url"));

    System.out.println("Username: " + context.getAttribute("username"));

    System.out.println("Password: " + context.getAttribute("password"));

    System.out.println("***************************************");

    super.service(request, response);

    }

    }

    当访问 PrepareConnectionServlet.action 时, 后台打印输出:

    ***********************************************

    URL:  jdbc:oracle:thin:@localhost:1521:ORC

    Username:  scott

    Password:  tigger

    ***********************************************

    2> ActionContext

    ActionContext 是当前 Action 执行时的上下文环境, ActionContext 中维护了一些与当前 Action 相关的对象的引用,

    如: Parameters (参数), Session (会话), ValueStack (值栈), Locale (本地化信息) 等。

    在 Struts1 时期, Struts1 的 Action 与 Servlet API 和 JSP 技术的耦合度都很紧密, 属于一个侵入式框架:

    public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){

    // TODO Auto-generated method stub

    return null;

    }

    到了 Struts2 时期, Struts2 的体系结构与 Struts1 之间存在很大的不同。Struts2 在 Struts1 的基础上与 WebWork 进行了整合, 成为了一个全新的框架。

    在 Struts2 里面, 则是通过 WebWork 来将与 Servlet 相关的数据信息转换成了与 Servlet API 无关的对象, 即 ActionContext 对象。

    这样就使得了业务逻辑控制器能够与 Servlet API 分离开来。另外, 由于 Struts2 的 Action 是每一次用户请求都产生一个新的实例, 因此,

    ActionContext 不存在线程安全问题, 可以放心使用。

    package net.yeah.fancydeepin.action;

    import java.util.Map;

    import com.opensymphony.xwork2.ActionContext;

    import com.opensymphony.xwork2.ActionSupport;

    import com.opensymphony.xwork2.util.ValueStack;

    public class ContextAction extends ActionSupport {

    private static final long serialVersionUID = 1L;

    private String username;

    private String password;

    public String execute(){

    ActionContext context = ActionContext.getContext();

    ValueStack value = context.getValueStack();

    value.set("username", username);

    value.set("password", password);

    Map session = context.getSession();

    session.put("url", "http://www.blogjava.net/fancydeepin");

    return SUCCESS;

    }

    public void setUsername(String username) {

    this.username = username;

    }

    public void setPassword(String password) {

    this.password = password;

    }

    }

    当访问 context.action 并传给相应的参数的时候, 在浏览器中会输出相应的信息。

    留意到上面 Struts2 的 Action 中并有没添加属性的 getting 方法, 而是手动的将参数值放到值栈(ValueStack)中的, 否则页面是得不到参数来输出的。

    3> ServletActionContext

    首先, ServletActionContext 是 ActionContext 的一个子类。ServletActionContext 从名字上来看, 意味着它与 Servlet API 紧密耦合。

    ServletActionContext 的构造子是私有的, 主要是提供了一些静态的方法, 可以用来获取: ActionContext, ActionMapping, PageContext,

    HttpServletRequest, HttpServletResponse, ServletContext, ValueStack, HttpSession 对象的引用。public String execute(){

    //或 implements ServletRequestAware

    HttpServletRequest request = ServletActionContext.getRequest();

    //或 implements ServletResponseAware

    HttpServletResponse response = ServletActionContext.getResponse();

    //或 implements SessionAware

    HttpSession session = request.getSession();

    //或 implements ServletContextAware

    ServletContext context = ServletActionContext.getServletContext();

    return SUCCESS;

    }

    好文分享

    转发自http://www.blogjava.net/fancydeepin/archive/2013/03/31/java-ee-context.html

    展开全文
  • 有时,我们通过在jboss-web.xm l中定义一个来对应用程序进行更改,以支持利用JBoss功能的多个上下文根,如下所示: webapp / WEB-INF / jboss-web.xml: <?xml version="1.0" encoding="UTF-8"?> <...

    jboss 配置上下文路径

    有时,我们通过在jboss-web.xm l中定义一个来对应用程序进行更改,以支持利用JBoss功能的多个上下文根,如下所示:

    webapp / WEB-INF / jboss-web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-web>
      <context-root>appA</context-root>
      <session-config>
        <session-timeout>10</session-timeout>
      </session-config>
    </jboss-web>

    并在standalone.xml中的子系统之一的虚拟服务器中定义重写规则以支持其他上下文根,如下所示:

    jboss-eap / standalone / configuration / standalone.xml:

    <subsystem xmlns="urn:jboss:domain:web:2.2" default-virtual-server="default-host" native="false">
        <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
        <virtual-server name="default-host" enable-welcome-root="true">
          <alias name="localhost"/>
          <alias name="example.com"/>
          <rewrite name="rule-1" pattern="^/appB(.*)$" substitution="/appA$1" flags="L"/>
          <rewrite name="rule-2" pattern="^/appC(.*)$" substitution="/appA$1" flags="L"/>
        </virtual-server>
    </subsystem>

    我们很高兴进行上述配置更改,然后在今天将相同的配置推广到生产服务器的同时,团队又回到我们的手中,由于一些安全策略,它们无法在生产中使欢迎使用根目录成为“ true” ,如果我们将其设为“ false”不再支持多个上下文。

    然后,我们开始寻找可用于虚拟服务器的不同配置选项来解决此问题,并发现我们必须使用“ /”上下文配置JBoss以支持其他上下文,并且由于我们的应用程序的上下文为“ / appA”没有可用的“ /”上下文,并且无法重写上下文。

    然后我们有两个立即修复方法:首先是将应用程序上下文重新定义为“ /” ,这需要更改.war文件;其次是在JBoss部署中删除另一个上下文上下文为“ /”的应用程序,并在团队处于生产部署的中间,我们无法在.war文件中进行更改,因此我们首先选择了第二个选项,即部署了另一个上下文上下文为“ /”的 webapp。

    翻译自: https://www.javacodegeeks.com/2017/05/configuring-multiple-context-root-single-webapp-jboss.html

    jboss 配置上下文路径

    展开全文
  • java web上下文理解

    千次阅读 2018-03-01 17:34:55
    web上下文可以看成web应用的运行环境,一般用context名字来修饰,里面保存了web应用相关的一些设置和全局变量2.ServletContext,是一全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。...

    1.context就是“容器”,放的就是应用程序的所有资源,要用时候就访问它,所以context里面的东西,在同一个应用程序里面是全局的;web上下文可以看成web应用的运行环境,一般用context名字来修饰,里面保存了web应用相关的一些设置和全局变量

    2.ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息;

    HttpSession session =request.getSession();
    session.getServletContext();

    3.avaWeb中的上下文环境概念就是:一个web服务启动后的整个服务中的所有内存对象和他们之间的关系组成的一种环境

    spring 上下文和spring mvc上下文和web应用上下文servletContext之间的关系

    要想很好理解这三个上下文的关系,需要先熟悉spring是怎样在web容器中启动起来的。spring的启动过程其实就是其IoC容器的启动过程,对于web程序,IoC容器启动过程即是建立上下文的过程。

    spring的启动过程:

    1. 首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器提供宿主环境;

    2. 其次,在web.xml中会提供有contextLoaderListener。在web容器启动时,会触发容器初始化事件,此时contextLoaderListener会监听到这个事件,其contextInitialized方法会被调用,在这个方法中,spring会初始化一个启动上下文,这个上下文被称为根上下文,即WebApplicationContext,这是一个接口类,确切的说,其实际的实现类是XmlWebApplicationContext。这个就是spring的IoC容器,其对应的Bean定义的配置由web.xml中的context-param标签指定。在这个IoC容器初始化完毕后,spring以WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE为属性Key,将其存储到ServletContext中,便于获取;

    3. 再次,contextLoaderListener监听器初始化完毕后,开始初始化web.xml中配置的Servlet,这个servlet可以配置多个,以最常见的DispatcherServlet为例,这个servlet实际上是一个标准的前端控制器,用以转发、匹配、处理每个servlet请求。DispatcherServlet上下文在初始化的时候会建立自己的IoC上下文,用以持有spring mvc相关的bean。在建立DispatcherServlet自己的IoC上下文时,会利用WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE先从ServletContext中获取之前的根上下文(即WebApplicationContext)作为自己上下文的parent上下文。有了这个parent上下文之后,再初始化自己持有的上下文。这个DispatcherServlet初始化自己上下文的工作在其initStrategies方法中可以看到,大概的工作就是初始化处理器映射、视图解析等。这个servlet自己持有的上下文默认实现类也是mlWebApplicationContext。初始化完毕后,spring以与servlet的名字相关(此处不是简单的以servlet名为Key,而是通过一些转换,具体可自行查看源码)的属性为属性Key,也将其存到ServletContext中,以便后续使用。这样每个servlet就持有自己的上下文,即拥有自己独立的bean空间,同时各个servlet共享相同的bean,即根上下文(第2步中初始化的上下文)定义的那些bean。

    servletContext 是web应用程序的大环境,用于存储整个web应用程序级别的对象.

    Spring上下文(ApplicationContext)
    方法一:ClassPathXmlApplicationContext --从classpath路径加载配置文件,创建Bean对象
    ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    ClassName clazz =(ClassName)ctx.getBean("beanName");
    
    方法二:FileSystemXmlApplicationContext  --从指定的目录中加载
    ApplicationContext ctx = new FileSystemXmlApplicationContext("src/applicationContext.xml");
    ClassName clazz =(ClassName)ctx.getBean("beanName");
    
    方法三:Spring提供的工具类WebApplicationContextUtils获取ApplicationContext对象(通过ServletContext对象获得ApplicationContext对象,然后根据它获得需要的类实例)
    HttpSession session =request.getSession();
    ServletContext context = session.getServletContext(); //arg0.getSession().getServletContext();
    ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
    ClassName clazz =(ClassName)ctx.getBean("beanName");
    
    上面两个工具方式的区别是,前者在获取失败时抛出异常,后者返回null。
    
    方法四:继承自抽象类ApplicationObjectSupport
    说明:抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。
    Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。
    
    例如:
    import org.springframework.context.support.ApplicationObjectSupport;
    
    public class ContextOne extends ApplicationObjectSupport
    {
        ......
    }
    ........
    ContextOne one = new ContextOne();
      one.getApplicationContext();
    
    
    方法五:继承自抽象类WebApplicationObjectSupport
    说明:类似上面方法,调用getWebApplicationContext()获取WebApplicationContext
    
    例如:
    import org.springframework.web.context.support.WebApplicationObjectSupport;
    public class ContextOne extends WebApplicationObjectSupport {
        .......
    }
    ........
    ContextOne one = new ContextOne();
      one.getApplicationContext();
    
    
    方法六:实现接口ApplicationContextAware
    http://blog.csdn.net/kaiwii/article/details/6872642
    当一个类实现了ApplicationContextAware接口后,这个类就可以获得Spring配置文件中的所引用到的bean对象。
    说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。
    Spring初始化时,会通过该方法将ApplicationContext对象注入。
    
    例如:
    package com.auth.util;
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    //通过接口ApplicationContextAware获得spring上下文
    public class Context implements ApplicationContextAware {
     private static ApplicationContext ctx;
    //设置ApplicationContext对象
     public void setApplicationContext(ApplicationContext context)
       throws BeansException {
      // TODO Auto-generated method stub
       ctx=context;
     }
     //通过beanName获得实例
     public static Object getBean(String beanName)
     {
      return ctx.getBean(beanName);
     }
    }







    展开全文
  • 有时,我们通过在jboss-web.xm l中定义一个来对应用程序进行更改,以支持利用JBoss功能的多个上下文根,如下所示: webapp / WEB-INF / jboss-web.xml: <?xml version="1.0" encoding="UTF-8"?> <jboss...

    有时,我们通过在jboss-web.xm l中定义一个来对应用程序进行更改,以支持利用JBoss功能的多个上下文根,如下所示:

    webapp / WEB-INF / jboss-web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-web>
      <context-root>appA</context-root>
      <session-config>
        <session-timeout>10</session-timeout>
      </session-config>
    </jboss-web>

    并在standalone.xml中的子系统之一的虚拟服务器中定义重写规则以支持其他上下文根,如下所示:

    jboss-eap / standalone / configuration / standalone.xml:

    <subsystem xmlns="urn:jboss:domain:web:2.2" default-virtual-server="default-host" native="false">
        <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
        <virtual-server name="default-host" enable-welcome-root="true">
          <alias name="localhost"/>
          <alias name="example.com"/>
          <rewrite name="rule-1" pattern="^/appB(.*)$" substitution="/appA$1" flags="L"/>
          <rewrite name="rule-2" pattern="^/appC(.*)$" substitution="/appA$1" flags="L"/>
        </virtual-server>
    </subsystem>

    我们很高兴进行上述配置更改,然后在今天将相同的配置推广到生产服务器的同时,团队又回到我们的手中,由于某些安全策略,它们无法在生产中使欢迎使用根目录成为“ true” ,如果我们将其设为“ false”不再支持多个上下文。

    然后,我们开始寻找可用于虚拟服务器的不同配置选项来解决此问题,并发现我们必须使用“ /”上下文配置JBoss以支持其他上下文,并且由于我们的应用程序的上下文为“ / appA”没有可用的“ /”上下文,并且无法重写上下文。

    然后,我们有两个立即修复方法:首先是将应用程序上下文重新定义为“ /” ,这需要更改.war文件;其次是在JBoss部署中删除另一个上下文上下文为“ /”的应用程序,并在团队处于生产部署的中间,我们无法在.war文件中进行更改,因此我们首先通过部署另一个上下文上下文为“ /”的 webapp选择了第二个选项。

    翻译自: https://www.javacodegeeks.com/2017/05/configuring-multiple-context-root-single-webapp-jboss.html

    展开全文
  • <p>I have a web application written in Go with multiple modules, one deals with all database related things, one deals with reports, one consists all web services, one for just business logic and data...
  • 上下文#1根本没有连接到其他上下文,它只是启动Web服务器(Jetty)的实现细节.上下文#2和#3在Spring reference ...由于可以有许多DispatcherServlet,因此对于不同的servlet,单个webapp中可能存在多个这样的上下文.&...
  • 在 java 中, 常见的 Context 有很,像: ServletContext, ActionContext, ServletActionContext, ApplicationContext, PageContext, ... 直译是上下文、环境的意思。比如像: "今天我收到了一束花, 男朋友送的!" ...
  • web应用上下文

    千次阅读 2009-07-20 17:26:00
    关于web应用上下文Context 很朋友都对Context不太了解,他们说"项目中没看到这对象啊""但是老是听人提起Context","经常看到ServletContext,PageContext.EJBContext, 还有Spring里面的ApplicationContext等等" ...
  • 关于web应用上下文Context

    万次阅读 2009-06-04 12:10:00
    关于web应用上下文Context 很朋友都对Context不太了解,他们说"项目中没看到这对象啊""但是老是听人提起Context","经常看到ServletContext,PageContext.EJBContext, 还有Spring里面的ApplicationContext等等...
  • 1.BFC简要定义BFC(Block formatting context)直译为"块级格式化上下文"。它是一独立的渲染区域,它规定了内部如何布局,是决定块盒子的布局及浮动相互影响范围的一区域,并且与这区域外部毫不相干。2.BFC创建...
  • ✓小巧,快速,灵活✓无需专门的“提供者”或“消费者”元素✓能够为每个元素提供一个或多个上下文✓与lit-element和Skatejs集成✓不支持Internet Explorer 用法 警告:公共界面将来可能会更改 使用wc-context的最...
  • CSS是web前端中的重要内容,很初学者在学习CSS时都会遇到各种各样的问题,今天就给大家分享web前端开发如何理解CSS不惧和块级格式化上下文。也许你从未听说过这术语,但是如果你曾经用 CSS 做过布局,那么你也许...
  • 前段时间在做开发需求时,遇到了一我比较诧异的问题,即tomcat部署应用时,并没有配置web.xml上下文。这让我十分疑惑,之后辗转查询资料,才知道原来servlet3.0提供了一种基于注解的启动方式,它与web.xml方式是...
  • 复制Java Web项目,Tomcan报上下文错误

    千次阅读 2016-10-19 16:22:03
    Tomcat启动不起来,会报“无法为tomcat发布服务器配置 多个上下文有路径”这个错误。原因是复制的项目虽然项目名改了,但是在Tomcat中的访问路径没有改变。需要自己打开服务器项目,找到server.xml文件来进行配置。 ...
  • JavaScript高级功能:上下文实验室 学习目标 使用call显式覆盖上下文并apply 明确锁定具有绑定功能的上下文 介绍 在本实验中,我们将再次使用面向记录的方法来构建考勤卡和工资单应用程序。 该实验将具有与上一...
  • 上下文对象

    千次阅读 2018-01-28 20:14:14
    一、上下文概念: 每一个Web Project,运行时都部署在Tomcat下,称为一个应用。 部署后,启动Tomcat时,Tomcat将为每一个应用创建一个对象,这个对象称...2.利用上下文对象,可以实现多个用户间的数据共享。 Servle
  • servlet struts 取上下文路径 和 WEB-INF路径2009年03月09日 星期一 18:27想必很朋友都在发愁Web上下文路径吧。现在我来总结一下吧。先画树形图>test> com.zhouya.service . >todayServlet.java> ...
  • tomcat设置上下文和配置多个应用

    千次阅读 2013-09-03 21:17:28
    Tomcat下为每个Web应用配置不同的访问端口 要完成这个目录必须对conf/Server.xml文件进行配置  设现在我们有两个应用app1和app2,客户端期望的访问方式是:  App1 ->  http://localhost:8081/  
  • 当同一服务器上部署了多个不同的web应用时,可以使用Nginx进行管理配置。 举个例子:假如 www.aabbccdd.com ...访问这些应用的方式通过上下文(context)来进行区分:   www.aabbccdd.com/finance/ www.aabbccdd....
  • 上下文菜单将torrent链接直接添加到本地和公共qBittorrent WebUI。 支持HTTP,Magnet和BitComet Tracker链接,并包括WebUI API中的选项。 特征: 发送完全支持qBt WebUI选项的HTTP,Magnet或BitComet Tracker...
  • 正文上下文 是Javascript 中的一比较重要的概念, 可能很朋友对这概念并不是很熟悉, 那换成「作用域」 和 「闭包」呢?是不是就很亲切了。「作用域」和「闭包」 都是和「执行上下文」密切相关的两概念。在...
  • CSS是web前端中的重要内容,很初学者在学习CSS时都会遇到各种各样的问题,今天就给大家分享web前端开发如何理解CSS不惧和块级格式化上下文。也许你从未听说过这术语,但是如果你曾经用 CSS 做过布局,那么你也许...
  • 一 前言打算重温spring,以后可能每周会发一篇吧,有空就搞搞;二 获取上下文的几种方式...AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载Spring Web应用上下文。ClassPathXmlAppl...
  • Spring应用上下文

    2020-03-30 12:27:28
    AnnotationConfigApplicationContext:从...AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载Spring Web应用上下文。 ClassPathXmlApplicationContext:从类路径下的一个或多个XML...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,087
精华内容 434
关键字:

多个web上下文