资源描述
广州大学华软软件学院企业javaII课程设计新闻联播
- 66 -
2020年5月29日
文档仅供参考
广州大学华软软件学院
第六学期
<企业级JAVAⅡ>课程设计
题 目:新闻网、新闻网信息管理系统
专 业:网络应用软件开发
班 级:IB01
组 长:邓理安
组 员:方泓清
递交日期: 6月4日
目录
新闻网信息管理系统(后台) - 1 -
一、系统执行原理 - 2 -
二、系统功能需求 - 2 -
1、 系统功能描述 - 2 -
三、数据库设计 - 4 -
1、数据库使用MY SQL。 2、相关各数据库表: - 4 -
1、公共模块设计与实现 - 5 -
2.系统各功能模块设计与实现 - 13 -
新闻联播新闻网(前台) - 29 -
一、系统执行原理 - 29 -
二、系统功能需求 - 30 -
三、数据库设计 - 31 -
1、数据库使用MY SQL。 2、相关各数据库表: - 31 -
四、系统实现 - 33 -
1、公共模块设计与实现 - 33 -
系统各功能模块设计与实现 - 38 -
五、附录 - 60 -
新闻网信息管理系统(后台)
上课班级:IB01 学号: 姓名:方泓清
学号: 姓名:邓理安
一、系统执行原理
1.客户机将HTTP请求发送给Web服务器
2.Web服务器将该请求转发给struts.xml
3.在struts.xml中的action的type实现spring的请求代理
4.在spring的配置文件中对action类进行注入
5.action类中注入sevice,service中注入dao,当服务器启动时,spring对类自动设置。
6.执行顺序从action --->service----->dao,然后返回。
7.action将响应发送给Web服务器
8.Web服务器将响应转发给客户机
二、系统功能需求
1、 系统功能描述
角色:管理员
功能描述:
(1)身份验证功能:管理员只有成功登录后才可进入系统管理新闻以及相关信息。
其流程图如图1-1-1所示:
图1-1-1
(2)管理员:可增加、修改、删除、查询新闻信息;可修改密码、增加管理员。
其流程图如图1-1-2所示:
图1-1-2
三、数据库设计
1、数据库使用MY SQL。
2、相关各数据库表:
①管理员表admin(如图1-2-1)
图1-2-1
②新闻信息表news(如图2-2)
图1-2-2
四、系统实现
1、公共模块设计与实现
①applicationContext.xml(位于NewsManage/WebRoot/WEB-INF目录下)用于管理数据库连接、Hibernate的sessionFactory、事务管理以及struts2的action。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/ /XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 定义c3p0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<!-- 指定连接数据库驱动 -->
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<!-- 指定连接数据库url -->
<property name="jdbcUrl"
value="jdbc:mysql://localhost:3306/newsmanage?useUnicode=true&characterEncoding=utf-8" />
<property name="user" value="root" />
<property name="password" value="" />
</bean>
<!-- 定义Hibernate的sessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 依赖注入上面所配置的数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 使用mappingResource属性列出全部映射文件 -->
<property name="mappingResources">
<list>
<value>com/sise/s2sh/po/Admin.hbm.xml</value>
<value>com/sise/s2sh/po/News.hbm.xml</value>
</list>
</property>
<!-- 配置Hibernate的sessionFactory的属性 -->
<property name="hibernateProperties">
<props>
<!-- 指定使用方言 -->
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<!-- 是否在控制台输出hql语句 -->
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
</bean>
<!-- 定义事务管理 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 定义事务管理拦截器 -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义代理自动管理事务 -->
<bean id="ProxyCreator"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定需要Spring管理事务的Bean -->
<property name="beanNames">
<list>
<value>adminService</value>
<value>newsService</value>
</list>
</property>
<!-- 调用事务管理拦截器 -->
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<!-- 配置HibernateTemplate -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 依赖注入 -->
<bean id="adminService" class="com.sise.s2sh.service.impl.AdminServiceImpl">
<property name="adminDao" ref="adminDao" />
</bean>
<bean id="newsService" class="com.sise.s2sh.service.impl.NewsServiceImpl">
<property name="newsDao" ref="newsDao" />
</bean>
<bean id="adminDao" class="com.sise.s2sh.dao.impl.AdminDaoImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
</bean>
<bean id="newsDao" class="com.sise.s2sh.dao.impl.NewsDaoImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
</bean>
<bean id="login" class="com.sise.s2sh.action.admin.Login">
<property name="adminService" ref="adminService" />
</bean>
<bean id="newnews" class="com.sise.s2sh.action.news.NewNews">
<property name="newsService" ref="newsService" />
</bean>
<bean id="findNews" class="com.sise.s2sh.action.news.findNews">
<property name="newsService" ref="newsService" />
</bean>
<bean id="findRangeNews" class="com.sise.s2sh.action.news.FindRangeNews">
<property name="newsService" ref="newsService" />
</bean>
<bean id="firstPage" class="com.sise.s2sh.action.news.FirstNewsPage">
<property name="newsService" ref="newsService" />
</bean>
<bean id="previousOrNextPage" class="com.sise.s2sh.action.news.PreviousOrNextNewsPage">
<property name="newsService" ref="newsService" />
</bean>
<bean id="lastPage" class="com.sise.s2sh.action.news.LastNewsPage">
<property name="newsService" ref="newsService" />
</bean>
<bean id="findOneNews" class="com.sise.s2sh.action.news.findOneNews">
<property name="newsService" ref="newsService" />
</bean>
<bean id="updateNews" class="com.sise.s2sh.action.news.UpdateNews">
<property name="newsService" ref="newsService" />
</bean>
<bean id="deleteOneNews" class="com.sise.s2sh.action.news.DeleteOneNews">
<property name="newsService" ref="newsService" />
</bean>
<bean id="changepwd" class="com.sise.s2sh.action.admin.ChangePwd">
<property name="adminService" ref="adminService" />
</bean>
<bean id="createadmin" class="com.sise.s2sh.action.admin.Createadmin">
<property name="adminService" ref="adminService" />
</bean>
<bean id="logout" class="com.sise.s2sh.action.admin.Logout" />
</beans>
②struts.xml(位于NewsManage/src目录下)用于管理应用中的action映射,以及action包含的result定义等。主要配置struts项目的一些全局属性,用户和响应action之间的对应关系,以及配置action中可能用到的参数、处理结果返回页面,还有拦截器的配置等。
<?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>
<include file="struts-default.xml" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<constant name="struts.custom.i18n.resources" value="Messages" />
<package name="default" extends="struts-default">
<!-- 自定义拦截器 -->
<interceptors>
<interceptor name="SessionInterceptor"
class="com.sise.s2sh.action.interceptors.SessionInterceptor" />
</interceptors>
<global-results>
<result name="loginPage">/sessionNull.jsp</result>
</global-results>
<action name="loginValidate" class="com.sise.s2sh.action.validators.LoginValidate">
<result name="input">/login.jsp</result>
<result type="chain">login</result>
</action>
<action name="login" class="login">
<result>/index.jsp</result>
<result name="error">/login.jsp</result>
</action>
<action name="newnewsValidate" class="com.sise.s2sh.action.validators.NewnewsValidate">
<result name="input">/newsSystem/newsManage/news_add.jsp</result>
<result type="chain">newNews</result>
<interceptor-ref name="defaultStack" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="newNews" class="newnews">
<result name="success" type="redirect">findNews.action</result>
<result name="addnewsError">/newsSystem/newsManage/news_add.jsp</result>
<result name="invalid.token">/newsSystem/newsManage/news_add.jsp</result>
<!-- 限制页面重复提交 -->
<interceptor-ref name="defaultStack" />
<interceptor-ref name="tokenSession" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="findNews" class="findNews">
<result>/newsSystem/newsManage/news_m.jsp</result>
<interceptor-ref name="defaultStack" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="findRangeNews" class="findRangeNews">
<result>/newsSystem/newsManage/news_m.jsp</result>
<interceptor-ref name="defaultStack" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="firstPage" class="firstPage">
<result>/newsSystem/newsManage/news_m.jsp</result>
<interceptor-ref name="defaultStack" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="previousOrNextPage" class="previousOrNextPage">
<result>/newsSystem/newsManage/news_m.jsp</result>
<interceptor-ref name="defaultStack" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="lastPage" class="lastPage">
<result>/newsSystem/newsManage/news_m.jsp</result>
<interceptor-ref name="defaultStack" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="findOneNews" class="findOneNews">
<result>/newsSystem/newsManage/news_edit.jsp</result>
<interceptor-ref name="defaultStack" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="showOneNews" class="findOneNews">
<result>/newsSystem/newsManage/news_see.jsp</result>
<interceptor-ref name="defaultStack" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="updatenewsValidate"
class="com.sise.s2sh.action.validators.UpdateNewsValidate">
<result name="input">/newsSystem/newsManage/news_edit.jsp</result>
<result type="chain">updateNews</result>
<interceptor-ref name="defaultStack" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="updateNews" class="updateNews">
<result name="success" type="redirect">findNews.action</result>
<result name="invalid.token">/newsSystem/newsManage/news_edit.jsp</result>
<!-- 限制页面重复提交 -->
<interceptor-ref name="defaultStack" />
<interceptor-ref name="tokenSession" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="deleteOneNews" class="deleteOneNews">
<result name="success" type="redirect">findNews.action</result>
<result name="deletenewserror" type="chain">findNews</result>
<interceptor-ref name="defaultStack" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="changepwdValidate"
class="com.sise.s2sh.action.validators.ChangePwdValidate">
<result name="input">/newsSystem/adminManage/pwd_change.jsp</result>
<result type="chain">changepwd</result>
<interceptor-ref name="defaultStack" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="changepwd" class="changepwd">
<result name="success">
/newsSystem/adminManage/pwd_changesuccess.jsp
</result>
<result name="pwderror">/newsSystem/adminManage/pwd_change.jsp</result>
<interceptor-ref name="defaultStack" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="createadminValidate"
class="com.sise.s2sh.action.validators.CreateAdminValidate">
<result name="input">/newsSystem/adminManage/admin_add.jsp</result>
<result type="chain">createadmin</result>
<interceptor-ref name="defaultStack" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="createadmin" class="createadmin">
<result>/newsSystem/adminManage/admin_addsuccess.jsp</result>
<result name="createAdminError">/newsSystem/adminManage/admin_add.jsp</result>
<interceptor-ref name="defaultStack" />
<interceptor-ref name="tokenSession" />
<interceptor-ref name="SessionInterceptor" />
</action>
<action name="logout" class="logout">
<result type="redirect">/login.jsp</result>
</action>
</package>
</struts>
③web.xml(位于NewsManage/WebRoot/WEB-INF目录下)web容器的配置文件。用于指定应用程序的开始页面、注册和指定任何应用程序的过滤器filter、监听器listener、指定应用上下文初始参数的名/值、为servlet注册和创立URL等。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="
xmlns:xsi="http://www.w3.org/ /XMLSchema-instance"
xsi:schemaLocation="
<welcome-file-list>
<welcome-file>/login.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<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>
<servlet>
<servlet-name>safecode</servlet-name>
<servlet-class>com.sise.s2sh.util.SafeCode</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>safecode</servlet-name>
<url-pattern>/safecode</url-pattern>
</servlet-mapping>
</web-app>
2.系统各功能模块设计与实现
①登录功能
·管理员访问登录页面(login.jsp)进入登录界面并输入用户名、密码和验证码,由系统进行
判断(首先判断验证码是否正确,若正确则进一步判断用户名和密码,否则提示相应信息),如果为合法用户则进入系统界面,否则提示相应信息。登录同时将保存当前管理员信息到session对象中,如果管理员直接访问系统主页面(index.jsp)将获取不到用户名,此时会跳转回登录页面并提示相应信息。
·运行界面如图1-3-1:
图1-3-1
·关键代码如下:
@Override
public String execute() throws Exception {
HttpSession session = ServletActionContext.getRequest().getSession();
if (session.getAttribute("rand") == null) {
return ERROR;
}
// 获得图形校验码
String sf = (String) session.getAttribute("rand");
// 如果图形校验码正确,判断帐号、密码是否正确
if (sf.equals(safecode)) {
Admin admin = adminService.findAdmin(name, password);
if (admin == null) {
addActionError(getText("loginerror"));
return ERROR;
} else {
// 将admin信息存入session
session.setAttribute("admin", admin);
session.setAttribute("name", admin.getName());
session.setAttribute("previousLogintime", admin.getLogintime());
// 获得当前系统时间并格式化,存入管理员登录时间
Date date = Calendar.getInstance().getTime();
SimpleDateFormat formatter = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(date);
admin.set
展开阅读全文