GVKun编程网logo

Tomcat与Weblogic JNDI查找(tomcat,weblogic)

20

本篇文章给大家谈谈Tomcat与WeblogicJNDI查找,以及tomcat,weblogic的知识点,同时本文还将给你拓展Ajax跨域请求配置解决方法tomcatweblogic适用、apache

本篇文章给大家谈谈Tomcat与Weblogic JNDI查找,以及tomcat,weblogic的知识点,同时本文还将给你拓展Ajax 跨域请求 配置解决方法 tomcat weblogic适用、apache http 转发请求至tomcat/JBOSS/weblogic/websphere、Docker 创建 tomcat/weblogic 集群、flex跨域问题 weblogic tomcat等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Tomcat与Weblogic JNDI查找(tomcat,weblogic)

Tomcat与Weblogic JNDI查找(tomcat,weblogic)

我们正在使用的Weblogic服务器已配置为允许JNDI数据源名称,例如“ appds”。

对于开发(本地主机),我们可能正在运行Tomcat,并且在server.xml的部分中声明时,Tomcat会将JNDI数据源挂在JNDI树中的“
java:comp / env / jdbc / *”上。

问题: 在Weblogic中,JNDI查找是“ appds”,而在Tomcat中,看来我必须提供正式的“ java:comp / env /
jdbc /
appds”。恐怕Tomcat版本是隐式标准,但是不幸的是,我无法更改Weblogic的配置…,这意味着我们最终只能使用两个不同的spring配置文件(我们使用spring
2.5)来适应不同的环境。

是否有解决此问题的优雅方法。我可以直接在Tomcat中查找JNDI名称吗?Spring可以在两个地方取一个名字和外观吗?Google搜索或建议会很棒。

答案1

小编典典

JndiLocatorSupport有财产resourceRef。设置为true时,将自动在前面加上“ java:comp / env
/”前缀。因此,我认为从Tomcat迁移到Weblogic时区分该参数是正确的。

Ajax 跨域请求 配置解决方法 tomcat weblogic适用

Ajax 跨域请求 配置解决方法 tomcat weblogic适用

概述

Ajax跨域是前端开发中常见的问题,本文描述了以Google浏览器Chrome作为客户端和以Tomcat作为Web服务器的情况下的解决办法。

问题现象

当出现跨域访问的时候ajax通常会报类似如下错误:

XMLHttpRequest cannot loadhttp://192.168.2.12:8001/oss/api/version/check. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access.


解决办法一:关闭浏览器的跨域安全设置,仅限于开发的时候测试用

以chrome浏览器为例,右键点击chrome的快捷方式,然后在Target的值后面追加 --disable-web-security,注意--前面有个空格。例如:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security

启动之后,Chrome浏览器会提示您"您使用的是不受支持的命令行标记:--disable-web-security",说不安全,因此仅限于测试。

这样就可以直接测试,不会出现跨域的错误了!

解决办法二:配置Web服务器支持跨域访问(支持tomcat)

这里描述以Tomcat为Web服务器情况下的解决办法,在Java Web程序的WEB-INF下的web.xml文件中加入如下配置即可。

<!--cors filter-->
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

注意:org.apache.catalina.filters.CorsFilter下面有好几个配置的选项,上面没有配置时就采用系统的默认配置。在实际生产环境要根据需要进行配置来提高安全性。比如cors.allowed.origins配置允许访问的源地址,默认为所有,即*。此外,还有cors.allowed.methods,cors.allowed.headers等等。具体的配置细节请参见本文参考资料中的[1]。

解决办法三:配置Web服务器支持跨域访问(支持weblogic/tomcat)

1.在Java Web程序的WEB-INF下的web.xml文件中加入如下配置

<filter>
<filter-name> CORS </filter-name>
<filter-class> com.thetransactioncompany.cors.CORSFilter </filter-class>
<init-param>
<param-name> cors.allowOrigin </param-name> <!--配置授信的白名单的域名!-->
<param-value> * </param-value>
</init-param>
<init-param>
<param-name> cors.supportedMethods </param-name>
<param-value> GET,POST,HEAD,PUT,DELETE </param-value>
</init-param>
<init-param>
<param-name> cors.supportedHeaders </param-name>
<param-value> Accept,Origin,X-Requested-With,Content-Type,Last-Modified </param-value>
</init-param>
<init-param>
<param-name> cors.exposedHeaders </param-name>
<param-value> Set-Cookie </param-value>
</init-param>
<init-param>
<param-name> cors.supportsCredentials </param-name>
<param-value> true </param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name> CORS </filter-name>
<url-pattern> /* </url-pattern>
</filter-mapping>

2.在项目中或容器中添加以下jar包

apache http 转发请求至tomcat/JBOSS/weblogic/websphere

apache http 转发请求至tomcat/JBOSS/weblogic/websphere

Apache HTTP server 和 Tomcat server 直接的 HTTP 数据传输,有很多种方法。


方法一,使用 mod_jk。很多网站上介绍到 Apache HTTP server 和 Tomcat server 整合的时候,都是在介绍 mod_jk.so 的使用,这是一种比较老的方法,并且需要额外下载 mod_jk。Apache 和 Tomcat 的默认配置文件都需要改动。

方法二, URL rewrite,也就是对于指定格式的 URL,转发给某个 Tomcat 的网址。这里所说的指定格式,是指 Apache 所使用的正则表达式,通俗地将,是一种类似 * 的一种比较高级通配符。这种方法不需要下在额外的文件,只需要配置 Apache。

方法三,mod_proxy_ajp,仅在 Apache 2.1 及以后的版本中可用,Apache 自带的一个新功能模块。这时 Apache 使用 Apache JServ Protocol 与 Tomcat 通讯。不需要下在额外的文件,需要改动Apache 和 Tomcat 的默认配置文件都需要改动。

方法四,mod_proxy。其实 mod_proxy 既可以做类似于 Wingate 一样的公司局域网共享上网代理,也可以做反向代理(Reverse proxy)。这里使用的是反向代理功能,用户端浏览器不需要把代理服务器改成这里的 Apache 地址。mod_proxy 是 Apache 自带功能,并且配置比较简单。

这篇文章介绍 Apache 反向代理转发 HTTP 请求到 Tomcat 的配置。比较简单实用。

下载 Apache web server 2.2,安装完成后,修改安装目录下的 conf/httpd.conf 文件,将以下两行前的注释字符 # 去掉。

#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_http_module modules/mod_proxy_http.so

在这个配置文件最后,加上

ProxyPass /app1 http://<tomcat_server_address>:port/url1

ProxyPassReverse /app1 http://<tomcat_server_address>:port/url1

保存配置文件后重新启动 Apache 就可以了。当用户访问

http://<apache_server_address>/app1 的时候,Apache 后台自动将请求转发给 Tomcat ,用户只认为 Apache server 就是他所要的应用服务器。

ProxyPass、 ProxyPassReverse 这两个配置时,如果不加ProxyPassReverse 这行,则IE地址栏里面显示就是

tomcat所对就的地址,如http://<tomcat_server_address>:port/url1后则地址栏里面显示的就是http://<tomcat_server_address>:port/url1,反之,加上ProxyPassReverse这行,则显示的就是apache的地址,把原tomcat给隐藏了

细心的作者可以看到,Tomcat 那边没有做任何改动,是不是说明,如果 Tomcat 换成 JBoss,或者 IBM Websphere,或者 BEA Weblogic ,也可以用 Apache 来转发呢?答案是,确实如此!!

这里需要解释的是, Apache 反向代理只做 HTTP 透明转发,因此,Tomcat 那边,如果使用 servelet API 获取 request url, server info,等等,都是 Tomcat 的。在Tomcat 上的 JSP 或者 HTML 文件里面,都应该是相对路径,不应该使用绝对路径,更不能使用带 Tomcat 地址的 URL。这应该不是太高的要求,对不?

目前最新版的 Apache 自带的 cache ,只能配置成 server 或者 virtual host 一级的,没有办法配置到 URL 一级。好在一般的 J2EE 应用性能问题,一般都在动态网页部分,静态网页很好,因此也没有太大关系。

对于要求比较高的应用,比如用户量多的新闻网站或者论坛网站,如果要求是用 Apache 缓冲后台的动态网页,比如说,我的首页可以允许缓存一分钟,则在这一分钟内,比如有两千次用户访问 http://somehost/index.jsp,只有第一次用户访问,Apache 会把请求转发到 Tomcat,其余的 999 次访问,都是由 Apache 从缓冲中取出这个页面返回给用户看。这样后台的动态网页服务器的负荷会小很多。以目前的 Apache 最新版本来说,使用反向代理达不到这个要求,应该使用 Apaceh 新建一个 virtual host ,换成使用 URL rewrite。

Docker 创建 tomcat/weblogic 集群

Docker 创建 tomcat/weblogic 集群

安装 tomcat 镜像

准备好需要的 jdk、tomcat 等软件放到 home 目录下面,启动一个容器

docker run -t -i -v /home:/opt/data  --name mk_tomcat ubuntu /bin/bash

这条命令挂载本地 home 目录到容器的 /opt/data 目录,容器内目录若不存在,则会自动创建。接下来就是 tomcat 的基本配置,jdk 环境变量设置好之后,将 tomcat 程序放到 /opt/apache-tomcat 下面 编辑 /etc/supervisor/conf.d/supervisor.conf 文件,添加 tomcat 项

[supervisord]
nodaemon=true

[program:tomcat]
command=/opt/apache-tomcat/bin/startup.sh  [program:sshd] command=/usr/sbin/sshd -D
docker commit  ac6474aeb31d  tomcat

新建 tomcat 文件夹,新建 Dockerfile。

FROM mk_tomcat
EXPOSE  22 8080
CMD ["/usr/bin/supervisord"]

根据 Dockerfile 创建镜像。

docker build tomcat tomcat

安装 weblogic 镜像

步骤和 tomcat 基本一致,这里贴一下配置文件

supervisor.conf
[supervisord]
nodaemon=true

[program:weblogic]
command=/opt/Middleware/user_projects/domains/base_domain/bin/startWebLogic.sh

[program:sshd]
command=/usr/sbin/sshd -D
dockerfile
FROM weblogic
EXPOSE  22 7001 CMD ["/usr/bin/supervisord"]

tomcat/weblogic 镜像的使用

存储的使用

在启动的时候,使用 -v 参数

-v, --volume=[]            Bind mount a volume (e.g. from the host: -v /host:/container, from docker: -v /container)

将本地磁盘映射到容器内部,它在主机和容器之间是实时变化的,所以我们更新程序、上传代码只需要更新物理主机的目录就可以了

tomcat 和 weblogic 集群的实现

tomcat 只要开启多个容器即可

docker run -d -v -p 204:22 -p 7003:8080 -v /home/data:/opt/data --name tm1 tomcat /usr/bin/supervisord docker run -d -v -p 205:22 -p 7004:8080 -v /home/data:/opt/data --name tm2 tomcat /usr/bin/supervisord docker run -d -v -p 206:22 -p 7005:8080 -v /home/data:/opt/data --name tm3 tomcat /usr/bin/supervisord

这里说一下 weblogic 的配置,大家知道 weblogic 有一个域的概念。如果要使用常规的 administrator +node 的方式部署,就需要在 supervisord 中分别写出 administartor server 和 node server 的启动脚本,这样做的优点是:

  • 可以使用 weblogic 的集群,同步等概念
  • 部署一个集群应用程序,只需要安装一次应用到集群上即可

缺点是:

  • Docker 配置复杂了
  • 没办法自动扩展集群的计算容量,如需添加节点,需要在 administrator 上先创建节点,然后再配置新的容器 supervisor 启动脚本,然后再启动容器

另外种方法是将所有的程序都安装在 adminiserver 上面,需要扩展的时候,启动多个节点即可,它的优点和缺点和上一种方法恰恰相反。(建议使用这种方式来部署开发和测试环境)

docker run -d -v -p 204:22 -p 7001:7001 -v /home/data:/opt/data --name node1 weblogic /usr/bin/supervisord docker run -d -v -p 205:22 -p 7002:7001 -v /home/data:/opt/data --name node2 weblogic /usr/bin/supervisord docker run -d -v -p 206:22 -p 7003:7001 -v /home/data:/opt/data --name node3 weblogic /usr/bin/supervisord

这样在前端使用 nginx 来做负载均衡就可以完成配置了

flex跨域问题 weblogic tomcat

flex跨域问题 weblogic tomcat

1.weblogic的服务被跨域访问的配置

    a.ROOT/WEB-INF

                                  web.xml

                                  weblogic.xml

                  crossdomain.xml

       web.xml内容是:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app id="WebApp_ID"> 
<display-name>root</display-name> 
</web-app>

 

    weblogic.xml r 的内容是:

<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems,Inc.//DTD Web Application 8.1//EN" 
"http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"> 
<weblogic-web-app> 
  <container-descriptor> 
    <index-directory-enabled>true</index-directory-enabled> 
    <default-mime-type>
text/x-cross-domain-policy</default-mime-type> 
  </container-descriptor> 
  <context-root>/</context-root> 
</weblogic-web-app>

crossdomain.xml

的内容是:

         <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cross-domain-policy SYstem "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd" >
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all" />

<allow-access-from domain="*" />
<allow-http-request-headers-from domain="*" headers="*" secure="false" />
</cross-domain-policy>

 在tomcat中只要能访问到跨域文件就ok了


上面的文件打成war包 发布 context-root   /

命令  jar -cvf ROOT.war ./

今天的关于Tomcat与Weblogic JNDI查找tomcat,weblogic的分享已经结束,谢谢您的关注,如果想了解更多关于Ajax 跨域请求 配置解决方法 tomcat weblogic适用、apache http 转发请求至tomcat/JBOSS/weblogic/websphere、Docker 创建 tomcat/weblogic 集群、flex跨域问题 weblogic tomcat的相关知识,请在本站进行查询。

本文标签: