我的漫漫程序之旅

专注于JavaWeb开发
随笔 - 39, 文章 - 310, 评论 - 411, 引用 - 0
数据加载中……

一道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(50not null,
  content 
varchar(500not 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,打开浏览器测试一切正常.
 源码可以在我的网盘下载. 下载

posted on 2007-12-08 21:14 々上善若水々 阅读(8772) 评论(1)  编辑  收藏

评论

# re: 一道Struts面试题  回复  更多评论   

碰上这种面试题瞬间就是崩溃掉。
2013-01-30 10:49 | Unmi

只有注册用户登录后才能发表评论。


网站导航: