11.4、项目程序设计
11.4.1、反向工程
反向工程配置文件mbgconfig.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration> <context id="testTables" targetRuntime="MyBatis3"> <commentGenerator> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <property name="suppressAllComments" value="true" /> </commentGenerator> <!--数据库连接的信息:驱动类、连接地址、用户名、密码 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/prjectdb" userId="root" password="root"> </jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver>
<!-- targetProject:生成PO类的位置 --> <javaModelGenerator targetPackage="entity" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 --> <sqlMapGenerator targetPackage="mapper" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="mapper" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 指定数据库表 --> <table tableName="prjects"></table> <table tableName="chapters"></table> <table tableName="knowledgePoints"></table> <table tableName="managers"></table>
</context> </generatorConfiguration> |
反向工程程序文件ReverseDb.java
package reversedb; import java.io.File; import java.util.ArrayList; import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.config.Configuration; import org.mybatis.generator.config.xml.ConfigurationParser; import org.mybatis.generator.internal.DefaultShellCallback;
public class ReverseDb { public static void main(String[] args) { List<String> warnings = new ArrayList<String>(); boolean overwrite = true; //如果这里出现空指针,直接写绝对路径即可。 String genCfg = "D:\\ssmprj\\prjectmanage\\src\\mbgconfig.xml"; File configFile = new File(genCfg); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = null; try { config = cp.parseConfiguration(configFile); } catch (Exception e) { e.printStackTrace(); } DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = null; try { myBatisGenerator = new MyBatisGenerator(config, callback, warnings); } catch (Exception e) { e.printStackTrace(); } try { myBatisGenerator.generate(null); } catch (Exception e) { e.printStackTrace(); } } } |
在项目中添加entity包和mapper包并运行反向工程程序文件ReverseDb.java,我们得到如下程序文件结构,其中包entity和包mapper中的文件都是反向工程自动生成的文件,这些文件我们不用做任何修改。

11.4.2、编写后台代码

在项目的src目录中继续添加上图所示的包和类。
1、在项目中添加biz包并编写程序文件ApplicationContexter.java如下:
package biz; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ApplicationContexter { static ApplicationContext appc=null; public static ApplicationContext getApplicationContext(){ if(appc==null)appc=new ClassPathXmlApplicationContext("applicationContext.xml"); return appc; } } |
2、在包biz中添加ManagersBiz.java类,代码如下:
package biz;
import biz.ApplicationContexter; import entity.Managers; import mapper.ManagersMapper;
public class ManagersBiz { public void addManager(Managers manager){ ManagersMapper ud=(ManagersMapper)ApplicationContexter.getApplicationContext().getBean("ManagersMapper"); ud.insert(manager); } } |
3、在包biz中添加TestManagersBiz.java类,代码如下:
package biz; import entity.Managers;
public class TestManagersBiz { public static void main(String[] args) { Managers m=new Managers(); m.setManagername("tom"); m.setManagerpassword("tom"); new ManagersBiz().addManager(m); } } |
4、在src目录下新编写数据库配置文件db.properties如下:
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/prjectdb jdbc.username=root jdbc.password=root jdbc.maxTotal=30 jdbc.maxIdle=10 jdbc.initialSize=5 |
5、编写applicationContext.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> <!-- 读取db.properties --> <context:property-placeholder location="classpath:db.properties"/> <!-- 配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> <!--数据库驱动 --> <property name="driverClassName" value="${jdbc.driver}" /> <!--连接数据库的url --> <property name="url" value="${jdbc.url}" /> <!--连接数据库的用户名 --> <property name="username" value="${jdbc.username}" /> <!--连接数据库的密码 --> <property name="password" value="${jdbc.password}" /> <!--最大连接数 --> <property name="maxTotal" value="${jdbc.maxTotal}" /> <!--最大空闲连接 --> <property name="maxIdle" value="${jdbc.maxIdle}" /> <!--初始化连接数 --> <property name="initialSize" value="${jdbc.initialSize}" /> </bean> <!-- 事务管理器,依赖于数据源 --> <bean id="transactionManager" class= "org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 开启事务注解 --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- 配置MyBatis工厂SqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--注入数据源 --> <property name="dataSource" ref="dataSource" /> <!--指定核MyBatis心配置文件位置 --> <property name="configLocation" value="classpath:mybatis-config.xml" /> </bean> <!-- 配置mapper扫描器 -->
<bean id="ManagersMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <!-- 指定要映射的mapper接口的全限定名 --> <property name="mapperInterface" value="mapper.ManagersMapper"></property> <!-- 指定sqlSessionFactory --> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean> <!-- 扫描Service --> </beans> |
6、编写mybatis-config.xml文件如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 别名定义 --> <typeAliases> <package name="entity" /> </typeAliases> </configuration>
|
运行程序文件TestManagersBiz.java类,并在Mysql中查询如下图,可以看到信息已经正确添加到数据库中了。

从上述程序运行结果看,各个配置文件都已经正确的配置了。下面就是针对每一个Mapper接口编写对应的dao(biz)文件。
7、修改ManagersBiz.java类,代码如下:
package biz;
import biz.ApplicationContexter; import entity.Managers; import entity.ManagersExample; import entity.ManagersExample.Criteria; import mapper.ManagersMapper; public class ManagersBiz { //添加管理员 public void addManager(Managers manager){ ManagersMapper ud=(ManagersMapper)ApplicationContexter.getApplicationContext().getBean("ManagersMapper"); ud.insert(manager); } //更新密码 public void updateManagerpw(String managername,String manageroldpw,String managernewpw){ ManagersMapper ud=(ManagersMapper)ApplicationContexter.getApplicationContext().getBean("ManagersMapper"); //生成一个条件对象 ManagersExample me=new ManagersExample(); Criteria c=me.createCriteria(); //添加条件 c.andManagernameEqualTo(managername); c.andManagerpasswordEqualTo(manageroldpw); // if(ud.selectByExample(me).size()>0){ //查询符合条件的管理员对象并更新密码 Managers m=ud.selectByExample(me).get(0); m.setManagerpassword(managernewpw); ud.updateByPrimaryKeySelective(m); } } //验证登录 public boolean checkLogin(String managername,String managerpw){ ManagersMapper ud=(ManagersMapper)ApplicationContexter.getApplicationContext().getBean("ManagersMapper"); //生成一个条件对象 ManagersExample me=new ManagersExample(); Criteria c=me.createCriteria(); //添加条件 c.andManagernameEqualTo(managername); c.andManagerpasswordEqualTo(managerpw); //验证登录 if(ud.selectByExample(me).size()>0){ return true; } return false; } } |
代码说明:public void updateManagerpw()方法的处理思路是这样的,首先由反向工程生成的条件类ManagersExample.java生成查询条件,ManagersExample.java类的查询条件由其内部类Criteria进行组合,通过观察我们可以发现Criteria类可以组合形式丰富的条件,如下显示的是ManagersExample.java类的部分代码:
public Criteria andManageridIsNull() public Criteria andManageridIsNotNull() public Criteria andManageridEqualTo(Integer value) public Criteria andManageridNotEqualTo(Integer value) public Criteria andManageridGreaterThan(Integer value) public Criteria andManageridGreaterThanOrEqualTo(Integer value) public Criteria andManageridLessThan(Integer value) public Criteria andManageridLessThanOrEqualTo(Integer value) public Criteria andManageridIn(List<Integer> values) public Criteria andManageridNotIn(List<Integer> values) public Criteria andManageridBetween(Integer value1, Integer value2) public Criteria andManageridNotBetween(Integer value1, Integer value2) public Criteria andManagernameIsNull() public Criteria andManagernameIsNotNull() public Criteria andManagernameEqualTo(String value) public Criteria andManagernameNotEqualTo(String value) public Criteria andManagernameGreaterThan(String value) public Criteria andManagernameGreaterThanOrEqualTo(String value) public Criteria andManagernameLessThan(String value) public Criteria andManagernameLessThanOrEqualTo(String value) public Criteria andManagernameLike(String value) public Criteria andManagernameNotLike(String value) public Criteria andManagernameIn(List<String> values) public Criteria andManagernameNotIn(List<String> values) public Criteria andManagernameBetween(String value1, String value2) public Criteria andManagernameNotBetween(String value1, String value2) public Criteria andManagerpasswordIsNull() public Criteria andManagerpasswordIsNotNull() public Criteria andManagerpasswordEqualTo(String value) public Criteria andManagerpasswordNotEqualTo(String value) public Criteria andManagerpasswordGreaterThan(String value) public Criteria andManagerpasswordGreaterThanOrEqualTo(String value) public Criteria andManagerpasswordLessThan(String value) public Criteria andManagerpasswordLessThanOrEqualTo(String value) public Criteria andManagerpasswordLike(String value) public Criteria andManagerpasswordNotLike(String value) public Criteria andManagerpasswordIn(List<String> values) public Criteria andManagerpasswordNotIn(List<String> values) public Criteria andManagerpasswordBetween(String value1, String value2) public Criteria andManagerpasswordNotBetween(String value1, String value2) |
代码ManagersExample me=new ManagersExample();生成一个条件对象,
代码Criteria c=me.createCriteria();
c.andManagernameEqualTo(managername);
c.andManagerpasswordEqualTo(managerpw);
将用户名和用户密码组合到条件对象中。
代码Managers m=ud.selectByExample(me).get(0);
用生成的条件对象进行查询,注意查询的返回值是一个List,由于我们在这里只查询到一个对象,我们取List中的第一个对象即可。
最后我们把查询到的这个对象的密码做了修改并进行保存。
m.setManagerpassword(managernewpw);
ud.updateByPrimaryKeySelective(m);
如果需要,我们还可以添加其它的方法。
8、继续编写其它的dao(biz)类如下:
PrjectsBiz.java
package biz;
import java.util.List;
import entity.Chapters; import entity.ChaptersExample; import entity.Prjects; import entity.PrjectsExample; import entity.PrjectsExample.Criteria; import mapper.ChaptersMapper; import mapper.PrjectsMapper;
public class PrjectsBiz { //添加课程 public void addPrjects(Prjects prjects){ PrjectsMapper ud=(PrjectsMapper)ApplicationContexter.getApplicationContext().getBean("PrjectsMapper"); ud.insert(prjects); } //更新课程 public void updatePrjects(Prjects prjects){ PrjectsMapper ud=(PrjectsMapper)ApplicationContexter.getApplicationContext().getBean("PrjectsMapper"); ud.updateByPrimaryKeySelective(prjects); } //查询所有课程 public List<Prjects> getAll(){ PrjectsMapper ud=(PrjectsMapper)ApplicationContexter.getApplicationContext().getBean("PrjectsMapper"); return ud.selectByExample(null); } //根据课程ID查询课程 public Prjects getPrjectsById(int prjectsid){ PrjectsMapper ud=(PrjectsMapper)ApplicationContexter.getApplicationContext().getBean("PrjectsMapper"); return ud.selectByPrimaryKey(prjectsid); }
}
|
ChapterBiz.java
package biz;
import java.util.List;
import entity.Chapters; import entity.ChaptersExample; import entity.ChaptersExample.Criteria; import entity.Chapters; import mapper.ChaptersMapper; import mapper.ChaptersMapper;
public class ChapterBiz { //添加章节 public void addChapter(Chapters Chapter){ ChaptersMapper ud=(ChaptersMapper)ApplicationContexter.getApplicationContext().getBean("ChapterMapper"); ud.insert(Chapter); } //更新章节 public void updateChapter(Chapters Chapter){ ChaptersMapper ud=(ChaptersMapper)ApplicationContexter.getApplicationContext().getBean("ChaptersMapper"); ud.updateByPrimaryKeySelective(Chapter); } //根据章节ID查询章节 public Chapters getChapterById(int Chapterid){ ChaptersMapper ud=(ChaptersMapper)ApplicationContexter.getApplicationContext().getBean("ChaptersMapper"); return ud.selectByPrimaryKey(Chapterid); }
//根据课程ID查询所有章节 public List<Chapters> getAllChaptersByPrjectid(int Prjectid){ ChaptersMapper ud=(ChaptersMapper)ApplicationContexter.getApplicationContext().getBean("ChaptersMapper"); ChaptersExample me=new ChaptersExample(); Criteria c=me.createCriteria(); c.andPrjectidEqualTo(Prjectid); return ud.selectByExample(me); } }
|
KnowledgepointsBiz.java
package biz;
import java.util.List;
import entity.Knowledgepoints; import entity.KnowledgepointsExample; import entity.KnowledgepointsExample.Criteria; import mapper.KnowledgepointsMapper;
public class KnowledgepointsBiz { //添加知识点 public void addKnowledgepoint(Knowledgepoints Knowledgepoint){ KnowledgepointsMapper ud=(KnowledgepointsMapper)ApplicationContexter.getApplicationContext().getBean("KnowledgepointsMapper"); ud.insert(Knowledgepoint); } //更新知识点 public void updateKnowledgepoint(Knowledgepoints Knowledgepoint){ KnowledgepointsMapper ud=(KnowledgepointsMapper)ApplicationContexter.getApplicationContext().getBean("KnowledgepointsMapper"); ud.updateByPrimaryKeySelective(Knowledgepoint); } //根据知识点ID查询知识点 public Knowledgepoints getKnowledgepointById(int Knowledgepointid){ KnowledgepointsMapper ud=(KnowledgepointsMapper)ApplicationContexter.getApplicationContext().getBean("KnowledgepointsMapper"); return ud.selectByPrimaryKey(Knowledgepointid); }
//根据章节查询所有知识点 public List<Knowledgepoints> getAllKnowledgepointsByChapterid(int Chapterid){ KnowledgepointsMapper ud=(KnowledgepointsMapper)ApplicationContexter.getApplicationContext().getBean("KnowledgepointsMapper"); KnowledgepointsExample me=new KnowledgepointsExample(); Criteria c=me.createCriteria(); c.andChapteridEqualTo(Chapterid); return ud.selectByExample(me); } } |
9、编写控制器
在src文件夹中添加配置文件springmvc-config.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 定义组件扫描器,指定需要扫描的包 --> <context:component-scan base-package="controller" /> <!-- 定义视图解析器 --> <bean id="viewResolver" class= "org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 设置前缀 --> <property name="prefix" value="/manage/" /> <!-- 设置后缀 --> <property name="suffix" value=".jsp" /> </bean> <!-- 配置静态资源访问 --> <!-- 配置拦截器 --> <mvc:interceptors> <!--使用bean直接定义在<mvc:interceptors>下面的拦截器将拦截所有请求--> <!-- <bean class="interceptor.LoginInterceptor"/> --> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="interceptor.LoginInterceptor" /> </mvc:interceptor> </mvc:interceptors>
</beans>
|
这里我们计划将管理用的jsp网页放入网站根目录的“/manage/”目录内。因此在网站根目录新建文件夹“/manage/”。
编写网站根目录下WEB_INFO目录下的web.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <!-- 配置前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> |
在src文件夹中添加controller包,在controller包中添加ManageController.java类、 PrjectsController.java类、ChaptersController.java类、KnowledgepointsController.java类,代码如下:
ManageController.java类
package controller;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping;
import biz.ManagersBiz; import biz.PrjectsBiz; import entity.Managers; import entity.Prjects; import net.sf.json.JSONArray; @Controller @RequestMapping("/manage") public class ManageController {
String prjectsJSONStr; public String getPrjectsJSONStr() { return prjectsJSONStr; }
public void setPrjectsJSONStr(String prjectsJSONStr) { this.prjectsJSONStr = prjectsJSONStr; }
//注册 @RequestMapping("/register") public String regist(Managers m,Model model){ if(new ManagersBiz().checkname(m.getManagername())){ model.addAttribute("msg","用户名已存在!"); return "regist"; } new ManagersBiz().addManager(m); //注册成功后跳转到登录页 return "login"; }
//登录 @RequestMapping("/login") public String login(Managers m ,HttpSession session,Model model){ if(new ManagersBiz().checkLogin(m.getManagername(), m.getManagerpassword())){ //登录成功后跳转到管理主页 session.setAttribute("username",m.getManagername()); List<Prjects>list=new PrjectsBiz().getPrjectsByAuthor((String)session.getAttribute("username")); prjectsJSONStr=(JSONArray.fromObject(list)).toString(); model.addAttribute("prjectsJSON", prjectsJSONStr); return "mainmanagepage"; }else{ //登录不成功后跳转到登录页 return "login"; } }
} |
PrjectsController.java类
package controller;
import java.io.UnsupportedEncodingException; import java.util.List;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.stereotype.Controller; import org.springframework.stereotype.Repository; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import net.sf.json.JSON; import net.sf.json.JSONArray; import net.sf.json.JSONObject;
import biz.PrjectsBiz; import entity.Prjects; @Controller @RequestMapping(value="/manage") public class PrjectsController { List<Prjects> list; Prjects prject; String prjectsJSONStr; public List<Prjects> getList() { return list; }
public void setList(List<Prjects> list) { this.list = list; }
public Prjects getPrject() { return prject; }
public void setPrject(Prjects prject) { this.prject = prject; }
public String getPrjectsJSONStr() { return prjectsJSONStr; }
public void setPrjectsJSONStr(String prjectsJSONStr) { this.prjectsJSONStr = prjectsJSONStr; }
//添加课程 @RequestMapping(value="/addprject") public String addprject(Prjects prject,Model model,HttpSession session){ try { //处理中文 prject.setPrjectname(new String(prject.getPrjectname().getBytes("iso-8859-1"),"utf-8")); prject.setPrjecttype(new String(prject.getPrjecttype().getBytes("iso-8859-1"),"utf-8")); prject.setPrjectbookface(new String(prject.getPrjectbookface().getBytes("iso-8859-1"),"utf-8")); prject.setPrjectbook(new String(prject.getPrjectbook().getBytes("iso-8859-1"),"utf-8")); prject.setPrjectdatil(new String(prject.getPrjectdatil().getBytes("iso-8859-1"),"utf-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } prject.setPrjectauthor((String)session.getAttribute("username")); if(new PrjectsBiz().checkPrject(prject)){ model.addAttribute("msg","课程已存在!"); return "addprject"; } new PrjectsBiz().addPrjects(prject); list=null; if(session.getAttribute("username")==null||session.getAttribute("username").toString().equals("")){ return "login"; }else{ list=new PrjectsBiz().getPrjectsByAuthor((String)session.getAttribute("username")); model.addAttribute("prject", prject); prjectsJSONStr=(JSONArray.fromObject(list)).toString(); model.addAttribute("prjectsJSON", prjectsJSONStr); } //添加课程成功后跳转到主管理页 return "mainmanagepage"; }
//修改课程 @RequestMapping("/updateprjects") public String updateprject(Prjects prject,Model model){ try { //处理中文 prject.setPrjectname(new String(prject.getPrjectname().getBytes("iso-8859-1"),"utf-8")); prject.setPrjectbookface(new String(prject.getPrjectbookface().getBytes("iso-8859-1"),"utf-8")); prject.setPrjectbook(new String(prject.getPrjectbook().getBytes("iso-8859-1"),"utf-8")); prject.setPrjecttype(new String(prject.getPrjecttype().getBytes("iso-8859-1"),"utf-8")); prject.setPrjectdatil(new String(prject.getPrjectdatil().getBytes("iso-8859-1"),"utf-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } new PrjectsBiz().updatePrjects(prject); //修改成功后跳转到主管理页 return "editprject"; }
//查询课程 @RequestMapping("/getprjectss") public List<Prjects> getprject(HttpSession session){ list=new PrjectsBiz().getPrjectsByAuthor((String)session.getAttribute("username")); return list; }
//查询课程并跳转到更新课程页面 @RequestMapping("/toupdateprject") public String updateprject(int prjectid,ModelMap model){ prject=new PrjectsBiz().getPrjectsById(prjectid); //将查询到的课程信息放入model对象,以便于传递到更新课程页面 model.addAttribute("prject",prject); return "updateprject"; } } |
ChaptersController.java类
package controller;
import java.io.UnsupportedEncodingException; import java.util.List;
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping;
import biz.ChapterBiz; import biz.PrjectsBiz; import entity.Chapters; import entity.Prjects; import net.sf.json.JSONArray; @Controller @RequestMapping("/manage") public class ChaptersController { String chaptersJSONStr; public String getChaptersJSONStr() { return chaptersJSONStr; }
public void setChaptersJSONStr(String chaptersJSONStr) { this.chaptersJSONStr = chaptersJSONStr; }
//添加章节 @RequestMapping("/addChapter") public String addChapters(Chapters chapter,Model model){ if(new ChapterBiz().checkChapter(chapter)){ model.addAttribute("msg","章节已存在!"); return "addchapter"; } try { chapter.setChaptertitle(new String(chapter.getChaptertitle().getBytes("iso-8859-1"),"utf-8")); chapter.setChaptersummary(new String(chapter.getChaptersummary().getBytes("iso-8859-1"),"utf-8")); chapter.setChapterdatil(new String(chapter.getChapterdatil().getBytes("iso-8859-1"),"utf-8")); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } new ChapterBiz().addChapter(chapter); model.addAttribute("prjectid", chapter.getPrjectid()); List<Chapters> list=new ChapterBiz().getAllChaptersByPrjectid(chapter.getPrjectid()); chaptersJSONStr=(JSONArray.fromObject(list)).toString(); model.addAttribute("chaptersJSON", chaptersJSONStr); //添加章节成功后跳转到课程章节页 return "editchapters"; }
//修改章节 @RequestMapping("/updateChapter") public String updateprject(Prjects prject,Model model){ new PrjectsBiz().updatePrjects(prject); //修改成功后跳转到章节页 return "updatechapter"; } //修改章节 @RequestMapping("/toeditchapters") public String toeditchapters(int prjectid,Model model){ List<Chapters> list=new ChapterBiz().getAllChaptersByPrjectid(prjectid); model.addAttribute("list", list); chaptersJSONStr=(JSONArray.fromObject(list)).toString(); model.addAttribute("chaptersJSON", chaptersJSONStr); model.addAttribute("prjectid", prjectid); //修改成功后跳转到章节页 return "editchapters"; } } |
KnowledgepointsController.java类
package controller;
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping;
import biz.ChapterBiz; import biz.KnowledgepointsBiz; import biz.ManagersBiz; import biz.PrjectsBiz; import entity.Chapters; import entity.Knowledgepoints; import entity.Managers; import entity.Prjects; @Controller @RequestMapping("/manage") public class KnowledgepointsController {
//添加知识点 @RequestMapping("/addKnowledgepoints") public String addKnowledgepoints(Knowledgepoints knowledgepoints,Model model){ if(new KnowledgepointsBiz().checkKnowledgepoints(knowledgepoints)){ model.addAttribute("msg","知识点已存在!"); return "addknowledgepoints"; } new KnowledgepointsBiz().addKnowledgepoint(knowledgepoints); //添加知识点成功后跳转到章节页 return "editknowledgepoints"; }
//修改知识点 @RequestMapping("/updateknowledgepoints") public String updateprject(Prjects prject,Model model){ new PrjectsBiz().updatePrjects(prject); //修改成功后跳转到知识点页 return "updateknowledgepoints"; } } |
11.4.3、编写前台代码
课程管理网页设计:
在网站根目录的“/manage/”文件夹下新建jsp文件:header.jsp、foot.jsp、menu.jsp、userinfo.jsp、regist.jsp、login.jsp、mainmanagepage.jsp、editprject.jsp、addprject.jsp、updateprject.jsp、editchapters.jsp 、addchapter.jsp、updatechapter.jsp、editknowledgepoints.jsp 、addknowledgepoint.jsp、updateknowledgepoint.jsp。
在网站根目录下新建jsp文件:header.jsp、foot.jsp、index.jsp、prjects.jsp、chapters.jsp 、knowledgepoints.jsp。
1、header.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <div> <table width="100%" cellpadding="0" cellspacing="0" border="0" height="25" bgcolor="#5555ff"> <tr><td valign="middle" height="25"><MARQUEE scrollamount=4> <font color="#ffffff">欢迎来到精品课程网站管理系统!</font></MARQUEE> </td> </tr> </table> </div>
<div > <table width="1024" height="150" cellpadding="0" cellspacing="0" border="0" background="../publicimg/banner.jpg"> <tr><td width="250"></td> <td width="572"><div><span><font color="#ffff33" size=7>精品课程网站管理系统</font></span></div></td> <td width="322"> <p><br/> <br /> </p></td> </tr> </table> </div> |
2、foot.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <div> <style type="text/css"> <!-- .hrblue { border-top-style: double; border-top-color: #5555FF; } --> </style> <hr> <hr> <table width="1024" bgcolor="#9999ff"> <tr><td > <font color="#FFFFFF">粤ICP备18057842号 版权所有 Copyright(C)2017-2018 广东岭南精品课程开发中心</font></td> |
3、menu.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <script lanaguage="javascript"> function mover(achar){ achar.style.backgroundColor="#88aaff"; } function mout(achar){ achar.style.backgroundColor="#5500ff"; } </script>
<div ><table bgcolor="#5555ff" width="100%" cellspacing="0" border="0" height="35"> <tr><td><font color="#ffffff" size=5> <table width="1000" cellspacing="0" border="0" height="55"> <tr> <td width="20%" align="center" ><div onmouseover="mover(this);" onmouseout="mout(this);"><a href="../index.jsp"><font color="#ffffff" size=5>首页</font></a></div></td> <td width="20%" align="center" ><div onmouseover="mover(this);" onmouseout="mout(this);"><a href="useredit.jsp"><font color="#ffffff" size=5>用户信息管理</font></a></div></td> <td width="20%" align="center" ><div onmouseover="mover(this);" onmouseout="mout(this);"><a href="editprject.jsp"><font color="#ffffff" size=5>课程信息管理</font></a></div></td> <td width="20%" align="center" ><div onmouseover="mover(this);" onmouseout="mout(this);"><a href="exitlogin.jsp"><font color="#ffffff" size=5>退出登录</font></a></div></td> </tr> </table> </font> </td></tr> </table> </div> |
4、userinfo.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <div > <table width="100"> <tr> <td width="572"> <div> <span><font color="#aaaaaa" size=4>管理员</font></span> <hr>${username}</div> </td> </tr> </table> </div> |
5、regist.jsp
略 |
6、login.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>精品课程网站管理系统</title> </head> <body bgcolor="#fafaff"> <jsp:include page="header.jsp"></jsp:include> <jsp:include page="menu.jsp"></jsp:include> <div> <table width="1024" cellpadding="5" cellspacing="5" border="0" height="600" bgcolor="#f0f0ff"> <tr><td valign="top" ></td> <td valign="top" > <form action="login" method="post"> <table> <tr><td>用户名</td><td><input type="text" name="managername"></td></tr> <tr><td>密码</td><td><input type="password" name="managerpassword"></td></tr> <tr><td colspan=2><input type="submit" name="submitbtn" value="登录"></td></tr>
</table> </form> </td> </tr> </table> </div> <jsp:include page="footer.jsp"></jsp:include> </body> </html> |
7、mainmanagepage.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page language="java" import="entity.*,biz.*,java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>精品课程网站管理系统</title> </head> <body bgcolor="#fafaff" > <jsp:include page="header.jsp"></jsp:include> <jsp:include page="menu.jsp"></jsp:include> <div> <table width="1024" cellpadding="5" cellspacing="5" border="0" height="600" bgcolor="#f0f0ff"> <tr> <td valign="top" ><jsp:include page="userinfo.jsp"></jsp:include></td> <td valign="top" ><jsp:include page="editprject.jsp"></jsp:include></td> </tr> </table> </div> <jsp:include page="footer.jsp"></jsp:include> </body> <script type="text/javascript">
// 获取课程列表 function getPrjectList() { var prjecttab=document.getElementById("prjecttable"); var list='${prjectsJSON}'; list=eval("("+list+")");//将接收的课程JSON数组字符串转成JSON对象数组 prjecttab.innerHTML="<tr><th>课程图书</th><th>课程编号</th><th>课程名称</th><th>课程编辑</th></tr>"; for(var i=0;i<list.length;i++){ prjecttab.innerHTML=prjecttab.innerHTML+ '<tr>'+ '<td>'+list[i].prjectbook+'</td>'+ '<td>'+list[i].prjectid+'</td>'+ '<td>'+list[i].prjectname+'</td>'+ '<td><a href="toupdateprject?prjectid='+list[i].prjectid+'"> 课程编辑</a></td>'+ '<td><a href="toeditchapters?prjectid='+list[i].prjectid+'"> 章节编辑</a></td>'+ '</tr>'; } } getPrjectList(); </script> </html> |
8、editprject.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page language="java" import="entity.*,biz.*,java.util.*"%> <div><font color="#888888" size=4> <table width="900" border="0" bgcolor="#f8f8ff" > <tr><th width="90" ></th><th><a href="addprject.jsp">添加课程</a></th></tr> </table> <table width="900" border="0" bgcolor="#f0f0ff" id="prjecttable"> <tr><th>课程图书</th><th>课程编号</th><th>课程名称</th><th>课程编辑</th></tr> </table> </font></div> |
9、addprject.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page language="java" import="entity.*,biz.*,java.util.*"%>
<%
%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>精品课程网站管理系统</title>
</head>
<body bgcolor="#fafaff"> <jsp:include page="header.jsp"></jsp:include> <jsp:include page="menu.jsp"></jsp:include> <div> <table width="1024" cellpadding="5" cellspacing="5" border="0" height="600" bgcolor="#f0f0ff"> <tr> <td valign="top" ><jsp:include page="userinfo.jsp"></jsp:include></td> <td valign="top" > 添加课程 <hr> <form action="addprject" method="post"> 课程名称:<input type="text" name="prjectname"><br> 课程类别:<input type="text" name="prjecttype"><br> 课程备注:<input type="text" name="prjectdatil"><br> 图书名称:<input type="text" name="prjectbook"><br> 图书封面:<input type="text" name="prjectbookface"><br> <button type="submit" value="添加课程">添加课程</button> </form> </td> </tr> </table> </div> <jsp:include page="footer.jsp"></jsp:include> </body> </html> |
10、updateprject.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page language="java" import="entity.*,biz.*,java.util.*"%>
<% if(session.getAttribute("username")==null||session.getAttribute("username").toString().equals("")){ //response.sendRedirect("login.jsp"); } %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>精品课程网站管理系统</title>
</head>
<body bgcolor="#fafaff"> <jsp:include page="header.jsp"></jsp:include> <jsp:include page="menu.jsp"></jsp:include> <div> <form method="post" action="updateprjects"> <table width="524" cellpadding="5" cellspacing="5" border="0"bgcolor="#f0f0ff"> <tr><td valign="top" >课程ID</td> <td valign="top" > ${prject.prjectid }<input type="hidden" name="prjectid" value="${prject.prjectid }"> </td> </tr> <tr><td valign="top" >课程名称</td> <td valign="top" > <input type="text" name="prjectname" value="${prject.prjectname }"> </td> </tr> <tr><td valign="top" >课程图书</td> <td valign="top" > <input type="text" name="prjectbook" value="${prject.prjectbook }"> </td> </tr> <tr><td valign="top" >课程书皮</td> <td valign="top" > <input type="text" name="prjectbookface" value="${prject.prjectbookface }"> </td> </tr> <tr><td valign="top" >课程类别</td> <td valign="top" > <input type="text" name="prjecttype" value="${prject.prjecttype }"> </td> </tr> <tr><td valign="top" >课程备注</td> <td valign="top" > <input type="text" name="prjectdatil" value="${prject.prjectdatil}"> </td> </tr> <tr><td valign="top" ></td> <td valign="top" > <input type="submit" value="保存"/> </td> </tr> </table> </form> </div> <jsp:include page="footer.jsp"></jsp:include> </body> </html> |
11、editchapters.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page language="java" import="entity.*,biz.*,java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>精品课程网站管理系统</title>
</head>
<body bgcolor="#fafaff" > <jsp:include page="header.jsp"></jsp:include> <jsp:include page="menu.jsp"></jsp:include> <div> <table width="1024" cellpadding="5" cellspacing="5" border="0" height="600" bgcolor="#f0f0ff"> <tr> <td valign="top" ><jsp:include page="userinfo.jsp"></jsp:include></td> <td valign="top" > <div><font color="#888888" size=4> <table width="900" border="0" bgcolor="#f8f8ff" > <tr><th width="90" ></th><th><a href="addchapter.jsp?prjectid=${prjectid}">添加章节</a></th></tr> </table> <table width="900" border="0" bgcolor="#f0f0ff" id="captertable"> <tr><th>章节编号</th><th>章节名称</th><th>章节内容</th><th>章节编辑</th></tr> </table>
</font></div>
</td> </tr> </table> </div> <jsp:include page="footer.jsp"></jsp:include> </body> <script type="text/javascript">
// 获取课程章节列表 function getPrjectList() { var captertab=document.getElementById("captertable"); //接收课程章节数组对象的JSON字符串 var list='${chaptersJSON}'; list=eval("("+list+")");//将接收的课程章节JSON数组字符串转成JSON对象数组 captertab.innerHTML="<tr><th>章节ID</th><th>章节编号</th><th>章节标题</th><th>章节内容</th><th>章节编辑</th></tr>"; for(var i=0;i<list.length;i++){ captertab.innerHTML=captertab.innerHTML+ '<tr>'+ '<td>'+list[i].chapterid+'</td>'+ '<td>'+list[i].chapterno+'</td>'+ '<td>'+list[i].chaptertitle+'</td>'+ '<td>'+list[i].chaptersummary+'</td>'+ '<td><a href="#"> 章节编辑</a></td>'+ '<td><a href="#"> 知识点编辑</a></td>'+ '</tr>'; } } getPrjectList(); </script>
</html> |
12、addchapter.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page language="java" import="entity.*,biz.*,java.util.*"%>
<% if(session.getAttribute("username")==null||session.getAttribute("username").toString().equals("")){ //response.sendRedirect("login.jsp"); } %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>精品课程网站管理系统</title> <script type="text/javascript"> function getprjectidfromURL(){ prjectid=<%=request.getParameter("prjectid")%> document.getElementById("prjectid").value=prjectid; }
</script>
</head>
<body bgcolor="#fafaff" onload="getprjectidfromURL();"> <jsp:include page="header.jsp"></jsp:include> <jsp:include page="menu.jsp"></jsp:include> <div> <table width="1024" cellpadding="5" cellspacing="5" border="0" height="600" bgcolor="#f0f0ff"> <tr><td valign="top" ></td> <td valign="top" > <div> <table width="1024" cellpadding="5" cellspacing="5" border="0" height="600" bgcolor="#f0f0ff"> <tr> <td valign="top" ><jsp:include page="userinfo.jsp"></jsp:include></td> <td valign="top" > 添加章节 <hr> <form action="addChapter" method="post"> 章节序号:<input type="text" name="chapterno"><br> 课程类别:<input type="text" name="prjectid" id="prjectid" value="${prjectid}"><br> 章节名称:<input type="text" name="chaptertitle"><br> 章节内容:<input type="text" name="chaptersummary"><br> 章节备注:<input type="text" name="chapterdatil"><br> <button type="submit" value="添加章节">添加章节</button> </form> </td> </tr> </table> </div> </td> </tr> </table> </div> <jsp:include page="footer.jsp"></jsp:include> </body> </html> |
13、updatechapter.jsp
略 |
14、editknowledgepoints.jsp
略 |
15、addknowledgepoint.jsp
略 |
略 |
16、updateknowledgepoint.jsp
11.4.4、编写登录控制代码
在项目工程目录src中添加包interceptor并在里面添加拦截器类LoginInterceptor.java
package interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; /** * 登录拦截器 */ public class LoginInterceptor implements HandlerInterceptor{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 获取请求的URL String url = request.getRequestURI(); // URL:除了login.jsp和regist.jsp是可以公开访问的,其它的URL都进行拦截控制 if(url.indexOf("/login")>=0){ return true; } if(url.indexOf("/regist")>=0){ return true; } // URL:除了login.jsp是可以公开访问的,其它的URL都进行拦截控制 if(url.indexOf("/manage")<0){ return true; } // 获取Session HttpSession session = request.getSession(); String user = (String) session.getAttribute("username"); // 判断Session中是否有用户数据,如果有,则返回true,继续向下执行 if(user != null){ return true; } // 不符合条件的给出提示信息,并转发到登录页面 request.setAttribute("msg", "您还没有登录,请先登录!"); request.getRequestDispatcher("../manage/login.jsp") .forward(request, response); return false; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } } |
修改springmvc-config.xml配置文件,在springmvc-config.xml文件里面添加拦截器配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 定义组件扫描器,指定需要扫描的包 --> <context:component-scan base-package="controller" /> <!-- 定义视图解析器 --> <bean id="viewResolver" class= "org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 设置前缀 --> <property name="prefix" value="/manage/" /> <!-- 设置后缀 --> <property name="suffix" value=".jsp" /> </bean> <!-- 配置静态资源访问 --> <!-- 配置拦截器 --> <mvc:interceptors> <!--使用bean直接定义在<mvc:interceptors>下面的拦截器将拦截所有请求--> <!-- <bean class="interceptor.LoginInterceptor"/> --> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="interceptor.LoginInterceptor" /> </mvc:interceptor> </mvc:interceptors> </beans> |
运行程序如下图:

注意由于拦截器的存在,我们任何访问URL中包含有“/manage”的请求在没有登录的情况下都会自动跳转到登录页面。
登录成功后直接显示该用户管理的课程,如下图:

点击添加课程链接进入添加课程页面:

点击添加课程按钮,添加成功跳转到课程管理页

可以看到新添加的课程已经添加到系统中了。
点击某一个课程的“课程编辑”链接,进入到编辑该课程的页面,可以对该课程进行再次编辑,点击该课程的“章节编辑”链接可以为该课程添加章节:



