예를들어

링크 태그에 href 속성을 xsl 에서 뽑은 어떤 노드의 값으로 변경하려면 아래와같이 하면된다.


<a>

<xsl:attribute name="href">http://cranix.net</xsl:attribute>

</a>


' > Web' 카테고리의 다른 글

부분적으로 XSL 적용하기.  (22) 2007.08.22
XSL 엘리먼트 정리  (22) 2007.08.22
텍스트 로 자바스크립트 실행하는 방법  (44) 2007.08.01
웹페이지 인코딩  (23) 2007.06.11
JAVASCRIPT 에서 XML 문서 DOM,XPATH 로 파싱하기  (26) 2006.12.16
by cranix 2007. 7. 16. 20:44

웹페이지를 UTF-8 로 작성했는데 깨져서 보이는데도 있고..

제대로 나오는데도 있을경우엔.

페이지 head 에다가 아래 내용을 추가해서 강제로 맞춰주면 된다.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

by cranix 2007. 6. 11. 21:30

ORACLE 에서는 LEFT 와 RIGHT 조인을 할때 아래와같이 (+) 를 이용해 쉽게 할수있었다.

ORACLE [LEFT|RIGHT|CROSS] JOIN 예

select * from table1 t1,table2 t2 where t1.id(+)=t2.id

위와같이 (+) 를 어디다가 붙히냐에따라 LEFT 와 RIGHT 조인을 할수있었다.

그러나 MYSQL 에서는 저게 지원이 안됨으로 아래와같이 풀로 써줘야한다.

    SELECT *
      FROM table1 t1
 LEFT JOIN table t2
        ON (t1.id=t2.id)


이렇게 하면 위의 오라클 구문과 똑같은 효과가 난다.

' > Mysql' 카테고리의 다른 글

mysql DATE 연산함수  (908) 2009.08.19
MYSQL 글자 붙이기  (44) 2007.07.23
MYSQL LAST_INSERT_ID()  (26) 2007.07.20
MYSQL EUC-KR 을 UTF-8 로 변경하기  (682) 2007.03.09
MYSQL 유용한 명령어들  (26) 2006.12.18
by cranix 2007. 6. 10. 15:19

스프링은 단위 테스트를 편하게 할수있는 클래스를 제공해준다.

어떤 클래스를 단위테스트 하려면 그 클래스와 연관성있는 모든 클래스를 해줘야지만 할수 있었다.

스프링은 빈 들을 모두 관리해줌으로써 간단하게 이 문제를 해결하고 있다.

[code]package dic.dao;

import static org.junit.Assert.*;

import java.util.Calendar;
import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import dic.model.Accounting;

public class AccountingDaoTest {
 private AccountingDao ad = null;
 @Before
 public void setUp() throws Exception {
  String[] paths = {
   "D:\\cranix\\workspace\\DICProject\\WebContent\\WEB-INF\\applicationContext.xml",
   "D:\\cranix\\workspace\\DICProject\\WebContent\\WEB-INF\\applicationContext-jdbc.xml"
  };
  FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext(paths);

  ad = (AccountingDao)ctx.getBean("accountingDao");
 }

 @Test
 public void testGetAccountingList() {
  List<Accounting> ll = ad.getAccountingList();
  assertTrue(true);
 }

 @Test
 public void testInsertAccounting() {
  Accounting ac = new Accounting();
  ac.setInPrice(10);
  ac.setRegDate(Calendar.getInstance().getTime());
  assertEquals(ad.insertAccounting(ac),1);
 }
}[/code]


위 소스에서처럼 빈설정 파일을 FileSystemXmlApplicationContext 클래스에 넘겨주기만 하면 알아서 연관 클래스 설정을 해준다.

무지하게 편하다.

by cranix 2007. 6. 10. 01:07
분명 이클립스의 모든것을 UTF-8 로 셋팅했다고 생각했는데..

그래도 글씨가 깨져 나온다.

아래와 같이 해줘야지만 글씨가 깨지지 않는다.

new String(str.getBytes("8859_1"),"UTF-8");

어디에 또 설정이 있는것일까?

' > Spring' 카테고리의 다른 글

Spring 3.0 webmvc heloworld!!!  (31) 2010.09.29
Spring 에서 JUnit 로 테스트하기  (733) 2007.06.10
Spring 에서 MultiActionController 사용하기  (29) 2007.06.03
Spring 에서 properties 파일 다루기.  (33) 2007.06.01
Spring jsp 예외처리 전략  (20) 2007.05.30
by cranix 2007. 6. 9. 22:44

Controller 만 상속해서 사용하려니 Controller 가 너무 많아지는 경항이 있다..

이렇게되면 bean 설정도 많아지고 또 복잡해 지게된다.

이런걸 해결하기위해 MultiActionController 가 나왔다.

로직이 비교적간단한 것들을 모두 하나의 Controller 로 만드는건 귀찮은 작업이 아닐수 없다.

이럴땐 하나의 Controller 를 만들어서 MultiActionController 를 상속한다음 메소드별로 기능을 부여할수가 있다.

먼저 Controller 파일은 아래와같이 만든다.

[code]package dic.controllers;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public abstract class DicSuperMultiActionController extends MultiActionController{
 public ModelAndView others(HttpServletRequest request, HttpServletResponse response) throws Exception {
  String contextPath = request.getContextPath();
  String uri = request.getRequestURI();
  String viewName = uri.substring(contextPath.length()+1,uri.lastIndexOf("."));

  return new ModelAndView(viewName);
 }
}[/code]


MultiActionController 는 abstract 메소드가 없기때문에 구현해야할 메소드가 없다.

대신 bean 설정에서 methodNameResolver 를 셋팅 해줘야 한다.

MultiActionController 의 최상위 클래스로 others 메소드만 구현하고 있다.

이 메소드는 MultiActionController 로 넘어왔는데 해당 메소드가 없으면 이쪽으로 맵핑되도록 한것이다.

다음으로 bean 설정이다.

[code] <bean id="dicSuperMultiActionController" class="dic.controllers.DicSuperMultiActionController" abstract="true"/>
 
 <bean id="adminAuthMultiActionController" class="dic.controllers.AdminAuthMultiActionController" parent="dicSuperMultiActionController">
  <property name="authDao" ref="authDao" />
  <property name="methodNameResolver">
   <ref local="adminAuthMultiActionControllerMethodNameResolver"/>
  </property>
 </bean>
 
 <bean id="adminAuthMultiActionControllerMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
  <property name="mappings">
   <props>
    <prop key="/**/*.do">others</prop>
    <prop key="/admin/auth/list.do">list</prop>
    <prop key="/admin/auth/modify.do">view</prop>
    <prop key="/admin/auth/modify_action.do">modify</prop>
    <prop key="/admin/auth/insert_action.do">insert</prop>
    <prop key="/admin/auth/delete_action.do">delete</prop>
   </props>
  </property>
 </bean>
 
 <bean id="urlMapping"
  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
   <props>
    <prop key="/**/*.do">defaultController</prop>
    <prop key="/admin/login.do">adminLoginController</prop>
    <prop key="/admin/logout.do">adminLogoutController</prop>
    <prop key="/admin/auth/*.do">adminAuthMultiActionController</prop>
   </props>
  </property>
 </bean>[/code]


위와같이 Controller 자체에 PropertiesMethodNameResolver 를 셋팅해서 넘어오는 값에따라 메소드로 분기를 시켜줄수 있다.
오버로딩된 others 메소드를 위에서처럼 이용하면 Controller 가 지정되어있지 않은 요청은 알아서 others 로 가게 된다.

' > Spring' 카테고리의 다른 글

Spring 에서 JUnit 로 테스트하기  (733) 2007.06.10
이거 이해가 안된다.  (64) 2007.06.09
Spring 에서 properties 파일 다루기.  (33) 2007.06.01
Spring jsp 예외처리 전략  (20) 2007.05.30
Spring 의 exception 처리 전략  (26) 2007.05.29
by cranix 2007. 6. 3. 14:52

스프링에서 properties 파일을 다루기위해서는 두가지 클래스가 필요하다.

먼저 아래 bean 설정을 applicationContext.xml 파일에 넣어둔다.

- applicationContext.xml

[code] <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
  <property name="basename">
   <value>messages</value>
  </property>
 </bean>
 <bean id="messageSourceAccessor" class="org.springframework.context.support.MessageSourceAccessor">
  <constructor-arg>
   <ref local="messageSource"/>
  </constructor-arg>
 </bean>[/code]


이렇게 한후 위에 보이는 messages 부분이 파일명인데 classes 디렉토리에 위치하면 된다.

이제 properties 파일을 사용하고싶은 bean 에다가 messageSourceAccessor bean 을 넘겨주면 된다.

by cranix 2007. 6. 1. 03:25

Spring 의 bean 부분의 예외를 처리했다고 해도.

기본적으로 jsp 페이지 내에서 발생하는 예외는 spring 만으론 잡을수 없다.

그래서 아래와같은 방법을 썻다.

- web.xml

[code] <error-page>
  <exception-type>java.lang.Exception</exception-type>
  <location>/WEB-INF/jsp/error.jsp</location>
 </error-page>[/code]

- 위와같이 error.jsp 파일을 지정한다.

- error.jsp

[code]<%@page contentType="text/html;chraset=utf-8" isErrorPage="true"%>
<%=exception%>[/code]

- 여기서 중요한건 isErrorPage 속성을 true 로 했다는것이다.
- 이렇게 하면 request  에 "javax.servlet.error.exception"  라는 attribute 가 들어있으면 위와같이 그냥 exception 변수를 쓸수있게 된다.


- BaseExceptionResolver.java

[code]package dic.resolver;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

public class BaseExceptionResolver implements HandlerExceptionResolver {

 private String view = null;
 public void setView(String view) {
  this.view = view;
 }
 
 public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object obj, Exception exception) {
  exception.printStackTrace();
  request.setAttribute("javax.servlet.error.exception",exception);
  return new ModelAndView(view);
 }

}[/code]

- 위 파일은 예전에 bean 예외를 잡기위해 만들었던 파일인데 저기다가 위와같이 request 에 javax.servlet.error.exception 예외를 추가하면 jsp 의 errorpage 를 그대로 사용할수 있다.


자 이것으로 class 와 page 에서 나는 모든 에러를 한 페이지에서 잡을수 있게 되었다.

by cranix 2007. 5. 30. 11:38

Spring 에서 Exception 을 처리하기위해서는 두가지 방법이 있다.

첫번째는 아래와같이 SimpleMappingExceptionResolver 클래스를 사용하는 방법이다.

- springapp-servlet.xml

[code]    <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
     <property name="exceptionMappings">
      <props>
       <prop key="java.lang.Exception">error</prop>
      </props>
     </property>
    </bean>[/code]


여기서 쓰인 error 는 viewResolver 에 의해 파싱되어서 가게 된다.

두번째 방법으로는 아래와같이 HandlerExceptionResolver  인터페이스를 직접 상속받아서Resolver 를 만들어 내는 방법이있다.

- BaseExceptionResolver.java

[code]package dic.resolver;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

public class BaseExceptionResolver implements HandlerExceptionResolver {

 private String view = null;
 public void setView(String view) {
  this.view = view;
 }
 
 public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object obj, Exception exception) {
  request.setAttribute("exception",exception);
  return new ModelAndView(view);
 }

}[/code]


위 파일의 bean 설정은 아래처럼 하면 된다.
- springapp-servlet.xml

[code]    <bean id="exceptionResolver" class="dic.resolver.BaseExceptionResolver">
     <property name="view" value="error"/>
    </bean>[/code]


- 이 방법을 쓰는이유는 request 로 exception 을 넘기기 위해서이다.

' > Spring' 카테고리의 다른 글

Spring 에서 properties 파일 다루기.  (33) 2007.06.01
Spring jsp 예외처리 전략  (20) 2007.05.30
클래스의 toString 및 equals 메소드 자동으로 만들어주기.  (47) 2007.05.26
기본 Controller 지정하기.  (23) 2007.05.24
SPRING  (25) 2007.02.28
by cranix 2007. 5. 29. 17:28

예를들어 Bean 클래스를 만들었는데 toString 메소드를 만들어서 출력하게 하고싶다고 치자 어떻게 해야할까?

뭐 가장 쉬운 방법은 get 메소드를 하나하나 호출해서 붙혀서 알맞게 출력하는 방법이겠지만, 그게 답이라면 이글을 쓸필요도 없겠다.

정말 간단한 답이 있었다.
일단 아파치 자카르타 프로젝트의 Commons Lang 에서 제공하는 API 를 이용하여 메소드들을 쉽게 구현할수 있다.
이 라이브러리는 toString 말고도 equals,hashCode 도 쉽게 만드는 방법을 제공한다.

BaseObject 라는 클래스를 아래와같이 만들어서 모든 Bean 클래스에 적용해 주면된다.



- BaseObject.java

[code]package dic.model;

import java.io.Serializable;

import org.apache.commons.lang.builder.*;

@SuppressWarnings("serial")
public class BaseObject implements Serializable {
 public String toString() {
  return ToStringBuilder.reflectionToString(this,ToStringStyle.MULTI_LINE_STYLE);
 }
  public boolean equals(Object o) {
  return EqualsBuilder.reflectionEquals(this, o);
 }
 
 public int hashCode() {
  return HashCodeBuilder.reflectionHashCode(this);
 }
}[/code]

- Member.java

[code]package dic.model;

import java.util.Date;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

import dic.member.MemberManager;

public class Member extends BaseObject implements HttpSessionBindingListener{
 private String id;
 private String password;
 private String name;
 private String auth_id_list;
 private String file_id_list;
 private Date reg_date;

 public String getId() {
  return id;
 }
 public void setId(String s) {
  id = s;
 }
 
 public String getPassword() {
  return password;
 }
 public void setPassword(String s) {
  password = s;
 }
 
 public String getName() {
  return name;
 }
 public void setName(String s) {
  name = s;
 }
 
 public String getAuthIdList() {
  return auth_id_list;
 }
 public void setAuthIdList(String s) {
  auth_id_list = s;
 }
 
 public String getFileIdList() {
  return file_id_list;
 }
 public void setFileIdList(String s) {
  file_id_list = s;
 }
 
 public Date getRegDate() {
  return reg_date;
 }
 public void setRegDate(Date d) {
  reg_date = d;
 }
 
 // 세션에 입력될때
 public void valueBound(HttpSessionBindingEvent event) {
  MemberManager.getInstance().doLogin(this);
 }
 // 세션에서 제거될때
 public void valueUnbound(HttpSessionBindingEvent event) {
  MemberManager.getInstance().doLogout(this);
 }
 
 public static void main(String args[]) {
  Member m = new Member();
  m.setId("cranix");
  m.setPassword("1234");
  m.setName("크래닉스");
  System.out.println(m);
 }
}[/code]


 - 실행결과

dic.model.Member@8813f2[
  id=cranix
  password=1234
  name=크래닉스
  auth_id_list=<null>
  file_id_list=<null>
  reg_date=<null>
]


' > Spring' 카테고리의 다른 글

Spring jsp 예외처리 전략  (20) 2007.05.30
Spring 의 exception 처리 전략  (26) 2007.05.29
기본 Controller 지정하기.  (23) 2007.05.24
SPRING  (25) 2007.02.28
JSTL 사용하기  (28) 2007.02.28
by cranix 2007. 5. 26. 01:10
| 1 2 3 4 5 6 |