您的位置:首页 > 编程语言 > Java开发

SpringMvc+Mybatis实现一个简单人事管理系统(一)

2017-08-22 11:22 726 查看


       前言:这个博客主要记录我暑期在公司实习中学到的SpringMvc+Mybatis知识,并用他们做了一个简单的人事管理系统。本博客也记录了本人在学习中遇到的问题bug还有他们的解决方案。

               
         本篇文章主要说的是spring环境搭配的问题。

      一.用maven搭建springmvc项目

        本人在学校学的是C方向的编程语言,所以开发环境是VS,不需要太多的配置。课余时间自学了java,也只是简单的配置了java环境,做Android的简单demo时,也偷懒直接用了ADT来开发。而SpringMvc完全需要配置自己配置,我一开始是一脸懵逼,不知道该怎么办好。(我的编辑器是idea)
        一开始,我自己百度教程,最开始我搜到的都是要自己创建项目结构,下载相对应的jar包,再七七八八的配置,我看了很多博客,看完后还是一脸懵逼。好在有同事,他推荐我用maven配置SpringMvc。说实话,他跟我说的时候,我还是一脸懵逼,maven我之前听说过,但感觉它一直都很神秘,于是我按照他的建议,用maven配置SpringMvc,并了解了maven的相关知识。关于具体的用maven配置SpringMvc可以看看这个链接。本文的内容以本人在配置过程遇到的各种问题为主。

       本人一开始直接按照教程里面的maven配置,但一昧的照本宣科,总是有着各种bug,于是我开始自己来了解maven配置。maven是一个项目管理神器。maven的功能很多很强大,我所用到他的地方是引用jar包,可以直接通过在配置文件中(pom.xml)写入你所需要的jar包,maven会根据你所写的<dependency>c从远程的中央仓库,或者本地仓库(如果你本地仓库也有相应的jar包的话)导入相对应jar包。maven配置文件中有很多标签,先说<properties>标签,这个标签我个人理解是可以更好的管理jar包的管理好,比如说我的pom.xml中的properties标签

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.version>4.2.5.RELEASE</spring.version>

  </properties>

       以上标签说明,我现在使用的springmvc版本号是4.2.5的release版本,这是一个比较稳定的版本,与release相对应的是snapshot,他是一个相比较而言不稳定的版本。之后我们会配置<dependency>依赖,每个依赖都要说明一个版本号<version>,在version中直接引用<properties>中的<spring.version>就像这样。

  <dependencies>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
<version>${spring.version}</version>
    </dependency>
       加粗字说明了springframework的jar包的版本号。我们会在maven中写很多依赖(spring就有很多依赖),每个依赖都要写版本号,通过这样的引用,可以让日后项目版本号管理维护变得简单,只需要改动<properties>就可以轻松维护。

       接下来说说<dependency>标签,这个标签有三个属性是必写的,<groupId>一般是jar包所在的包名,<artifactId>是jar包的项目名,还有就是<version>说明jar包版本号。

       通过maven你可以引用你想引用的任何jar包,无需手动下载配置到制定文件夹,如果你不知道仓库中具体有哪些版本号以及相应标签的代码规范,可以在这个网址里面找到你所需要的jar包对应标签。

      在学习的过程中,我越发感觉到注解的重要性。pom.xml文件中有很多依赖,看着很烦,通过注解的分类,你可以快速找到你所需要的jar包。可以让你轻松管理好项目。
    

        二.springmvc的配置

    1.关于springmvc的配置应该先从web.xml说起,我一开始配置,总是跟着网上的相关博客进行配置,但网上各种版本都有,每个版本都各有差异,我看着也是云里雾里,配置起来还是各种出错。所以最好的办法就是,努力搞懂那些标签的作用和原理,你才能够真正使用好这些标签,出了错,也知道是哪个标签配置有误。
 
SpringMvc中,有个非常重要的Servlet就是DispatcherServlet-----前端控制器。我个人理解他像是一个业务经理,他负责拦截器和过滤器实现,拦截和过滤不合要求的请求,将满足拦截器的请求发送到控制器controller中,在实现控制器里业务逻辑后,将jsp的视图内容解析并进行渲染,最终显示到客户端网页上。相关代码如下

         在we
4000
b.xml中

  <servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

    </servlet-mapping>
<servlet-name>spring</servlet-name>

        <url-pattern>/</url-pattern>

         其中<servlet-name>标签决定了springmvc配置文件的名字。这个非常重要,如果<servlet-name>中的内容与springmvc配置文件的文件名不一致将导致错误。具体匹配规则是标签里面的内容加上-servlet,例如我的servlet-name名字是spring,那么我的springmvc配置文件名字就是spring-servlet。<load-on-startup>是这个前端控制器是否开启的意思。1即为开始。接下来的servlet-mapping只是映射,url-pattern为/即对所有请求都进行前端控制器处理。
        接着进行context-param配置,在这个标签中配置了applicationContext.xml文件,applicationContext.xml是beanfactory的子接口,对于这个文件,我一开始写springmvc项目时并未用到,当时还觉得没什么用,因为springm-servlet.xml文件已经对springmvc的bean类进行了扫描加载实例化,当用到mybatis进行数据源配置时,我才发现,其实这个applicationContext.xml可有可无,上网一搜,我才知道,这个文件applicationContext.xml一般用于非mvc结构,如果用mvc结构,只需把springmvc的配置写在spring-servle.xml配置文件中。但applicationContext也是spring的容器,我可以直接把mybatis配置信息上面,(可以把applicationContext看成是mybatis配置文件,虽然这样不规范)。也通过这样,让我对springmvc的目录结构有了更清楚的认识。

        接着就是首页的设置,这些都很简单,重点是我在这中间发现了一个问题,就是在相对url前加/和不加/的区别,我之前一直以为这两者没有什么区别,后来在项目调试时发现,如果在form的表单action加上/,默认是从根目录后添加相对url,比如根目录为localhost:8080,相对地址为/ccc,那么通过这个url表单将提交到localhost:8080/ccc,这看起来很合理,很正确,可如果我们在根目录后添加/aaa变为localhost:8080/aaa,此时若相对url为/ccc,表单还是提交到localhost:8080/ccc。此时若相对地址为ccc,表单提交到localhost:8080/aaa/ccc,仅仅差了一个/导致表单提交到不同的地方进行验证,这也是我之前一直没琢磨明白的地方,导致项目账号验证一直失败。后来在主管的指点下,我才深刻明白并理解了这个原理,万分感谢!
        最后就是过滤器的问题,说到这个,想来就很心塞。一开始,我照着网上的教程,配置了一个看上去一切都能运行的springmvc项目,并照着书本上的demo敲了一遍,敲完后,tomcat也照常运行(这个后面会提到,想到又是一阵心塞),然后页面出现了中文乱码。网页乱码我之前也遇到过,我想着应该是html中没有注明编码格式吧,于是我加上相关编码代码,还是不行,百度了一下,可能是tomcat编码配置与html中编码格式不对,于是,我又改了,还是不对。再百度下,可能是我太粗心了,在springmvc配置文件中没有添加相应处理器的bean类,心想这回应该对了,结果一运行,还是一行乱码。没办法,让主管来帮我调试,终于发现是我web.xml没有配置相应filter,具体代码如下:

 <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>

<param-name>encoding</param-name>

      <param-name>forceEncoding</param-name>
<param-value>UTF-8</param-value>

</init-param>

<init-param>

  </filter>
<param-value>true</param-value>

</init-param>

         在web.xml添加这些后,页面终于不再乱码了,通过这个问题,主管也教了我很多,我明白了有些问题不能只通过百度,看一些博客,就能解决,你必须得会分析和调试,逐步分析问题出在哪里。比如这个乱码问题,乱码有很多种原因,只有通过一个点一个点的调试,知道在哪里出现乱码,是http传输时乱码,还是页面解析时乱码,亦或是服务器乱码,这些都有可能,通过调试,挨个挨个排除,找出原因,才能最终解决问题。虽然这个bug曾让我折腾了很久,但我觉得这一切都是值得的。他让我明白了调试bug不能单靠把错误信息ctrl+v到百度就能解决的,必须有自己逻辑思考才行,很有趣!
      2.接下来是spring-servlet.xml配置文件的说明。这个文件中主要是对springmvc具体的配置,有一个非常重要的标签<context:component-scan>,这个标签里面内容时一个包名,通过扫描这个包名里所有带有springmvc标识注解的 比如@Controller等,自动给他们在spring容器中添加bean,不需要手动挨个挨个在xml文件中添加,这也是注解带来的优势。还有就是在spring-servlet.xml文件中添加视图解析器以及要解析的jsp地址。这些知识我一开始都是不知道的,在结合书本和博客后,我慢慢理解了这些标签。

     
      三、SpringMvc目录结构

         一开始创建这个springmvc项目时,我看着这些目录是一头雾水,后来在开发敲代码过程中,慢慢理解了这些目录的作用。我之前也有学过.net mvc 因为在vs集成环境中,一切都是弄好的,不需要自己配置什么东西,也不需要考虑项目的目录结构,因为在项目创建时这些已经都弄完了。然而springmvc必须得手动添加,我感觉这样虽然一开始比较难以接受,为什么要搞得那么麻烦,可后来在反复思考折腾中,我慢慢发现,自己配置,使得你对你项目各个结构有着更深的理解,当出现问题时,总是很能清楚地从错误信息中知道问题出在哪个文件夹,因为这一切都是你自己构造设计的,而且我越发觉得,这样配置可以个性化,很freestyle。我的目录结构大概是这样的。

 


      
       在项目一开始创建完成时,src中并没有java文件夹以及其下的包,这些都必须得手动创建。我一开始不知道,总是把java文件里面的各种文件夹目录都完全弄好了,再在设置中把其设置为resourse资源文件,然后那些文件夹自动就变成了包类型,每次需要该目录时,我总是傻傻的把java文件夹重新变成普通文件夹,待把里面的结构调整后(添加或删除文件夹)又重新设置,变为资源文件。后来我才发现,可以在变为资源文件后直接右击新建一个包。

       总之,java文件夹顾名思义,里面就是放着一些java文件夹,里面根据功能的不同,主要分为:

       controller——控制器,真正的业务逻辑在控制器中写

       dao——数据库crud操作,我是用mybatis实现

       do——数据库对象,个人理解为里面只是简单的pojo,但是里面的属性与数据库中的各个表格属性一一对应。

       interceptor——拦截器,为系统应该安全保护

       service——业务逻辑层,里面封装了具体业务逻辑方法,为controller中的业务逻辑实现提供工具

       util——里面重要定义了一些静态常量,规范项目的数据使用

       vo——这个是同事帮我调试bug添加的,后来我才知道,vo跟do一样都是pojo,但do与数据库有关,而vo是跟展示层有关。

        main文件中,有一个资源文件resourse,里面放着一些配置文件,比如数据库,log日志配置文件,这些文件在web.xml中用<context-param>来注册。

       重点说说webapp,webapp顾名思义,网页应用。在webapp中有js,css,img静态文件夹,里面放着相对应的文件,还有web-inf,这里面主要放着jsp文件以及web.xml和spring-servlet.xml配置文件,这些文件都很重要,放在里面,而且,web-inf文件夹相对于webapp他限制访问,从而具有更高的安全性。我一开始创建js,css,img三个文件夹时,直接在web-inf里面创建,导致jsp页面根本无法访问到这三个文件夹,弄得我一度怀疑自己是不是src路径写错。

        还有一个问题就是,index.jsp页面是默认为首页的,在web.xml中也有进行了相关配置,相关代码如下:

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>


        这个标签里理论上要求必须是静态页面才行,否则url会出错。
  

      四.tomcat配置

       说到这个真的是一把辛酸泪啊,我一开始从官网下载了tomcat9,jdk用的是1.8,但一直不能用,一直报错,很是奇怪。听同事建议,可能是版本不兼容,于是就换成1.7,并使用公司的tomcat服务器tomcat6,终于可以用了,然而在运行某次写好的代码时(具体哪个问题有点忘了),一直http传输错误,百思不得其解,问了同事也不知道,后来请教项目组主管,他说可能是公司tomcat服务器内部有些问题,让我重装一个绿色版试试。这次我换了tomcat7,终于搞定。其实回顾起来,tomcat配置应该是很简单的,只要tomcat与jdk兼容就行。
    

         总结:spring配置部分就到这里,下一篇博客是关于写人事管理系统中遇到的问题和解决方案。

     

  
 

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc mybatis