Springmvc 一个简单的管理系统 我所遇到的坑1(持续更新)
前言
好久没有用springmvc写项目了,抽时间写一个简单的springmvc项目
是什么(what)为什么(why)怎么做(how)
1.读书破万卷下笔如有神(理清思路,知识储备和前期整理)
2.遇到问题,多方面寻找解决的思路及方法
3.总结,回顾写过的坑
1.初始化数据库
数据库的话可以选择mysql,oracle 最近oracle用得比较多所以选用oracle
(1).查看数据文件存储路径
select * from dba_data_files
(2).创建表空间
create tablespace TS_MY_DATA
DATAFILE '****\***\TS_MY_DATA.DBF'
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文件
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:ORCL
jdbc.username=****
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>
<mvc:default-servlet-handler/>
注意视图解析器的配置
这个位置一定要写全/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根据返回值直接去找视图解析器前后匹配,就会找到成功页面。
Springmvc 一个简单的管理系统 我所遇到的坑1(持续更新)的更多相关文章
- Java写一个简单学生管理系统
其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组.List等等来写出一个简易的学生管理系统,二.牛逼一点的大神则用数据库+swing来 ...
- java一个简单的管理系统
用java实现的简单管理系统 运行出来的状态 实现了新增.删除.借出.归还.排行榜简单的功能! 下面是简单的代码 首先定义一个书籍类,自己打开哦! public class Book implemen ...
- 一个简单的IM聊天程序Pie IM(以后会更新)
这个程序用多线程,实现设备之间的聊天,支持win10通知,欢迎下载 依赖的第三方库 win10toast 代码 将以下代码写入任意.py文件 1 print('Welcome to use Pie I ...
- 一个C语言萌新的学习之旅(持续更新中...)
三:计算和类型 一:隐式转换和显示转换 隐式转换:隐式转换指的是自动类型转换,自动向精确,大范围类型转换. 显示转换:例如:(int)3.5*6.0f=18.0f (int)(3.5*6.0f)=21 ...
- 《深度解析Tomcat》 第一章 一个简单的Web服务器
本章介绍Java Web服务器是如何运行的.从中可以知道Tomcat是如何工作的. 基于Java的Web服务器会使用java.net.Socket类和java.net.ServerSocket类这两个 ...
- springmvc springJDBC 简单实训银行账户管理系统
springmvc springJDBC 简单实训银行账户管理系统 1.简单介绍一下,在校时每周结束都会有一次学习总结,简称“实训”,这次实训内容是spring,因为是最近热门框架,我就先从基础方面开 ...
- JAVA课程设计——一个简单的教务人事管理系统
大三上学期期末总结,没错,上学期,写在下学期新学期开始,哈哈哈. 上学期学习了面向对象程序设计,课程设计的题目使用JAVA语言完成一个简单的教务人事管理系统,能够实现访问数据库的登录验证,分别按部门和 ...
- 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(三)(错误整理篇)
使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二) 以上两篇已经把流 ...
- 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二)(代码篇)
这篇是上一篇的延续: 用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 源代码在github上可以下载,地址:https://github.com/guoxia ...
随机推荐
- java 序列化和反序列化数据
使用ObjectOutputStream 序列号原始数据和对象数据,使用ObjectInputStream 反序列化 使用字节存储数据,可以将序列化的数据存储到硬盘上,或输出到网络上 package ...
- 贪心 FZU 2013 A short problem
题目传送门 /* 题意:取长度不小于m的序列使得和最大 贪心:先来一个前缀和,只要长度不小于m,从m开始,更新起点k最小值和ans最大值 */ #include <cstdio> #inc ...
- SQL数据库——静态成员
静态: 1.普通成员普通成员都是属于对象的用对象调用 2.静态成员静态成员是属于类的用类名调用 stactic 静态关键字 静态方法里面不能包含普通成员普通方法里面可以包含静态成员 静态: 1.普通成 ...
- 预采订单管理接收来源App数据
- hexo博客域名重复提交问题
之前电脑重装系统,导致我的博客也忘记备份了.呜呜 期间试过hexo的next主题,虽然很好看,但是一直出问题,最终又恢复到了原来的主题,还是原来的配方,还是原来的味道 记录: 一.加载域名管理器 二. ...
- 用antlr4来实现《按编译原理的思路设计的一个计算器》中的计算器
上次在公司内部讲<词法分析——使用正则文法>是一次失败的尝试——上午有十几个人在场,下午就只来了四个听众. 本来我还在构思如何来讲“语法分析”的知识呢,但现在看来已不太可能. 这个课程没有 ...
- NX自动出图 效果图
- swift- mutating
struct Stack<Element> { var items = [Element]() func push(_ item:Element){ self.items.append(i ...
- Alpha项目测试
这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/3338 这个作业要求在哪里 htt ...
- SDK_列表控件的使用
列表控件的使用 列表控件是通用控件,响应WM_NOTIFY 消息 主要包含了 4 种风格,我们学的是 report 风格 如何设置列表的扩展风格 LVS_EX_GRIDLINES: 列表拥有表格线 L ...