一个简单的管理系统 Springmvc 一不留神就躺坑

前言

好久没有用springmvc写项目了,抽时间写一个简单的springmvc项目

是什么(what)为什么(why)怎么做(how)

1.读书破万卷下笔如有神(理清思路,知识储备和前期整理)

2.遇到问题,多方面寻找解决的思路及方法

3.总结,回顾写过的坑

1.初始化数据库

数据库的话可以选择mysql,oracle 最近oracle用得比较多所以选用oracle

(1).查看数据文件存储路径

select * from dba_data_files

(2).创建表空间

1 create tablespace TS_MY_DATA

2 DATAFILE '*******TS_MY_DATA.DBF'

3 SIZE 2G AUTOEXTEND ON;

(3).创建自己的用户对象

create user 用户名 identified by 用户密码

default tablespace TS_MY_DATA

ACCOUNT UNLOCK;

--system用户下赋权

grant connect to 用户名 ;

grant resource to 用户名 ;

grant create procedure to 用户名 ;

grant create view to 用户名 ;

grant debug connect session to 用户名 ;

grant execute any procedure to 用户名 ;

grant select any table to 用户名 ;

grant insert any table to 用户名 ;

grant update any table to 用户名 ;

grant delete any table to 用户名 ;

grant drop any table to 用户名 ;

grant unlimited tablespace to 用户名 ;

grant dba to 用户名 ;

grant create any table to 用户名 ;

grant analyze any to 用户名 ;

(4).登陆自己的用户对象,创建表

create table USER_MSG

(

id VARCHAR2(64) not null,

create_timestamp NUMBER(32),

updata_timestamp NUMBER(32),

username VARCHAR2(200),

password VARCHAR2(200),

sex VARCHAR2(2),

age VARCHAR2(5),

address VARCHAR2(100),

phone VARCHAR2(13),

status VARCHAR2(1) default 0 not null,

salt VARCHAR2(10)

)

tablespace TS_MY_DATA

pctfree 10

initrans 1

maxtrans 255;

-- Add comments to the columns

comment on column USER_MSG.id

is '用户id';

comment on column USER_MSG.create_timestamp

is '创建时间';

comment on column USER_MSG.updata_timestamp

is '修改时间';

comment on column USER_MSG.username

is '姓名';

comment on column USER_MSG.password

is '密码';

comment on column USER_MSG.sex

is '性别';

comment on column USER_MSG.age

is '年龄';

comment on column USER_MSG.address

is '家庭住址';

comment on column USER_MSG.phone

is '电话';

comment on column USER_MSG.status

is '状态(是否失效)';

comment on column USER_MSG.salt

is '加密加盐';

-- Create/Recreate primary, unique and foreign key constraints

alter table USER_MSG

add primary key (ID)

using index

tablespace TS_MY_DATA

pctfree 10

initrans 2

maxtrans 255;

数据库初始化完成

2.初始化maven项目

本人好久不用eclipse已经忘记怎么使用eclipse 一直在用idea,感觉idea更智能一点,

仁者见仁智者见智。不做过多的评论。

(1).先创建maven项目

需要注意这三个。

GroupID 是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。

ArtifactID是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。

groupId

定义了项目属于哪个组,举个例子,如果你的公司是mycom,有一个项目为myapp,那么groupId就应该是com.mycom.myapp.

artifacted

定义了当前maven项目在组中唯一的ID,比如,myapp-util,myapp-domain,myapp-web等。

version

指定了myapp项目的当前版本,SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。

配置自己的maven仓库位置勾选override可以选择设置maven的settings.xml文件 系统会自动读取settings.xml文件中的maven仓库的配置地址

以后所有pom.xml文件引用的jar包全部会放入maven仓库。

创建maven项目存放的路径。

(2).创建项目目录结构

basics 存放基类 (一般不对外开放)

util 存放工具类(对外开放 包含basics中的方法)

controller 控制层

dao 数据访问层

domain 实体层

Enum 枚举层

service 业务层

resources 存放配置文件

test 存放单元测试文件

webapp 存放页面文件

配置文件的位置及页面存放的位置

(3).创建好目录结构开始准备搭建环境

首先是引入项目所需要的jar包,写在pom文件中

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<!-- spring版本号 -->

<spring.version>3.2.4.RELEASE</spring.version>

<!-- mybatis版本号 -->

<mybatis.version>3.2.4</mybatis.version>

<!-- log4j日志文件管理包版本 -->

<slf4j.version>1.6.6</slf4j.version>

<log4j.version>1.2.9</log4j.version>

</properties>

<dependencies>

<!--httpClient通讯工具类需要的依赖-->

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpclient</artifactId>

<version>4.3.6</version>

</dependency>

<dependency>

<groupId>com.testingsyndicate</groupId>

<artifactId>hc-jmx</artifactId>

<version>2.1.0</version>

</dependency>

<dependency>

<groupId>jstl</groupId>

<artifactId>jstl</artifactId>

<version>1.2</version>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.9</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>commons-io</groupId>

<artifactId>commons-io</artifactId>

<version>2.4</version>

</dependency>

<dependency>

<groupId>commons-codec</groupId>

<artifactId>commons-codec</artifactId>

<version>1.9</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<version>3.4</version>

</dependency>

<!--上传文件-->

<dependency>

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId>

<version>1.3.1</version>

</dependency>

<dependency>

<groupId>commons-dbcp</groupId>

<artifactId>commons-dbcp</artifactId>

<version>1.4</version>

</dependency>

<!-- 格式化对象,方便输出日志 -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>1.1.41</version>

</dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet/jsp-api -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jsp-api</artifactId>

<version>2.0</version>

<scope>provided</scope>

</dependency>

<!--spring-oxm依赖-->

<dependency>

<groupId>org.codehaus.castor</groupId>

<artifactId>castor-xml</artifactId>

<version>1.4.1</version>

</dependency>

<!--spring-json依赖-->

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.9.4</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

<version>1.7.1</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-web</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-oxm</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-tx</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-aop</artifactId>

<version>${spring.version}</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>${spring.version}</version>

</dependency>

<!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk -->

<dependency>

<groupId>com.amazonaws</groupId>

<artifactId>aws-java-sdk</artifactId>

<version>1.11.221</version>

</dependency>

<!-- mybatis核心包 -->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>${mybatis.version}</version>

</dependency>

<dependency>

<groupId>org.mybatis.generator</groupId>

<artifactId>mybatis-generator-core</artifactId>

<version>1.3.2</version>

</dependency>

<!--fastJson的转换器的配置 -->

<!-- mysql -->

<!-- <dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.18</version>

</dependency>-->

<!-- oracle -->

<dependency>

<groupId>ojdbc5</groupId>

<artifactId>ojdbc5</artifactId>

<version>1.0.0</version>

</dependency>

<!-- mybatis/spring包 -->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-spring</artifactId>

<version>1.2.2</version>

</dependency>

<!-- 日志文件管理包 -->

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>${log4j.version}</version>

</dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-api</artifactId>

<version>${slf4j.version}</version>

</dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

<version>${slf4j.version}</version>

</dependency>

<!-- 事务aop:config -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-aspects</artifactId>

<version>4.0.3.RELEASE</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok-maven -->

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok-maven</artifactId>

<version>1.16.20.0</version>

<type>pom</type>

</dependency>

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->

<!--lombok依赖-->

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<version>1.16.10</version>

</dependency>

<!--poi导入导出依赖-->

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi</artifactId>

<version>3.17</version>

</dependency>

</dependencies>

pom文件内容

然后添加springmvc所需要的配置文件

web.xml配置文件

applicationContext.xml spring容器配置文件

<?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:tx="http://www.springframework.org/schema/tx"

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

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

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

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.2.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-3.2.xsd

http://www.springframework.org/schema/mvc

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

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.2.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-3.2.xsd ">

<!-- 加载配置文件 -->

<context:property-placeholder location="classpath:config.properties"/>

<!-- 数据源 -->

<bean id="data" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

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

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

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

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

<!-- 高级参数 -->

<property name="minIdle" value="1"></property>

<property name="maxWait" value="3000"></property>

<property name="initialSize" value="1"></property>

<property name="maxActive" value="3"></property>

</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="data"/>

<property name="mapperLocations">

<list>

<value>classpath:mapper/*Mapper.xml</value>

</list>

</property>

<property name="typeAliasesPackage" value="com.yszb.domain"></property>

</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="basePackage" value="com.***.dao"/>

<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

</bean>

<!-- 事物 半成品-->

<bean id="tx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="data"></property>

</bean>

<!-- 注解扫描 -->

<!--指定spring注入层 -->

<context:component-scan base-package="com.****" use-default-filters="true">

<!--排除controller注解-->

<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

</context:component-scan>

<!-- 为@Transactional指明半成品 -->

<tx:annotation-driven transaction-manager="tx"/>

<!-- 通知spring 识别的@Aspect 注解 -->

<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>

</beans>

applicationContext.xml

这个文件的作用是配置数据库连接的dbcp连接池 具体配置信息在config.properties文件中。

sqlSessionFactory:是mybatis中的一个中要的对象,通俗讲它是用来创建sqlSession对象的,而sqlSession用来操作数据库的。

mapperLocations:里面配置的是指明在dao层所映射的mapper文件的位置。

typeAliasesPackage:它一般对应我们的实体类所在的包,这个时候会自动取对应包中不包括包名的简单类名作为包括包名的别名。多个package之间可以用逗号或者分号等来进行分隔(value的值一定要是包的全)

MapperScannerConfigurer :自动扫描 将Mapper接口生成代理注入到Spring

<property name="basePackage" value="com.***.dao"/> 存放数据访问接口的位置

<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>之前配置好的SqlSessionFactoryBean的name

注解扫描的要注意一个问题 use-default-filters="true" 配置为true注解扫描的时候就会排除@controller注解,如果配置为false那么如果该包内包含@controller则全部扫描<context:component-scan base-package="com.***" use-default-filters="true">

<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

</context:component-scan>

config.properties文件

1 jdbc.driver=oracle.jdbc.driver.OracleDriver

2 jdbc.url=jdbc:oracle:thin:@localhost:1521:ORCL

3 jdbc.username=****

4 jdbc.password=****

log4j配置文件

log4j.rootLogger=ERROR, stdout

# SqlMap logging configuration...

log4j.logger.com.ibatis=DEBUG

log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG

log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=DEBUG

log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=DEBUG

log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=DEBUG

log4j.logger.com.ibatis.common.util.StopWatch=DEBUG

log4j.logger.java.sql.Connection=DEBUG

log4j.logger.java.sql.Statement=DEBUG

log4j.logger.java.sql.PreparedStatement=DEBUG

log4j.logger.java.sql.ResultSet=DEBUG

# Console output...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

dispatcher-servlet.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:context="http://www.springframework.org/schema/context"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.2.xsd

http://www.springframework.org/schema/mvc

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

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.2.xsd">

<context:component-scan base-package="com.***" use-default-filters="false">

<!-- 如果类上有@Controller注解,则类中的所有注解都被扫描 -->

<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

</context:component-scan>

<!-- 注解驱动 -->

<mvc:annotation-driven></mvc:annotation-driven>

<!-- 试图解析器 -->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/WEB-INF/views/"></property>

<property name="suffix" value=".jsp"></property>

</bean>

<!-- 文件上传解析器 -->

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<!-- 最大未byte -->

<property name="MaxUploadSize" value="2097152"></property>

</bean>

<mvc:default-servlet-handler/>

</beans>

注意视图解析器的配置

这个位置一定要写全/WEB-INF/views/

初始化项目完成

这里遇到了一个问题,通常情况下WEB-INF目录是受服务器保护的,如果把vises文件夹直接放到wabapp下面则启动项目可以直接访问页面

路径:http://localhost:8080/***/views/login.jsp

但是把vises文件放到WEB-INF在访问是会一直报404这时候如何解决问题?

访问login.jsp则需要做一个controller入口

路径:http://localhost:8080/***/login/userlogin

这样访问controller根据返回值直接去找视图解析器前后匹配,就会找到成功页面。

写在最后:

码字不易看到最后了,那就点个关注呗,只收藏不点关注的都是在耍流氓!

关注并私信我“架构”,免费送一些Java架构资料,先到先得!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容