Spring MVC + MyBatis3 实现的简单个人博客

SpringMVC + MyBatis3 实现的个人博客

 

为了学习spring MVC,而做的一个简单的个人博客,项目地址如下:

https://github.com/DreamFinderHou/PersonalBlog

https://github.com/DreamFinderHou/PersonalBlog

项目用到的技术:

  • Spring MVC
  • Mybatis3 + MySQL
  • Bootstrap(页面样式)+JSP+JSTL
  • TinyMCE 富文本编辑器,使用非常简单
  • Windows10+eclipse+tomcat7+chrome

实现的功能:

  • 博客的增删改
  • 富文本编辑器编写博客如下图:Spring MVC + MyBatis3 实现的简单个人博客_第1张图片
  • 博客多关键字查询

开发过程中遇到的问题及解决办法:

1.      绿色版MySQL的安装与启动:

参考:http://blog.csdn.net/anndy_/article/details/51093326

根据该向导操作时,可能在修改密码步骤报错,这是需要使用命令mysqld --initialize(生成一个随机密码),然后 net start mysql,再去修改密码。

2.      当使用Navicat建立连接时出现如下错误:

Spring MVC + MyBatis3 实现的简单个人博客_第2张图片

2005 -Unknown MySQL server host ‘localhost’(0)

那是因为你电脑没联网,Navicat的使用需要联网。

3.      各种资源找不到的情况:

切记一点:你项目中的各种路径的参照都是以最后你打成的war包的路径去找的。如果不确定export一个war包看一下。

Classpathclasspath*的使用:参照 http://perfy315.iteye.com/blog/2009258

4.      Spring MVC开发项目,welcome-page的实现:

1)      如果要配置为index.html等静态页面为welcome-page,首先需要在web.xml中配置,其次需要在springMVC-servlet.xml中配置静态资源,以跳过dispatcher的过滤,方法如下:

            <mvc:annotation-driven/>

            <mvc:resourcesmapping="/*.html"location="/"/>

如果没有元素会阻止任意控制器被调用。若不需要使用resources,则不需要,但是当使用Flash跳转页面是还是需要该元素的。

2)      在@Controller类中声明一个@RequestMapping(value=”/”)的方法,返回作为项目默认访问页的页面,当你的默认访问页为JSP时,必须采用这种方法。

如下:

	@RequestMapping(value="/")
	public String welcomePage(Model Model){
		
		return "welcome";
	}


5.      页面中引用CSS文件,路径找不到:

可以使用JSTL来解决,如下:

">

会处理context的问题。

6.      Spring MVC + JSP + JSTL + EL 实现分页:

	
	


7.      当更新了CCS文件并且重启了Tomcat服务器后,更改后的CSS样式不起作用,记得重启浏览器,清空缓存。

8.      新建和编辑公用一个JSP页面的处理方法:

因为重新编辑一个blog需要保存它的ID传到后台处理,所以我采用了如下方法,当然也可以用路径变量在前台页面加些判断控制,或者在后台controller处理时将ID放到model变量中保存,不过我感觉下面的更简单一点:

前台和后台采用了表单绑定,具体细节可以查看《Sping MVC学习指南》这本书关于表单绑定和表单标签库一节。

blogediter.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%>



<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>












New Blog


	
	


为什么要将表单标签action关联到一个JSTL标签

首先如果直接在action中按照如下写法:

则请求至后台的http路径会报错如下:

http://localhost:8080/saveAndUpdateBlog?blogID=144(正确应该为http://localhost:8080/PersonalBlog/saveAndUpdateBlog?blogID=144)

并且不允许在中添加<%=basePath%>

所以采用action关联的方法传递ID参数,当然你也可以将ID作为路径变量处理,只不过后台如果你想只用一个controller处理的话,那么你要匹配/add/update/blogID这两种情况的@RequestMapping参数,即将/add/{blogID设置为0,当为添加的时候}

controller实现

@RequestMapping(value="/saveAndUpdateBlog")
	public String saveAndUpdateBlog(@RequestParam int blogID, @ModelAttribute Blog blog, RedirectAttributes redirectAttributes){
		
		if(blogID == 0){
			blogMapper.save(blog);	
		}else{
			Map parm = new HashMap<>();
			parm.put("blogID", blogID);
			parm.put("blog", blog);
			blogMapper.update(parm);
		}			
		
		String tags = blog.getBlogTags();
		String[] tagList = tags.split("\\s+");
		
		/**返回前台结果**/
		Map responseParm = new HashMap<>();
		responseParm.put("blog", blog);
		responseParm.put("tagList", tagList);
		
		redirectAttributes.addFlashAttribute("responseParm",responseParm);
		
		return "redirect:/blog/" + blog.getBlogID();
	}


9.      basePath的使用:

href或者value或者

action中,url地址访问出错,这时候使用basePath都可以解决,其实建议编码刚开始后就加上该参数,一是为了保证编码质量,达到统一的效果,二是防止后期出错浪费不必要的时间,使用方法如下:

10.    前台数据传到后台乱码的问题:

首先背景情况为,我的JSP页面和MySQL中的varcharTEXT的编码都设置为了UTF-8,可是保存到数据库中的数据还是乱码。我用logger.info方法在controller中打印出日志发现,日志中数据就已经是乱码,这说明在前台传递数据到controller的过程中就已经是乱码,跟数据库无关。

解决方法:http://blog.csdn.net/kalision/article/details/46441081/

这应该跟HttpServletRequestHttpServletResponse默认处理与前台的数据的编码为ISO-8859-1有关。

11.    SpringMVC + Mybatis3的一些常见问题请查看至:

http://blog.csdn.net/java_hxc_sz/article/details/53670086

http://blog.csdn.net/java_hxc_sz/article/details/53645116


 

你可能感兴趣的:(Mybatis,MySQL,SpringMVC,spring,mvc,mybatis)