2012-06-07 1 views
0

jsp.i에서 프로젝트를 수행하여 전체 프로젝트의 전쟁을 만들었습니다.이 전쟁을 다른 컴퓨터에 배포하면 로그인에 실패했음을 알리는 오류가 발생합니다. 내 데이터베이스 (SQL Server 2005) 사용자 이름 및 암호 (jsp 파일에서 하드 코딩 된 사용)는 다른 시스템과 다릅니다. 연결 문제를 만들지 않고도 내 프로젝트를 모든 컴퓨터에서 실행할 수있는 트릭을 원합니다. cz 나는 이런 종류의 소프트웨어를 만들고 싶다. 많은 프로젝트에 배포 될 내 프로젝트의 경우.이 경우 연결 문제가 발생하지 않아야한다. Pl z help me.배포 된 war 파일의 데이터베이스 설정

답변

0

하드 코딩 대신 xml 파일에 데이터베이스 관련 자격 증명을 구성한 다음 배포 할 때 xml 파일에서 변경할 수 있습니다. 다른 트릭은 속성 파일을 사용할 수 있다는 것과 동일한 작업을 수행 할 수 있다는 것입니다.

다른 방법으로 데이터 원본을 정의한 다음 데이터 원본 조회를 사용하여 연결을 얻을 수 있습니다.

그래서 결국 요구 사항이 무엇인지에 따라 달라지며 솔루션을 제공 할 수 있습니다.

+0

하지만이 소프트웨어를 다른 사람에게 줄 때마다 XML 또는 속성 파일을 변경해야 할 때마다 그 일을하고 싶지 않습니다. – user1372442

+0

데이터 소스와 관련하여 몇 가지 문서를 제공해 주시겠습니까? –

0

대답은 jsp 파일에 사용자 이름과 암호 (또는 이들과 같은 구성 세부 정보)를 하드 코딩하지 않는 것입니다. 당신이) 서로 다른 환경에 같은 전쟁을 배포 할 수 있습니다

당신은 속성의 파일에서 연결 정보를 배치해야하고 읽을 수 있도록

당신은 prefereably 전쟁 파일의 외부 연결 세부 사항을 구체화 할 필요가있다. 그런 다음 빌드 프로세스를 구성하여 각 환경에 대해 서로 다른 전쟁을 구축하거나 하나의 전쟁을 만들고 모든 배치에 대해 압축을 풀고 연결 속성을 덮어 쓰고 전쟁을 다시 포장 할 수 있습니다. 웹 서버에 따라 다른 옵션이 있습니다.

Tomcat에서 어떤 환경을 실행하고 있습니까? 보스?

+0

바람둥이 6을 사용하고 있습니다 – user1372442

+0

war 파일을 어떻게 구축합니까? – blank

+0

Eclipse IDE를 통해 – user1372442

0

물론 웹 응용 프로그램에 하드 코딩 된 자격 증명을 저장할 수 없습니다.

따라서 배포하려는 서버 외부에 저장해야합니다. 데이터 소스와 같은 특정 컨테이너 기능

외부, 당신은 할 수 있습니다 :

1) 자바 환경 설정을 사용하지만, 특히 리눅스에서 Tomcat을 사용하는 경우 그들과 함께 많은 버그, 나는 (I을 고려하지 않을 것이라고,가 나는 청소했다)

2) 외부 파일에 연결 속성을 넣는다. 그 방법은 다음과 같습니다.

나는 WEB-INF 디렉토리에 해당 속성에 대해 허가 된 모든 위치를 나열한 텍스트 파일을 가지고 있습니다. 이 파일은 모든 서버에있는 그대로 배포됩니다. 여기 예가 있습니다 :

# This file lists all the locations where mysoft will look for 
# an XML config file when starting. 
# It's recommended to use links to simplify parameterization but 
# it's also possible to enrich this file. 

# standard windows locations 
c:\mycomp\mysoft\config\config.xml 
d:\mycomp\mysoft\config\config.xml 

# standard linux location 
/var/lib/mycomp/mysoft/config/config.xml 

그리고 내 webapp는 초기화 할 때 처음 발견 된 파일을 선택하기 만합니다. 이렇게하려면 텍스트 파일을 읽고 config를 저장하는 ServletContextListener를 구현했습니다.

public class MySoftServletContextListener implements ServletContextListener { 

public final static String CONFIG_LIST_PATH = "/WEB-INF/config-paths.txt"; 

@Override 
public void contextInitialized(ServletContextEvent contextEvent) { 
    InputStream list = context.getResourceAsStream(WORLD_LIST_PATH); 
    try { 
     BufferedReader listReader = new BufferedReader(new InputStreamReader(list)); 
     String line; 
     while ((line=listReader.readLine())!=null) { 
      if (line.length()<4 || line.charAt(0)=='#') continue; 
      File file = new File(line); 
      if (file.exists()) { 

       // log config from the file and, for example, store it in a singleton 

       break; 
      } else { 
       log.info("No config in file " + line + " (file doesn't exist)"); 
      } 
     } 
     list.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     log.severe("Error while looking for a config : " + e.toString()); 
    } 
} 

} 

서블릿 컨텍스트 리스너가 내 웹에서 참조 :

여기 내 청취자의 매우 단순화 된 버전입니다.xml like :

<listener> 
    <listener-class>com.mycomp.mysoft.webapp.MySoftServletContextListener</listener-class> 
</listener> 
+0

나는 그것을 얻지 못했고, plz 간단하게 단계별로 설명 할 수 – user1372442

+0

나는 과정을 자세히 설명했다. –

+0

데이터 소스에 관한 몇 가지 문서를 제공해 주시겠습니까? –

0

자격 증명이 아닐 것입니다. 데이터베이스 특성을 하드 코드해서는 안됩니다.

  • 당신은 서블릿 3.0 컨테이너를 사용하는 경우, 당신은 web.xml에 데이터 소스 속성을 구성하고 데이터 소스를 사용
  • 당신은 주어진와 데이터 소스 자원을 조회 할 수 있습니다 : JavaEE 어플 실행시 데이터 소스를 구성하는 훌륭한 방법을 제공합니다 이름을 응용 프로그램에 추가하고 필요한 데이터 소스를 바인딩하십시오. 또한 자원 주석을 정의하면 Servlet Container가 데이터 소스를 주입하도록 할 수 있습니다.
+0

안녕하세요 Ramesh! 어떤 종류의 데이터가 당신에게 들립니까? 그게 수업인가, 그게 어떤 특질인가 ..? 몇 가지 문서를 제공해 주시겠습니까? –