您的位置:首页 > 其它

使用SSM搭建个人博客详细过程

2017-08-03 10:23 197 查看
一开始先把我博客的地址发出来,各位可以看看点击打开链接

首先介绍下整个网站使用的技术:

整体架构Spring Springmvc Mybatis     后台管理 DWZ    编辑器Ueditor,这个编辑器是百度的,可以支持代码高亮,单图上传与多图上传,截图与音频视频插入等。

前端Bootstrap3 (这个框架很好学,我花了两个小时就学了,然后做前端时没写一个css文件,而且样式还不错,所以推荐还没学的人学学)

全文搜索Lucene  这个我只停留在基本会用的级别上,至于原理还不太清楚,做网站时现学现用的。

然后开始详细介绍这个项目开发过程。

一开始,使用bootstrap3框架做好了界面。(这个真没啥好讲的,我是参照别人的博客去做的界面)

这时需求基本上已经确定好了。

然后开始设计数据库

这个也就略过了,这个不难,我等会儿会上传数据库文件。

写好po类。每个po类对应一个数据库中表。

先组合进mybatis,然后组合springmvc。

导入mybatis+springmvc等jar,此外还有javaEE6 JDK相关Jars



组合mybatis 使用mapper代理模式。

mybatis/SqlMapConfig.xml如下

<properties resource="db.properties"/>

<typeAliases>

<package name="com.po"/>

</typeAliases>

<environments default="development">

<environment id="development">

<transactionManager type="JDBC"/>

<dataSource type="POOLED">

<property name="driver" value="${jdbc.driver}"/>

<property name="url" value="${jdbc.url}"/>

<property name="username" value="${jdbc.username}"/>

<property name="password" value="${jdbc.password}"/>

</dataSource>

</environment>

</environments>

<mappers>

<package name="com.mapper"/>

</mappers>

记得在源文件夹下面家里db.peroperties 与 log4j.properties

在po包下,建立每个po类的Custom类(包装类,继承原类) 和 QueryVo类(查询时封装参数用)。

写Service接口类与Service实现类。ArticleService

在Service接口类中写在controller中可能用到的接口方法。比如新增文章,查找文章,删除文章,修改文章。

然后在 com.mapper 包下建立 ArticleCustomMapper.java 与 ArticleCustomMapper.xml

在Mapper.java接口中写(Service实现类中的实现方法会用到的)mapper层的方法。

并且在Mapper.xml 中对每个方法进行配置。

建立测试类,测试每个方法。

测试类这样写:

    private SqlSessionFactory factory;

    @Before

    public void Init() throws Exception{

        String res="mybatis/SqlMapConfig.xml";

        SqlSessionFactoryBuilder builder= new SqlSessionFactoryBuilder();

        factory = builder.build(Resources.getResourceAsStream(res));

    }

     @Test

    public void testSaveType(){

        SqlSession session= factory.openSession();

        TypeCustomMapper typeCustomMapper=session.getMapper(TypeCustomMapper.class);

        Type type=new Type();

        type.setTypename("JavaEE");

        typeCustomMapper.saveType(type);

        session.commit();

    }

查看mapper接口中方法是否正常运作。

若有错误,则进行修改,直至没有漏洞。

然后,注意,配置文件中SqlMapConfig.xml 最后已经配置mapper了,所以可以将mapper自动注入到service的实现类中。

然后开始写service的实现类方法。使用@Autowired注解将mapper对象注入。这个不难。

然后写三个配置文件,

applicationContext-dao.xml

applicationContext-service.xml

applicationContext-transaction.xml

springmvc.xml

记得要将这些配置文件全部在web.xml中加载。

      <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>/WEB-INF/classes/spring/applicationContext-*.xml</param-value>

    </context-param>

applicationContext-dao.xml 中配置数据源,因此SqlMapConfig.xml中配置的 environment 就可以删去。(不过若是删除了,就没法再测试mapper接口了,mapper是仅属于mybatis,删了mybatis配置当然没法单独测试mybatis,可能你以后mapper接口还会变化,你又要测试mappers,所以建议你别删)。

applicationContext-service.xml配置几个bean,bean 的id为你自己定义,不过建议是service接口类名首字母小写,class为service实现类。

这样配置好了后,就可以在Controller中自动注入service,注入时,类为接口类,名字为这个bean的id。

applicationContext-transaction.xml 配置事务管理器。

springmvc.xml中配置前端控制器,视图解析器(这两者直接写mvc:annotation-driven),controller包,拦截器等。

使用注解的方式写Controller类,

Controller类自动注入Serivce类,Service实现类自动注入Mapper类。

然后在Controller中写方法,并进行配注解。

在jsp页面中,form的action 或者url的 action都是 匹配到注解的。

这个是大体的开发过程。

最后说下开发过程中遇到的问题,以及解决方案:

遇到的问题以及解决方案:

1.

想要提高用户体验,登录时采用异步登录,先将请求提交到服务器端进行验证,然后服务器若是找到了这个登录对象,就会将数据放入session属性中,然后将查询到的User返回给客户端,客户端的页面没有整体刷新,因此session没有更新,没有测试到这个属性。

只有当刷新页面后才会检测到session中此属性值。

解决:在jsp中定义了一个 input 组件,登录成功后,改变input的value属性为登录成功的用户姓名,然后此页面查询是否用户登录时,会先看session中是否有相应属性值,若没有,再看这个input组件中value值是否为空,若为空,则表明未登录,只要有一个条件满足,那么就算登录成功。等离开此页面,虽然这个input的value属性为空,但是session的值已经刷新,则依然算是登录成功。

后来改为登录成功直接跳转至写博客界面。

2.

在修改文章时,加载编辑器需要一段时间,而在加载编辑器时,不能给编辑器赋初始值。

而加载完编辑器后,却找不到文章的内容(会阻塞下去)。

所以说,要把文章内容放入编辑器,首先应该把文章内容,放入一个标签中。一开始是把内容放入input标签,display:none,使其隐藏,但是不可以。

因为将这个input标签的 value 属性,是用双引号括起来的。而文章正文中很可能也有双引号,所以很可能会提前结束value属性,然后这个input标签后面会直接显示文章正文内容。

最后的解决方案:

写一个DIV,使DIV的html为文章正文,然后使DIV隐藏。

文章正文是 HTML 结构,因此,可以使用<div>而不必担心div提前结束,因为即使文章内容中有</div> 但这个</div>标签依然不会导致div提前结束,原因是文章正文会被百度编辑器转义。不可能在内容中出现"</div>"

3.项目第一版本发布到服务器上后,出现一个问题:

每访问完一篇文章,这篇文章就会变为乱码。(看文章时文章还正常,看完后就出错)

主要是数据库内容会变为乱码。

解决:数据库刚才在服务器上安装,安装过程中安装的是标准版的,应该安装自定义版本,可以设置mysql数据库的编码集。

4.项目1.0基本做好,正在实现Resful风格,发现自己将分页的url写的很长(因为自己过去在映射显示文章的方法将类别分类,按日期分类和全部文章等写到同一个方法中,因为他们公用地方很多,所以这个方法需要很多参数,看起来很不好)

showArticles.action?pageNo=${i}&typeId=${typeId}&month=${month}&year=${year}

虽然可以在Controller也对应这么写,将空下的用0去补,

就是说 在Controller中映射方法 /showArticles/{pageNo}/{typeId}/{year}/{month}.action

在jsp页面中 页码中逐个判断某值(typeId,month,year)是否为空,然后若为空则用0去补。

但是觉得太麻烦,而且url太长,感觉很不好。

解决方案:

在Controller中,将按类别分类,按日期分类,全部文章,分开使用不同的Controller方法去映射,然后,将它们共同的地方提取出来,组成一个工具方法。这分开的几个方法,就把待显示的文章与文章总页数等参数传到这个工具方法的参数,并返回ModelAndView。

至于jsp页面中文章列表下的页标,在Controller写好后,传到前端,前端只需要显示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: