>Java >java지도 시간 >자카르타 스트럿츠 배우기 1.1 (3)

자카르타 스트럿츠 배우기 1.1 (3)

黄舟
黄舟원래의
2016-12-17 10:48:011067검색

첫 번째 기사 "자카르타 Struts 소개"에서는 Struts 프레임워크를 대략적으로 분석하고, 이것이 완성할 수 있는 기능에 대해 논의했으며, Struts를 구성하는 다양한 구성 요소에 대해서도 살펴보았습니다. 두 번째 기사 "Learning Jakarta Struts"에서는 Struts를 사용하여 간단한 애플리케이션을 구축하는 방법의 프로세스 단계를 자세히 설명하기 시작했습니다. 이 기사에서는 Struts 태그를 통해 jsp 페이지의 applicationResource 파일에 텍스트 정보를 표시하는 방법을 설명합니다.
Action 클래스는 Struts 아키텍처와 애플리케이션의 비즈니스 로직 코드를 연결하는 다리입니다. 따라서 실제 애플리케이션에서의 로직 처리는 별도의 로직 레이어에 의해 완료되어야 하기 때문에 Action 클래스를 최대한 작고 단순하게 만들어야 합니다. n 계층 애플리케이션을 개발하는 경우 계층 간의 인터페이스가 최대한 단순해지기를 원할 것입니다. 실제로 Action 클래스(1.1의 excute())의 기본 메소드인 "perform()"은 이 메소드에서 어떤 작업이 수행되어야 함을 암시합니다. 우리는 각 Action 클래스가 org.apache.struts.action.Action에서 계속되어야 한다는 것을 알고 있습니다. 소규모 애플리케이션에서는 우리의 Action 클래스가 org.apache.struts.action.Action을 계속하기에 충분할 것입니다. 일부 특정 복잡한 애플리케이션에서는 우리가 구현한 몇 가지 공통 기능을 요약했습니다. 그러므로 내 생각에는 이러한 공통 기능의 코드를 구현하기 위한 기본 클래스를 구성하여 애플리케이션에 사용되는 모든 Action 클래스가 org.apache.struts.action.Action을 직접 이어가지 않고 일부 공통 기능을 완성하기 위해 이를 계속하도록 하는 것이 좋습니다. 코드 재사용을 위한 기본 클래스는 꽤 ​​좋은 디자인입니다. 이 메소드를 StrutsSample에 적용하고 이러한 기본 클래스를 구성했습니다. 이 기본 클래스의 메소드는 복잡한 논리를 완성하고 단순히 요청을 전달하는 Action 클래스에서 사용할 수 있습니다.
 
 package com.oreilly.actions;
 
 import java.io.IOException;
 import java.util.PRoperties;
 import java.util.ResourceBundle;
 import java.util.MissingResourceException;
import java.util.Enumeration;
import java.util.Properties;
import java.rmi.RemoteException;
import javax.ejb.EJBHome;
import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

이 클래스가 사용됩니다. Struts를 개발할 때 모든 Action 클래스는 기본 클래스를 상속해야 합니다. 실제 응용 분야에서 가장 많이 사용될 수 있는 몇 가지 사항을 고려합니다. 이 기사에 관한 한, Struts와 밀접하게 관련되지 않은 클래스의 일부 메소드는 주석만 달고 완전히 구현되지 않을 것입니다. 개발 작업에 참여하고 있다면 관심이 있다면 이 메소드를 완료하고 이 클래스를 적용하십시오. . 실제 프로젝트에서 개발 속도가 빨라집니다. 모든 Action 클래스는 org.apache.struts.action.Action에서 상속되기 때문에 우리 클래스는 동일합니다.
공용 추상 클래스 AbstStrutsActionBase는 Action {
을 확장합니다. / * struts-config.xml에 기록된 일부
정의 * 전역 애플리케이션에서 사용할 수 있는 전달 플래그 */
protected static final String SUCCESS = "success ";
protected static final String FAILURE = "실패";
protected static final String ERROR = "error";
protected static final String LOGIN = "login";
protected static final String CONFIRM = "confirm";
protected Context jndiContext = null;

/**
  * 기본 구축 방식
*/
🎜> /**
EJB 인스턴스를 찾는 다음 방법은 완전히 구현되지 않습니다.
일반적으로 Action 클래스는 애플리케이션의 비즈니스 로직을 구현하는 EJB 세션 Bean(또는 일반 JavaBean)을 호출해야 합니다. 대규모 프로젝트에서 개발자는 레이어 사이에 명확한 경계를 그려야 합니다. Action 클래스에서는 JNDI 정보가 포함된 환경의 인스턴스를 가져온 다음 EJB의 JNDI 이름을 통해 해당 홈 인터페이스를 쿼리하고 가져와야 합니다. 프로세스가 간단하지 않으므로 아래 코드 조각은 필요한 구현을 제공하는 작은 예일 뿐입니다.
 litz 매개변수 유형 String, JNDI 쿼리에 전달되는 이름
 litz 반환 유형 Object, 즉 발견된 홈 인터페이스
 ze 검색에 실패하면 NamingException 예외가 발생합니다.
 litz 리소스 정보 획득 실패, MissingResourceException 발생
 */

공용 개체 조회( 문자열 jndiName)
은 NamingException, MissingResourceException {
을 발생시킵니다.   // 为调사용EJB对象,통상JNDI信息적 속성对象
   // 来获得初始环境信息
    if (jndiContext = = null) {
     ResourceBundle 리소스 =
      ResourceBundle.getBundle(" strutssample.properties");
    속성 속성 = new Properties();
     properties.setProperty(
      Context.INITIAL_CONTEXT_FACTORY,
      resource.getString(Context.INITIAL_CONTEXT_FACTORY));
    properties.setProperty (
context.provider_url, resource.getString (context.provider_url)); properties.setProperty (
context.security_principal, resource.getString (context.security_principal)); >    properties.setProperty(
      Context.SECURITY_CREDENTIALS,
      resource.getString(Context.SECURITY_CREDENTIALS));
    jn diContext = new InitialContext(properties);
  }
  
  注중:현재진행的产product中,我们应该는 此处考虑代码的健壮性,将代码加入到try/catch块内,并记录所有错误或重要信息到系统例中。中,我们仅仅把异常往外抛,并假定一会找到EJB对象的home接口并返回。
  
    return (jndiContext.lookup(jndiName));
  }
  
  由于Action은 Struts에서 사용됩니다.它的主要方法应该是一个抽象方法, 而由每个继续的子类来具体实现, 或者 는 其中做一些所有Action려 会做 的 聚 机 , 例如记录log信息。在本例中,我们一切从简,将其抽象の。
  lc 参数mapping:其类型为ActionMapping,将在本Action做跳转选择用
  ℓ 参数actionForm:由Struts根据本次HTTP请求数据填充完成的ActionForm对象(可选,假如存在请求数据的话)
  lc 参数request:此Action所有处理的本次HTTP请求(对象)
  ℓ 参数response:此Action输流数据所要用到的HTTP响应(对象)
  tz 假如有I/O错误 출력, 则本方법抛takeIOException异常
  ℓ 假如处理时发生servlet异常,则本方법抛takeServletException异常
  ℓ 本方法处理完请求后按光处理逻辑返回按应的页face导向(对象)
  
   공개 추상 ActionForward 수행(
    ActionMapping 매핑,
    ActionForm 양식,
    HttpServletRequest 요청,
    HttpServletResponse 응답)
    throws IOException, ServletException;
  }
  
  或者让这个抽象方法更有用一点,那就吧,比如image下面这样在其中记录log。
  
   {
    ActionForward 앞으로 = null;
// 只是简单的记录一些提示信息到서블릿 로그
  
    getServlet().log(
     "AbstStrutsActionBase.perform() [Action Class : "
      + this.getClass().getName( )
      + " ]");
    getServlet().log(
     "AbstStrutsActionBase.perform() [양식 클래스 : "
      + (양식 == null ? "null" : form.getClass().getName())
      + " ]");
   }
  
  然后,我们再编写的每个Action类tour应该从AbstStrutsActionBase继续,并依处理逻辑编写各자체 수행 방법입니다.  
  import java.io.IOException;
  import java.rmi.RemoteException;
  import javax.ejb.CreateException;
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet. http.HttpServletResponse;
  import org.apache.struts.action.ActionError;
  import org.apache.struts.action.ActionErrors;
  import org.apache.struts.action.ActionForm;
  import org.apache.struts.action.ActionMapping;
  import org.apache.struts.action.ActionForward;
  import com.oreilly.forms.LoginForm;
  
  /*
  LoginAction 将演示一个Action将如何被Struts架构所调사용
  在这个例子中 ,我们只是简单的演示perform method是如何调用、执行并返回的
  */
  
  공개 클래스 LoginAction은 AbstStrutsActionBase를 확장합니다 {
  
다음은 사용자를 확인하는 방법입니다. 이 예에는 특별한 구현이 없습니다. 그러나 일반적인 애플리케이션 솔루션은 JavaBean 또는 EJB를 호출하여 완료하는 것입니다. EJB(기본 클래스에서 완성됨)를 찾는 데 사용되는 조회 메소드는 백엔드 데이터베이스에 대해 사용자를 인증하기 위한 인터페이스를 반환하는 이 메소드에서 호출되어야 합니다.
 oz 매개변수 유형 문자열, 검증할 사용자 이름
 

위 내용은 Jakarta Struts 1.1(3) 학습 내용이며, 더 많은 관련 글은 PHP 중국어 홈페이지( www.php.cn) !


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.