一道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
{
privateIntegercid;
privateStringtitle;
privateStringcontent;
@Id
@GeneratedValue(strategy
=GenerationType.AUTO)
publicIntegergetCid()
{
returncid;
}


publicvoidsetCid(Integercid)
{
this.cid=cid;
}


publicStringgetTitle()
{
returntitle;
}


publicvoidsetTitle(Stringtitle)
{
this.title=title;
}


publicStringgetContent()
{
returncontent;
}


publicvoidsetContent(Stringcontent)
{
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
{
privateIntegernid;
privateStringsort;
privateList<News>news=newArrayList<News>();
@OneToMany
@JoinColumn(name
="nid")
@LazyCollection(LazyCollectionOption.FALSE)
publicList<News>getNews()
{
returnnews;
}


publicvoidsetNews(List<News>news)
{
this.news=news;
}


@Id
@GeneratedValue(strategy
=GenerationType.AUTO)
publicIntegergetNid()
{
returnnid;
}


publicvoidsetNid(Integernid)
{
this.nid=nid;
}


publicStringgetSort()
{
returnsort;
}


publicvoidsetSort(Stringsort)
{
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
{
privateSessionsession;
@Before
publicvoidsetUp()
{
session
=newAnnotationConfiguration().configure().buildSessionFactory().openSession();
}

@After
publicvoidtearDown()
{
session.close();
}


@SuppressWarnings(
"unchecked")
@org.junit.Test
publicvoidtestFind()
{
@SuppressWarnings(
"unused")
//List<Newssort>newssort=session.createCriteria(Newssort.class).list();
Newssortnewssort=(Newssort)session.load(Newssort.class,2);
for(Iterator<News>i=newssort.getNews().iterator();i.hasNext();)
{
Stringtitle
=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
{
privateSessionsession;
privateIntegersortid;

publicIntegergetSortid()
{
returnsortid;
}


publicvoidsetSortid(Integersortid)
{
this.sortid=sortid;
}


publicvoidinit()
{
session
=newAnnotationConfiguration().configure()
.buildSessionFactory().openSession();
}


publicStringfindNewssort()
{
this.init();
List
<Newssort>sorts=session.createCriteria(Newssort.class).list();
Maprequest
=(Map)ActionContext.getContext().get("request");
request.put(
"sorts",sorts);
session.close();
returnSUCCESS;
}


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

}


hibernate.cfg.xml:
<? xmlversion="1.0"encoding="UTF-8" ?>
<! DOCTYPEhibernate-configurationPUBLIC
"-//Hibernate/HibernateConfigurationDTD3.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:
<? xmlversion="1.0"encoding="UTF-8" ?>
<! DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.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:
<? xmlversion="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:
<% @pagelanguage="java"pageEncoding="GB18030" %>
< html >
< head >
< title > MyJSP'index.jsp'startingpage </ title >
< script type ="text/javascript" >
window.location
="findNewssort.action";
</ script >
</ head >
< body >
</ body >
</ html >

index.jsp:
<% @pagelanguage="java"pageEncoding="GB18030" %>
<% @tagliburi="/struts-tags"prefix="s" %>
< html >
< head >
< title > MyJSP'index.jsp'startingpage </ title >
< script type ="text/javascript" >
functionfindNews()
{
varsort=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:propertyvalue='#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)