一道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,打开浏览器测试一切正常.
 源码可以在我的网盘下载.  下载 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值