按照上篇装过Tomcat之后。

本机本来装了IDEA和Maven。

参考以下这篇

https://my.oschina.net/gaussik/blog/385697

《使用IntelliJ IDEA开发SpringMVC网站(一)开发环境》

其中初始化项目的时候非常慢,需要参考以下这篇来进行:

http://www.cnblogs.com/beiyeren/p/4566485.html

maven generating project in batch mode hang

另外因为maven本来的repository太慢了,所以使用百度内部的repository。在pom.xml最后加的配置如下:

    <repositories>
<repository>
<id>nexus-public</id>
<url>http://maven.scm.baidu.com:8081/nexus/content/groups/public</url>
</repository>
<repository>
<id>nexus-public-snapshots</id>
<url>http://maven.scm.baidu.com:8081/nexus/content/groups/public-snapshots</url>
</repository>
</repositories> <pluginRepositories>
<pluginRepository>
<id>nexus-public</id>
<url>http://maven.scm.baidu.com:8081/nexus/content/groups/public</url>
</pluginRepository>
<pluginRepository>
<id>nexus-public-snapshots</id>
<url>http://maven.scm.baidu.com:8081/nexus/content/groups/public-snapshots</url>
</pluginRepository>
</pluginRepositories> <distributionManagement>
<repository>
<id>Baidu_Local</id>
<name>Baidu local maven server</name>
<url>http://maven.scm.baidu.com:8081/nexus/content/repositories/Baidu_Local</url>
</repository> <snapshotRepository>
<id>Baidu_Local_Snapshots</id>
<name>Baidu local maven server for snapshots</name>
<url>http://maven.scm.baidu.com:8081/nexus/content/repositories/Baidu_Local_Snapshots</url>
</snapshotRepository>
</distributionManagement>

按照第一份页面改好之后,进入第二个页面:

https://my.oschina.net/gaussik/blog/513353

按照页面进行修改和配置之后,run程序出现以下错误:

无法找到元素 'context:component-scan' 的声明

搜索后采用http://www.ithao123.cn/content-10390816.html的方法加下以下:

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"

再跑,出现如下错误:

无法找到元素 'mvc:default-servlet-handler' 的声明

根据上一个错误的经验,看了下别人的servlet.xml配置,加上了以下配置:

http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd

再次运行,就成功获得了想要的页面:

这里是SpringMVC Demo首页
出现此页面,说明配置成功。

然后进入第三个页面:

https://my.oschina.net/gaussik/blog/513444

按照上文中的配置后,能够继续运行成功。

然后进入第四个页面:

https://my.oschina.net/gaussik/blog/513614

按照以上这篇文章的配置和代码,可以完成blog系统管理端基本的增删改查功能。

然后进入第五个页面:

https://my.oschina.net/gaussik/blog/640164

注意,在新写Controller的时候,都要加上注解。比如@Crontroller.

注意:在添加新blog文章的时候,报错:”The request sent by the client was syntactically incorrect.“

搜索之后,发现是前端字段和后端处理的字段不匹配。将添加文章的addP操作从post改成get,看到了url里面时间是2016-02-01这样的string格式,所以需要在Java里面增加从String到Date的转换。

在网上搜索之后,在BlogEntity的时间前面加上注解:

@DateTimeFormat( pattern = "yyyy-MM-dd" )
private Date pubDate;

文件头部加上引用:

import org.springframework.format.annotation.DateTimeFormat;

依赖关系pom.xml处加上对joda的依赖引用,即可:

<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.3</version>
</dependency>

通过对get方式的验证,正确了。再改回post方式。

最后,看一下部署的方式:

在Idea IDE项目的target目录下面,有一个SpringMVCDemo的目录。这个目录就是生成好的项目。把这个目录放到Tomcat的webapps目录下,然后重启Tomcat,就可以通过 http://localhost:8080/SpringMVCDemo 来访问这个项目了。

但是实际部署之后发现,部署到Tomcat目录后,新启动Tomcat后,只有 SpringMVCDemo , SpringMVCDemo/blogs , SpringMVCDemo/admin/users等输入的url能够work。在JSP代码里面进行redirect的url貌似不可以运行成功,比如会跳到如下:

http://localhost:8080/admin/blogs/show/1

搜索了一些资料,开始是在JSP文件head中加入如下代码:

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

测试之后,发现并没有用。上面这个应该是针对JSP本身做的。

然后看到JSP中的url跳转其实是写在html里面的,所以做了如下修改(注意,. 代表的当前目录指的是/admin/):

<a href="/admin/blogs/show/${blog.id}" type="button" class="btn btn-sm btn-success">详情</a>
<a href="/admin/blogs/update/${blog.id}" type="button" class="btn btn-sm btn-warning">修改</a>
<a href="/admin/blogs/delete/${blog.id}" type="button" class="btn btn-sm btn-danger">删除</a> 改为 <a href="./blogs/show/${blog.id}" type="button" class="btn btn-sm btn-success">详情</a>
<a href="./blogs/update/${blog.id}" type="button" class="btn btn-sm btn-warning">修改</a>
<a href="./blogs/delete/${blog.id}" type="button" class="btn btn-sm btn-danger">删除</a>

还有,注意把 add user/blog里面的/admin/users或者/admin/blogs地址都要改成 ./ ,因为这时候. 已经到了/admin的下一层目录。

另外, update user/blog里面的 updateP地址要改成 ../updateP,因为当前目录已经到了 /admin/user/update。

在测试的时候,发现IDEA没有运行的时候,target包不会更新的,所以需要先在IDEA make 一下或者运行一下,再把target目录下的包放到web-apps里面才能生效。

以上,就是springmvc demo程序的全部内容。当然了,多了解一些前端会有更多好处。所以有时间可以看一下Bootstrap:

http://v3.bootcss.com/

以上全部代码,在oschina原文作者的github里面可以获取:https://github.com/gaussic/SpringMVCDemo

SpringMVC in IDEA开发实践的更多相关文章

  1. 《JavaScript设计模式与开发实践》整理

    最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...

  2. Android游戏开发实践(1)之NDK与JNI开发03

    Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...

  3. TFS 2015 敏捷开发实践 – 在Kanban上运行一个Sprint

    前言:在 上一篇 TFS2015敏捷开发实践 中,我们给大家介绍了TFS2015中看板的基本使用和功能,这一篇中我们来看一个具体的场景,如何使用看板来运行一个sprint.Sprint是Scrum对迭 ...

  4. Android游戏开发实践(1)之NDK与JNI开发01

    Android游戏开发实践(1)之NDK与JNI开发01 NDK是Native Developement Kit的缩写,顾名思义,NDK是Google提供的一套原生Java代码与本地C/C++代码&q ...

  5. Android游戏开发实践(1)之NDK与JNI开发02

    Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI ...

  6. vue 2.0 开发实践总结之疑难篇

    续上一篇文章:vue2.0 开发实践总结之入门篇 ,如果没有看过的可以移步看一下. 本篇文章目录如下: 1.  vue 组件的说明和使用 2.  vuex在实际开发中的使用 3.  开发实践总结 1. ...

  7. Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》

    首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结 ...

  8. MVC5 网站开发实践 2.2、管理员身份验证

    上次完成了管理员的登录,这次要解决对管理员登录后的验证,采用AuthorizeAttribute属性的方式.之前还要解决几个问题,然后才重写验证类,最后稍微改一下界面. 目录 MVC5 网站开发实践  ...

  9. MVC5 网站开发实践 2.1、管理员登陆

    目录 MVC5 网站开发实践  概述 MVC5 网站开发实践  1.建立项目 MVC5 网站开发实践  2.后台管理   1. 创建SHA256加密方法. 在Data项目中添加文件夹[Security ...

随机推荐

  1. 搭建 Android 集成开发环境

    在搭建 Android 集成开发环境之前,我想说的是,我们学习的目标是同时掌握移动开发三种方式:iOS开发.Android开发和Html5手机网页开发.由于iOS的开发工具是采用苹果官方的XCode, ...

  2. 2017-2018-1 20179202《Linux内核原理与分析》第九周作业

    进程的切换和系统的一般执行过程 1.知识总结 (1)进程调度的时机: 中断处理过程直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule(). 内核线程是一 ...

  3. 《Android源码设计模式》--单例模式

    No1: 懒汉单例模式优缺点分析 public class Singleton{ private static Singleton instance; private Singleton(){} pu ...

  4. Python 编程:从入门到实战 读书笔记

    1..title()  每个单词首字母大写     .upper()  所有字母大写     .lower()  所有字母小写 2. \t 空白   转义字符只能用在""内     ...

  5. shell rename directory

    mv can do two jobs. It can move files or directories It can rename files or directories To just rena ...

  6. iOS 11开发教程(八)定制iOS11应用程序图标

    iOS 11开发教程(八)定制iOS11应用程序图标 在图1.9中可以看到应用程序的图标是网状白色图像,它是iOS模拟器上的应用程序默认的图标.这个图标是可以进行改变的.以下就来实现在iOS模拟器上将 ...

  7. zookeeper【5】分布式锁

    我们常说的锁是单进程多线程锁,在多线程并发编程中,用于线程之间的数据同步,保护共享资源的访问.而分布式锁,指在分布式环境下,保护跨进程.跨主机.跨网络的共享资源,实现互斥访问,保证一致性. 架构图: ...

  8. Minimum Size Subarray Sum 最短子数组之和

    题意 Given an array of n positive integers and a positive integer s, find the minimal length of a suba ...

  9. hihocoder #1301 : 筑地市场 二分+数位dp

    #1301 : 筑地市场 题目连接: http://hihocoder.com/problemset/problem/1301 Description 筑地市场是位于日本东京都中央区筑地的公营批发市场 ...

  10. CentOS6.X关闭防火墙

    一.关闭防火墙 1.重启后永久性生效: 开启:chkconfig iptables on 关闭:chkconfig iptables off 2.即时生效,重启后失效: 开启:service ipta ...