longkai / lab

广西大学 - 雨无声实验室开放平台
4 stars 6 forks source link

解析Java中如何获取Spring中配置的bean_java_脚本之家 #18

Open neemo14-15 opened 10 years ago

neemo14-15 commented 10 years ago

JAVA中Bean是什么?_haoqiwen_新浪博客,haoqiwen,java语言,it haoqiwen的BLOG [订阅] 加关注 查看更多 正文 字体大小:大 中 小 JAVA中Bean是什么? [转载]:简...

blog.sina.com.cn/s/blog_... 2012-11-04 - 快照 .普通Java类获取Spring的Bean的方法 - qun的日志 - 网易博客 2010-04-14 23:11:43| 分类: JAVA EE | 标签: |字号大中小 订阅 在SSH集成的前提下。某些情况我们需要在Act ion以外的类中来获得Spring所管理的Service对象。 之前我在网...

blog.163.com/zdq0426/blog/stat... 2010-04-14 - 快照 自动生成JAVA BEAN - taodengwen@126的日志 - 网易博客 126的网易博客,细节决定成败,态度决定一切;只为成功找办法,不为失败找理由! --行者-追梦人, 自动生成JAVA BEAN,日志,taodengwen@126,行者-追梦人,网易博客,网易,blog 登...

blog.163.com/taodengwen@126/bl... 2012-11-05 - 快照 EJB 与 JAVA BEAN 的区别? - 已解决 - 搜搜问问 2个回答 - 提问时间:2008年8月2日 最佳答案:Java Bean 是可复用的组件,对 Java Bean 并没有严格的规范,理论上 讲,任何一个 Java 类都可以是一个 Bean 。但通常情况下,由于 Java Bean 是被容器所创建...

wenwen.soso.com/z/q81522030.ht... 2008-08-02 - 快照 封装java Bean中日志打印所使用的toString()方法- 佐手→牵右手... 发表时间:2012年11月10日 你还在为Bean中有几十个字段覆盖toString()方法bean日志而烦恼吗,我这里贡献一个公共的方法来处理所有bean的toString方法希望对你有帮助 SimpleDateFormat sdf = new S...

neemo14-15 commented 10 years ago

写一个javabean 类:

package Myweb.javabean;

public class Score { // study number; private String SNO; // course number; private String CNO; // course score; private float GRADE; public String getSNO() { return SNO; } public void setSNO(String sno) { SNO = sno; } public String getCNO() { return CNO; } public void setCNO(String cno) { CNO = cno; } public float getGRADE() { return GRADE; } public void setGRADE(float grade) { GRADE = grade; } }

neemo14-15 commented 10 years ago

写一个jsp文件 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

jsp1

JBuilder Generated JSP


Enter new value :



Value of Bean property is :
neemo14-15 commented 10 years ago

最近项目要搭建一个日志平台,没有现成的思路。自己就上网去查,了解log4j搭建日志系统。可以输出在控制台、文件(logfile)、也可以输出到数据库。输出到数据库可以用log4j的配置,也可以继承org.apache.log4j.AppenderSkeleton;实现输出。但是实现类,不能由spring注入baseDao.这是个很烦恼的问题,于是想用一个独立的jdbc解决这个问题,但是这又似乎太变态了。哎……自己快要写完了,但是还是想放弃,因为这是让人很难受的代码,一个项目的代码应该是一个完美的系统,但这跟我想的完美太远了。

neemo14-15 commented 10 years ago

java调用spring管理的bean,这个问题就水到渠成的解决了。

实现代码如下:

package com.yt.service;

import java.sql.SQLException; import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.spi.LoggingEvent; import org.apache.log4j.Level; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils;

neemo14-15 commented 10 years ago

import com.yt.base.BaseDao; import com.yt.model.AbstractLog; import com.yt.model.DBLog;

/**

  • @ClassName: DBAppender
  • @Description: log4j输出到数据库
  • @Author He Rongbing
  • @Date Nov 18, 2010 10:28:33 AM */ public class DBAppender extends AppenderSkeleton { private BaseDao baseDao = null;//从spring context中得到,这里用单例 public static HttpServletRequest request = null;//静态的,从外面传过来。
neemo14-15 commented 10 years ago

@Override protected void append(LoggingEvent arg0) { AbstractLog log = (AbstractLog) arg0.getMessage(); getBaseDao(); if (log != null&&baseDao!=null) { HashMap<String, Object> hm = new HashMap<String, Object>(); hm.put("RZXX", log.getLogMSG()); hm.put("RZLX", log.getLogType()); hm.put("CLL", log.getOpeClass()); hm.put("CZRY", log.getOpeYH()); hm.put("GNMC", log.getOpeName()); hm.put("YXJG", log.getOpeResult()); hm.put("CZSJ", new Timestamp(arg0.timeStamp)); hm.put("RZJB",arg0.getLevel().toString() );

neemo14-15 commented 10 years ago

if (log instanceof DBLog) { DBLog dbLog = (DBLog) log; hm.put("CZLX", dbLog.getOpeType()); } else { hm.put("CZLX", ""); }

try { baseDao.executeInsert("xt.insertLog", hm); } catch (SQLException e) { System.out.println("_写系统日志表失败!_"); e.printStackTrace(); } } }

neemo14-15 commented 10 years ago

public void close() { closed = true; }

public boolean requiresLayout() { return false; } /**

  • @Title: getBaseDao
  • @Description: 得到baseDao,从spring配置中得到,这里需要一个HttpServletRequest
  • @Author:He Rongbing */ private void getBaseDao() { if (baseDao==null){ ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext()); baseDao = (BaseDao)ctx.getBean("baseDao"); } }
neemo14-15 commented 10 years ago

把tomcat中开发的项目研究发布到一个更加强大的web服务器,我做了一些调查,选择了与tomcat的一条路线的jboss.原因主要是jboss的开源和免费,当然据说tomcat到jboss更加容易上手。这个过程对jboss有了一些了解和认识,当然现在只是发布和运行成功了。对于jboss还有很多东西也还是不明白,毕竟现在只是一个纯的web项目,没得j2ee的ejb,分布式的东西。

neemo14-15 commented 10 years ago

jboss服务器的安装:

在官网上下载,有很多版本。这里选择的是JBoss-5.1.0.GA(jdk1.6版本)。只需要解压就可以了,需要配置jdk,jboss的环境变量,网上有很多资源,这里不详细说了。

Jboss通常占用的端口是1098,1099,4444,4445,8080,8009,8083,8093这几个,

默认端口是8080:

在windows系统中:

1098、1099、4444、4445、8083端口在/jboss/server/default/conf/jboss-service.xml中

8080端口在/jboss-5.1.0.GA/server/default/deploy/jbossweb.sar中。

neemo14-15 commented 10 years ago

Xml代码 01.

  1. <Connector port="8080" address="${jboss.bind.address}"
  2. maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
  3. emptySessionPath="true"
  4. enableLookups="false" redirectPort="8443" acceptCount="100"
  5. connectionTimeout="20000" disableUploadTimeout="true"/>
    [xml] view plaincopyprint? 01.
  6. <Connector port="8080" address="${jboss.bind.address}"
  7. maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
  8. emptySessionPath="true"
  9. enableLookups="false" redirectPort="8443" acceptCount="100"
  10. connectionTimeout="20000" disableUploadTimeout="true"/>

    <Connector port="8080" address="${jboss.bind.address}" maxThreads="250" strategy="ms" maxHttpHeaderSize="8192" emptySessionPath="true" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true"/>把里面的8080改为80。JBOSS启动之后就可以用http://localhost/访问。

访问的ip(address):

JBOSS 4.2以上版本服务启动如果不加任何参数的话,只监听127.0.0.1,就是说只能用127.0.0.1或者localhost访问,用本机的对外地址 访问不了,同一网络内别的机子没法访问。

neemo14-15 commented 10 years ago

用参数-b ip地址 来绑定监听的地址才可以。 这和以前版本的JBOSS不一样,以前版本的不加任何参数是监听本机所有的IP地址,现在必须使用参数-b 0.0.0.0才可以监听全部地址。

  1. 附,以下是具体解决方法: 在jboss-4.2.2.GA/bin目录下,新建start.bat文件,录入如下内容: run.bat -b 0.0.0.0 保存即可。使用你新制作的start.bat文件启动服务之后就可以IP访问了。

neemo14-15 commented 10 years ago
  1. 找到JBOSS_HOME的/server/default/deploy/jboss-web.deployer/server.xml文件,

找到

Xml代码 01.

  1. <Connector port="8080" address="${jboss.bind.address}"
  2. maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
  3. emptySessionPath="true"
  4. enableLookups="false" redirectPort="8443" acceptCount="100"
  5. connectionTimeout="20000" disableUploadTimeout="true"/>
    [xml] view plaincopyprint? 01.
  6. <Connector port="8080" address="${jboss.bind.address}"
  7. maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
  8. emptySessionPath="true"
  9. enableLookups="false" redirectPort="8443" acceptCount="100"
  10. connectionTimeout="20000" disableUploadTimeout="true"/>
   <Connector port="8080" address="${jboss.bind.address}"
      maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
      emptySessionPath="true"
      enableLookups="false" redirectPort="8443" acceptCount="100"
      connectionTimeout="20000" disableUploadTimeout="true"/>

将其中的${jboss.bind.address}改为0.0.0.0

在myEclipse中的配置,如tomcat,在myEclipe/server中配置jboss 5x项目,jdk要配置上相应版本。

neemo14-15 commented 10 years ago

项目的环境:

服务器: tomcat 6.0 JBoss-5.1.0.GA(jdk1.6版本): 删除D:/jboss-5.1.0.GA-jdk6/jboss-5.1.0.GA/server/default/deploy/blxt.war/WEB-INF/lib下面的: xml-apis-1.0.b2.jar;xercesImpl-2.6.2.jar;xmlparserv2.jar; javax.servlet.ServletException: OncePerRequestFilter just supports HTTP requests: 解决了,删除应用的lib下的几个jar包:servlet-api.jar相关的包 (geronimo-servlet_2.5_spec-1.2.jar jsp-api.jar) clob类型长度大于最大值(一系列数据库问题):换用oracle驱动(Oracle_10g_10.1.0.2_JDBC_ojdbc14.jar),删除commonlib.jar(lib下的,不是client下面的) 发布的时候,将start.bat 放在/JBoss-5.1.0.GA/bin 目录下面。 java环境: jdk6.0 数据库环境: oracle 10g