我的漫漫程序之旅
专注于JavaWeb开发
一道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.
class
,
2
);
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
々上善若水々
阅读(4496)
评论(0)
编辑
收藏
IT新闻
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2007-12-08 21:29 编辑过
导航
首页
新随笔
联系
管理
<
2007年12月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
统计
随笔 - 33
文章 - 291
评论 - 220
引用 - 0
留言簿
(21)
给我留言
查看公开留言
查看私人留言
随笔档案
(36)
2009年7月 (1)
2009年5月 (2)
2009年4月 (2)
2009年3月 (1)
2009年2月 (3)
2009年1月 (1)
2008年12月 (2)
2008年11月 (3)
2008年9月 (2)
2008年8月 (1)
2008年7月 (2)
2008年6月 (2)
2008年5月 (9)
2008年4月 (2)
2007年12月 (3)
文章分类
(289)
AJAX(7)
(rss)
flex3(1)
(rss)
Hibernate(3)
(rss)
J2ME(2)
(rss)
J2SE(39)
(rss)
JavaScript(58)
(rss)
JavaWeb(24)
(rss)
Java笔试与面试(52)
(rss)
JQuery(1)
(rss)
opensource(13)
(rss)
Spring(10)
(rss)
SSH整合系列(2)
(rss)
Struts1.x(3)
(rss)
Struts2(12)
(rss)
WebService(14)
(rss)
数据库(14)
(rss)
数据结构与算法(7)
(rss)
设计模式(17)
(rss)
软件测试(10)
(rss)
文章档案
(240)
2009年6月 (1)
2009年4月 (3)
2009年3月 (3)
2009年1月 (2)
2008年12月 (4)
2008年11月 (4)
2008年10月 (2)
2008年9月 (2)
2008年8月 (10)
2008年7月 (22)
2008年6月 (13)
2008年5月 (45)
2008年4月 (17)
2008年3月 (5)
2008年2月 (11)
2008年1月 (27)
2007年12月 (45)
2007年11月 (24)
搜索
最新评论
1. re: JSP实现点击链接后下载文件(相当于右键另存)功能
原来还有这么清晰的方法啊
--blackbat
2. re: javascript文件夹选择框的两种解决方案
,呵呵,谢谢能分享
--明君
3. re: Struts1.x中的令牌(Token)使用
非常好,非常好,非常好
--GloomySunday
4. re: 两个变量交换的三种方法
不知道
--大使
5. re: SQL分割字符串详解
写的很不错!
--马晓伟
阅读排行榜
1. 一道Struts面试题(4496)
2. javascript文件夹选择框的两种解决方案(3565)
3. ExtJS & GTGrid 简单用户管理(2824)
4. Flash图表(FusionChartsV3)的简单应用 (2529)
5. jexcelapi使用小记(2476)
评论排行榜
1. Flash图表(FusionChartsV3)的简单应用 (22)
2. [原创]J2ME/J2EE实现用户登录交互(8)
3. 基于jsTree的无限级树JSON数据的转换(8)
4. WEB页面导出为Word文档后分页&横向打印的方法 (8)
5. Flash图片轮换显示的效果抽取(7)