一道Struts面试题

 

题目是这样的
有两张表
一张为新闻类别表
有2个字段:

nid(pk)         sort


有一张新闻内容表

有三个字段

cid(pk)       nid(fk)     title     content

要求通过下拉列表框的方法选择新闻类别然后显示该类别的新闻标题(在当前页中显示)
 我是用Struts2+Hibernate3.2+JPA实现的.
数据库脚本:
create   database   if   not   exists  news;
drop   table   if   exists  newssort;
create   table  newssort 
(
  nid 
int   primary   key  AUTO_INCREMENT,
  sort 
varchar ( 50 )
);

drop   table   if   exists  news;
create   table  news
(
  cid 
int   primary   key  AUTO_INCREMENT,
  title 
varchar ( 50 not   null ,
  content 
varchar ( 500 not   null ,
  nid  
int   null
);

insert   into  newssort  values ( null , ' 娱乐 ' );
insert   into  newssort  values ( null , ' 时事 ' );

insert   into  news  values ( null , ' 好事 ' , ' 好事连连哈哈 ' , 1 );
insert   into  news  values ( null , ' 坏事 ' , ' 坏事不断 ' , 1 );
insert   into  news  values ( null , ' 爱情是什么 ' , ' 爱情是什么啊,还没知道呢 ' , 2 );
insert   into   news  values ( null , ' 什么啊 ' , ' 测试内容 ' , 2 );

select   *   from  news;
select   *   from  newssort;
两个VO类:
News.java:
package  com.vo;

import  java.io.Serializable;

import  javax.persistence.Entity;
import  javax.persistence.GeneratedValue;
import  javax.persistence.GenerationType;
import  javax.persistence.Id;
import  javax.persistence.Table;

@SuppressWarnings(
" serial " )
@Entity
@Table(name
= " news " )
public   class  News  implements  Serializable
{
    
private Integer cid;
    
private String title;
    
private String content;
    @Id
    @GeneratedValue(strategy
=GenerationType.AUTO)
    
public Integer getCid()
    
{
        
return cid;
    }


    
public void setCid(Integer cid)
    
{
        
this.cid = cid;
    }


    
public String getTitle()
    
{
        
return title;
    }


    
public void setTitle(String title)
    
{
        
this.title = title;
    }


    
public String getContent()
    
{
        
return content;
    }


    
public void setContent(String content)
    
{
        
this.content = content;
    }

}

Newssort.java:
package  com.vo;

import  java.io.Serializable;
import  java.util.ArrayList;
import  java.util.List;

import  javax.persistence.Entity;
import  javax.persistence.GeneratedValue;
import  javax.persistence.GenerationType;
import  javax.persistence.Id;
import  javax.persistence.JoinColumn;
import  javax.persistence.OneToMany;
import  javax.persistence.Table;

import  org.hibernate.annotations.LazyCollection;
import  org.hibernate.annotations.LazyCollectionOption;

@SuppressWarnings(
" serial " )
@Entity
@Table(name 
=   " newssort " )
public   class  Newssort  implements  Serializable
{
    
private Integer nid;
    
private String sort;
    
private List<News> news = new ArrayList<News>();
    @OneToMany
    @JoinColumn(name
="nid")
    @LazyCollection(LazyCollectionOption.FALSE)
    
public List<News> getNews()
    
{
        
return news;
    }


    
public void setNews(List<News> news)
    
{
        
this.news = news;
    }


    @Id
    @GeneratedValue(strategy 
= GenerationType.AUTO)
    
public Integer getNid()
    
{
        
return nid;
    }


    
public void setNid(Integer nid)
    
{
        
this.nid = nid;
    }

    
    
public String getSort()
    
{
        
return sort;
    }


    
public void setSort(String sort)
    
{
        
this.sort = sort;
    }

}


写个测试类先测试一个持久层操作:
package  com.test;

import  java.util.Iterator;
import  org.hibernate.Session;
import  org.hibernate.cfg.AnnotationConfiguration;
import  org.junit.After;
import  org.junit.Before;

import  com.vo.News;
import  com.vo.Newssort;
public   class  Test
{
    
private Session session ;
    @Before
    
public void setUp()
    
{
        session 
= new AnnotationConfiguration().configure().buildSessionFactory().openSession();
    }

    @After
    
public void tearDown()
    
{
        session.close();
    }

    
    @SuppressWarnings(
"unchecked")
    @org.junit.Test
    
public void testFind()
    
{
        @SuppressWarnings(
"unused")
        
//List<Newssort> newssort = session.createCriteria(Newssort.class).list();
        Newssort newssort = (Newssort) session.load(Newssort.class2);
        
for(Iterator<News> i = newssort.getNews().iterator();i .hasNext();)
        
{
            String title 
= i.next().getTitle();
            System.out.println(title);
        }

    }

}

好了写Action
NewsAction:
package  com.web.action;

import  java.util.List;
import  java.util.Map;

import  org.hibernate.Session;
import  org.hibernate.cfg.AnnotationConfiguration;

import  com.opensymphony.xwork2.ActionContext;
import  com.opensymphony.xwork2.ActionSupport;
import  com.vo.News;
import  com.vo.Newssort;

@SuppressWarnings( 
"serial""unchecked" } )
public   class  NewsAction  extends  ActionSupport
{
    
private Session session;
    
private Integer sortid;

    
public Integer getSortid()
    
{
        
return sortid;
    }


    
public void setSortid(Integer sortid)
    
{
        
this.sortid = sortid;
    }


    
public void init()
    
{
        session 
= new AnnotationConfiguration().configure()
                .buildSessionFactory().openSession();
    }


    
public String findNewssort()
    
{
        
this.init();
        List
<Newssort> sorts = session.createCriteria(Newssort.class).list();
        Map request 
= (Map) ActionContext.getContext().get("request");
        request.put(
"sorts", sorts);
        session.close();
        
return SUCCESS;
    }

    
    
public String findNews()
    
{
        
this.init();
        System.out.println(
"findNews");
        List
<Newssort> sorts = session.createCriteria(Newssort.class).list();
        Newssort newssort 
= (Newssort) session.load(Newssort.class, sortid);
        List
<News> news = newssort.getNews();
        Map request 
= (Map) ActionContext.getContext().get("request");
        request.put(
"sorts", sorts);
        request.put(
"news", news);
        session.close();
        
return SUCCESS;
    }

}


hibernate.cfg.xml:
<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
>
< hibernate-configuration >
    
< session-factory >
        
< property  name ="dialect" > org.hibernate.dialect.MySQLDialect </ property >
        
< property  name ="connection.driver_class" > com.mysql.jdbc.Driver </ property >
        
< property  name ="connection.url" > jdbc:mysql://localhost:3306/news </ property >
        
< property  name ="connection.username" > root </ property >
        
< property  name ="connection.password" > root </ property >
        
< property  name ="show_sql" > true </ property >
        
<!--  实体类映射  -->
        
< mapping  class ="com.vo.News" />
        
< mapping  class ="com.vo.Newssort" />
    
</ session-factory >
</ hibernate-configuration >     

struts.xml:
<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"
>
< struts >
    
< package  name ="com"  extends ="struts-default" >
        
< action  name ="findNewssort"  class ="com.web.action.NewsAction"  method ="findNewssort" >
            
< result  name ="success" > /index.jsp </ result >
        
</ action >
        
        
< action  name ="findNews"  class ="com.web.action.NewsAction"  method ="findNews" >
            
< result  name ="success" > /index.jsp </ result >
        
</ action >
    
</ package >
</ struts >     
web.xml:
<? xml version="1.0" encoding="UTF-8" ?>
< web-app  version ="2.4"  xmlns ="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
    
< filter >
        
< filter-name > struts2 </ filter-name >
        
< filter-class >
            org.apache.struts2.dispatcher.FilterDispatcher
        
</ filter-class >
    
</ filter >
    
< filter-mapping >
        
< filter-name > struts2 </ filter-name >
        
< url-pattern > /* </ url-pattern >
    
</ filter-mapping >
    
< welcome-file-list >
        
< welcome-file > prepare.jsp </ welcome-file >
    
</ welcome-file-list >
</ web-app >

前台有两个jsp:
prapare.jsp:
<% @ page language="java" pageEncoding="GB18030" %>
< html >
  
< head >
    
< title > My JSP 'index.jsp' starting page </ title >
    
< script  type ="text/javascript" >
        window.location 
= "findNewssort.action";
    
</ script >
  
</ head >
  
< body >
  
</ body >
</ html >

index.jsp:
<% @ page language="java" pageEncoding="GB18030" %>
<% @taglib uri="/struts-tags" prefix="s"  %>
< html >
  
< head >
    
< title > My JSP 'index.jsp' starting page </ title >
    
< script  type ="text/javascript" >
        
function findNews()
        
{
            
var sort = document.getElementById("sort");
            window.location 
= "findNews.action?sortid=" + sort.value;
        }

    
</ script >
  
</ head >
  
< body >
      
< select  id ="sort"  name ="sortid"  onchange ="findNews();" >
      
< option > 请选择 </ option >
          
< s:iterator  value ="#request['sorts']"  id ="sort"   >
              
< option  value ="<s:property value='#sort.nid'/>"   >< s:property  value ="#sort.sort"   /></ option >
          
</ s:iterator >
      
</ select >
      
< hr  />
      
< s:iterator  value ="#request['news']"  id ="news" >
          
< s:property  value ="#news.title" />< br  />
      
</ s:iterator >
  
</ body >
</ html >

好了,一切OK,打开浏览器测试一切正常.
 源码可以在我的网盘下载. 下载

你可能感兴趣的:(一道Struts面试题)