html2javabean

39579 단어 javabean
이것은 표제당의 혐의가 있다.이름은 그럴듯하네.웹 파충류에 관한 작은 도구는 모두 써 보셨죠.그러나 일반적으로 이런 것을 쓰는 것은 어떤 간단한 수요를 완성하기 위해 쓴 스크립트 언어와 유사한 것이다. 일반적으로 코드가 많지 않고 해커 프로그램의 코드 스타일과 유사하다.여러분들은 대형 프로젝트를 해본 적이 없으실 거예요. 웹 페이지 내용을 모두 데이터 원천으로 하는 거죠?나는 이런 프로젝트를 해 본 적이 있다, 허허.만약 정말 여러 사람이 합작하고 주기가 비교적 길며 제품형 프로젝트라면 유지보수, 업그레이드가 필요하다면 코드는 일회성이 아니다.기업이 개발한 코드 스타일이 좀 있어야 돼.만약에 데이터 원본이 모두 웹 페이지에서 캡처해야 한다면 개발은 매우 간단할 것이다. 먼저 URLconnection 같은api를 통해 웹 페이지 내용을 얻고 정규 표현식으로 그 안에 유용한 내용을 분석한다.이렇게 간단해.그러나 만약에 하나의 항목이라면 페이지가 수천 개에 달하고 또 있습니다. 그리고 다른 사람의 페이지 형식이 바뀔 수도 있고 레이아웃이 바뀔 수도 있습니다. 예를 들어 html이 user001이면 지금은
  • user001
  • 로 바뀌었고 유용한 데이터 "user001"은 변하지 않았지만 양식이 바뀌었습니다.이럴 때 코드를 바꾸려면 코드에서 정규 표현식을 바꿔야 되는 거 아니야?이때 우리는 특정한 html 코드에서 유용한 정보를 추출하여 우리가 조작할 수 있는 업무 bean 대상으로 전환할 수 있는 기능 구성 요소가 필요하다.그리고 이 추출 규칙은 코드에 하드코딩된 것이 아니라 설정할 수 있습니다.이와 같은 프로파일:
     1 <html2javaConfig>
    2
    3 <bean id="user1" class="com.googlecode.html2javabean.client.User">
    4
    5 <property name="name" groupIndex="1">
    6
    7 <![CDATA[
    8
    9 <span id="lblName">(.*?)</span>
    10
    11 ]]>
    12
    13 </property>
    14
    15 <property name="code">
    16
    17 <![CDATA[
    18
    19 <span id="lblWork">(.*?)</span></td>
    20
    21 ]]>
    22
    23 </property>
    24
    25 <property name="isMan">
    26
    27 <![CDATA[
    28
    29 <span id="lblSex">(.*?)</span></td>
    30
    31 ]]>
    32
    33 </property>
    34
    35 </bean>
    36
    37 </html2javaConfig>

    추출할 html 파일은 다음과 같습니다.
      1 <table style="height: 306px; width: 99%;">
    2
    3 <tr>
    4
    5 <th style="width: 100px;" align="left">
    6
    7 </th>
    8
    9 <td>
    10
    11 &nbsp;<span id="lblName">tony</span>
    12
    13 </td>
    14
    15 </tr>
    16
    17 <tr>
    18
    19 <th align="left">
    20
    21 </th>
    22
    23 <td>
    24
    25 <span id="lblWork">ite00395</span></td>
    26
    27 </tr>
    28
    29 <tr>
    30
    31 <th align="left">
    32
    33 </th>
    34
    35 <td>
    36
    37 <span id="lblSex">man</span></td>
    38
    39 </tr>
    40
    41 <tr>
    42
    43 <th align="left">
    44
    45 Email:</th>
    46
    47 <td>
    48
    49 <span id="lblEmail">[email protected]</span>
    50
    51 </td>
    52
    53 </tr>
    54
    55 <tr>
    56
    57 <th align="left">
    58
    59 MSN:</th>
    60
    61 <td>
    62
    63 <span id="lblMsn"> [email protected]</span></td>
    64
    65 </tr>
    66
    67 <tr>
    68
    69 <th align="left">
    70
    71 </th>
    72
    73 <td>
    74
    75 <span id="lblPhone"></span></td>
    76
    77 </tr>
    78
    79 <tr>
    80
    81 <th align="left">
    82
    83 </th>
    84
    85 <td>
    86
    87 <span id="lblMobile">13714896419</span></td>
    88
    89 </tr>
    90
    91 <tr>
    92
    93 <th align="left">
    94
    95 </th>
    96
    97 <td valign="middle">
    98
    99 <span id="lblDepartment">P </span></td>
    100
    101 </tr>
    102
    103 <tr>
    104
    105 <th align="left">
    106
    107 </th>
    108
    109 <td valign="middle">
    110
    111 <span id="lblDeptAddress"></span></td>
    112
    113 </tr>
    114
    115 </table>

    최종적으로 전환된javabean 대상은 다음과 같습니다.
    public class User implements Serializable{



    /**

    * serialVersionUID

    */

    private static final long serialVersionUID = 5014957386430143870L;



    private String name;

    private String code;

    private boolean isMan;

    private String email;

    private String msn;

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public String getCode() {

    return code;

    }

    public void setCode(String code) {

    this.code = code;

    }

    public boolean isMan() {

    return isMan;

    }

    public void setMan(boolean isMan) {

    this.isMan = isMan;

    }

    public String getEmail() {

    return email;

    }

    public void setEmail(String email) {

    this.email = email;

    }

    public String getMsn() {

    return msn;

    }

    public void setMsn(String msn) {

    this.msn = msn;

    }

    }

    이렇게 하면 다음 코드로 이 구성 요소를 호출할 수 있습니다.
    public void testParse() throws IOException{

    String resource
    = "h2j_config.xml";

    Reader reader
    = Resources.getResourceAsReader(resource);

    Html2JavabeanClient client
    = Html2JavabeanClientBuilder.buildSqlMapClient(reader);

    StringWriter sw
    = new StringWriter();

    InputStream is
    = Resources.getResourceAsStream("oneuser.html");

    BufferedReader reader1
    = new BufferedReader(new InputStreamReader(is));

    String temp
    = null;

    while((temp = reader1.readLine()) != null){

    sw.write(temp);

    }

    reader1.close();

    User u
    = (User)client.parseForObject("user1", sw.getBuffer().toString());

    System.out.println(u.getName()
    + " " + u.getCode());

    }

    사용하기에 마치 ibatis와 비슷한 것 같아요. 왜냐하면 이 구성 요소는 ibatis에서 xml을 해석하는 코드를 가지고 고친 것이기 때문에 ibatis 원본 코드를 배울 때 이런 생각이 들었어요.만약 이런 상황을 만난 프로젝트가 많은 html을 해석하지 않으면 이런 구성 요소의 생각은 그래도 괜찮다.필요한 것은 내가 쓴 코드를 참고해서 직접 쓸 수 있다. 나의 코드는 사실 다 쓰지 못했고 단지 실험적으로 데모를 만들었다.소통이 필요하시면 이메일로 보내주세요.광저우 잠촌 고과와 그 형제들이 함께 했던 날이 또 생각났다.프로젝트 코드 주소: http://code.google.com/p/html2javabean/

    좋은 웹페이지 즐겨찾기