Spring
spring 初级规范
2.1.创建新的工作空间,并且编码设置成UTF-8
创建一个文件夹(必须英文)-- 打开Eclipse -- File -- Switch Workspace -- Other -- 点击Browse选择到刚刚
创建的文件夹 -- 点击确定 -- 点击LaunchWindow -- Preferences -- 搜索框输入enco -- 找到workspace -- 主界面下拉 -- Text File Encoding修改成UTF-8
-- 保存
2.2.配置jdk
Window -- Preferences -- Java下拉 -- Installed JREs -- 主界面点击Add
-- 选择Standard VM -- 点击Next -- 点击JRE home的Directory按钮 选择到你的JDK安装目录
-- 点击Finish即可
勾选你所创建的jdk路径 -- Apply and Close
2.3.配置Tomcat
Window -- Preferences -- Server -- Runtime Environments
-- 点击Add -- 找到自己的Tomcat版本(8.5) -- Next按钮点击
-- 点击Browse.. 找到Tomcat的安装路径
-- JRE选择你的之前2.2步骤生成的jdk
-- 点击Finish即可 -- 点击Apply and Close
2.4.创建服务实例
点击Servers -- 点击No servers are available... -- 点击Finish即可
双击创建好的实例对象 -- Server Locations修改成Use Tomcat...
-- Deploy path改成webapps
Timeouts下拉 -- Start改成200
最后保存即可
2.5.创建web项目工程
点击左侧边栏右键 -- new -- project.. -- 选择Web文件夹 -- 点击Dynamic Web Project
-- 点击Next -- 输入Project name -- Dynamic web module version选择3.1
-- 点击Next -- 点击Next -- 勾选Generate web.xml...
-- 点击Finish
2.6.创建包
controller
service
dao
bean:
bean其实有很多文章在里面:
pojo:和数据库对应表结构的类
dto:数据传输对象,就像是你们二阶段的时候,request和response类
三阶段的时候JsonMessage(主要用来保存服务器和客户端交互的类)
vo:视图对象,一阶段的时候数据获取到之后,直接显示到表格,而这个数据
所对应的类,叫做vo类
人员信息表:id 姓名,性别,家庭住址,
要求表格中找到 男女的人数 -》 Group by -》 保存到一个类中(性别,人数)
-》 将这个类的集合发送到前端展示
这里的这个类就属于vo
factory
util
filter(*)
2.7.实现登录业务
注意:所有的bean的类的类型,如果是基本数据类型,全部改成对应基本数据类型的封装类
int - Integer
short - Short
boolean - Boolean
byte - Byte
long - Long
float - Float
double - Double
char - Character
注意:接口类不要写public修饰,并且增删改查的方法名分别用:
insertXXX,deleteXXX,updateXXX, selectXXX或者countXXX
注意:接口类中每一个方法写上注释
/** 回车
注意:每一个类都要写上注释
Window -- Preferences -- Java -- Code Style -- Code Templates
-- 选择Comments -- Types -- 点击Edit按钮 --
-- 最后点击Apply and Close
-- 在类名上面写上/** 回车就出现了
我们看到的网站很多都是没有 xxx.html或者 xxx.jsp,
一般来说企业中不推荐把页面的后缀名展示出来,如果要展示后缀名也是自己定义的
http://localhost:8080/project0630/main.html
我们写的代码在权限验证方面还有bug
如果遇到500或者404的错误应该给予提示
解决方案:
1、不允许客户直接访问html
只要将html放置在web-inf的文件夹下
1.1.新建一个文件夹名字叫做html,生成在web-inf文件夹下
1.2.将html文件复制到这个文件夹中
2、如何访问
既然不能够直接访问,我们可以间接访问
浏览器 -》login.html
浏览器 -》servlet -》请求转发 -》 login.html -》 浏览器
2.1.创建一个Servlet(PageServlet),并且在web.xml中注册,重写doGet方法
2.2.在内部获取参数p用来判断转发到什么页面上,如果p为null,转发到登录页
如果不为null,转发到对应的页面上
我们在地址栏直接输入主界面的url居然没有登录的情况下可以访问 - bug
解决方案:
在servlet处进行session判断,如果没有登录去登录页
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
String p = req.getParameter("p");
// 如果没有携带参数,则跳转到登录页面
if(p == null) {
// 请求转发到登录页面
req.getRequestDispatcher("WEB-INF/html/login.html").forward(req, resp);
}else {
HttpSession session = req.getSession();
AdminInfo admin = (AdminInfo) session.getAttribute("admin");
if(admin == null) {
req.getRequestDispatcher("WEB-INF/html/login.html").forward(req, resp);
}else {
// 请求转发到对应的页面
req.getRequestDispatcher("WEB-INF/html/" + p + ".html").forward(req, resp);
}
}
}
当浏览器没有登录的时候,输入地址栏:
http://localhost:8080/project0630/page?p=main
因为权限问题就跳转到登录页面了,不允许访问主界面,然后我们去做登录,点击登录,登录成功后
并没有进行页面跳转还是在登录页面,只有浏览器点击刷新按钮的时候页面才会跳转。 - bug
原因:浏览器特色:节约用户的流量
如果在html写上 <img src="tupian.jpg" /> 当浏览器解析到这句话的时候,浏览器会去
访问服务器的这张图片,然后展示出来
如果在html写上 <img src="tupian.jpg" /><img src="tupian.jpg" /> 浏览器只会找
服务器要一次图片,因为图片的src的值相同
解决方案:
只要在跳转的页面处添加一段随机数就可以解决,因为浏览器会认为是新的url,不会采用
缓存了
window.location.href = "page?p=" + data.location + "&h=" + Math.random();
我们需要跳转到登录页面,写法:http://localhost:8080/project0630/page
那么很多的企业项目,他不用写page就能跳转了,怎么办到的呢?
解决方案:
在web.xml中的欢迎页面编写欢迎的url
<welcome-file-list>
<welcome-file>page</welcome-file>
</welcome-file-list>
很多客户比较手痒,会在浏览器的地址栏进行修改,如果将p的值修改成我们后台没有的页面名字就会出现404的tomcat
提示,非常丑,如何解决?
解决方案:
1、找一个好看的404页面
2、将这个页面的html复制到WEB-INF/html中
3、将这个页面的css和js复制到WebContent中
4、测试
5、将该页面在web.xml注册成为错误页面
<error-page>
<error-code>404</error-code>
<location>/page?p=err404</location>
</error-page>
6、修改pageServlet代码:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
String p = req.getParameter("p");
if(p != null && p.equals("err404")) {
req.getRequestDispatcher("WEB-INF/html/err404.html").forward(req, resp);
return;
}
// 如果没有携带参数,则跳转到登录页面
if(p == null) {
// 请求转发到登录页面
req.getRequestDispatcher("WEB-INF/html/login.html").forward(req, resp);
}else {
HttpSession session = req.getSession();
AdminInfo admin = (AdminInfo) session.getAttribute("admin");
if(admin == null) {
req.getRequestDispatcher("WEB-INF/html/login.html").forward(req, resp);
}else {
// 请求转发到对应的页面
req.getRequestDispatcher("WEB-INF/html/" + p + ".html").forward(req, resp);
}
}
}
如果没有了后缀名,到底这个url是啥?所以一般来说说,企业中都会自定义一个后缀名
解决:
将所有的url后面加上 .xxx
推荐使用 .act
Mybatis
MyBatis其实就是一个持久层框架,主要就是封装了dao的写法。
MyBatis的底层使用到了 反射的机制,让他能够实例化对应的实现类,也就是说我们只需要写接口类就行了
Mybatis的使用
对应的配置
MyBatis好处:简化代码,稳定性,效率高
使用:
官网:https://mybatis.org/mybatis-3/zh/getting-started.html
2.1.下载对应jar文件
2.2.将对应jar文件拷贝到项目中
oracle的jar
mybatis的jar
2.3.在src的目录下创建xml文件用来添加mybatis的配置信息
2.4.通过官网复制xml内容到这个mybatis-config.xml文件中
<?xml version="1.0" encoding="UTF-8" ?> <!-- 配置信息 -->
<!-- 约束
作用:代码补全
主要是因为添加了"http://mybatis.org/dtd/mybatis-3-config.dtd"作为代码补全
可以看出来其实是去找一个dtd的文件,这个文件提供了代码补全。
问题:如果没网络是不是就不会提示了?
解决方案:
提前去下载这个文件就好了,提前下载到本地,然后通过Eclipse进行配置,只要是访问
http://mybatis.org/dtd/mybatis-3-config.dtd路径,就去本地找这个文件,然后
进行提示就好了嘛。
1、通过浏览器地址栏下载这个文件
2、将这个文件放在一个文件夹中(提示:之后会有很多这样的文件,统一放在这个文件夹中即可)
3、Eclipse进行配置:
Window -- Preferences -- XML下拉 -- XML Catalog -- 点击主界面的add按钮
-- 点击File System找到那个本地的dtd文件 -- 选择Key Type选择URI
-- 输入Key,这里的key就是对应的链接了 -- 点击ok保存即可
-- 点击apply and close按钮
-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 内容 -->
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
注意:Eclipse对于xml的验证非常差,所以xml的验证关闭掉就好了
Window -- preferences -- Validation -- 主界面下拉
-- 找到 XML Schema Validator
-- 找到 XML Validator
-- 取消这两个的所有勾选
-- 点击Apply and Close
2.5.将这个xml文件的配置信息进行修改
<property name="driver" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracl:thin:@localhost:1521:orcl"/>
<property name="username" value="JF191201"/>
<property name="password" value="JF191201"/>
2.6.将mapper标签中没有引入的xml注释掉:
<!-- <mapper resource="org/mybatis/example/BlogMapper.xml"/> -->
2.7.编写代码:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
System.out.println(sqlSessionFactory);
2.8.创建pojo类
2.9.创建dao接口类()注意:以后就叫做mapper
2.10.在dao的包下面创建对应的配置xml
这里的xml的文件名必须和接口类的类名相同
2.11.复制配置文件的信息:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
mapper是一个根标签
属性:namespace:命名空间,值:接口类的全限定名(包名+类名)
-->
<mapper namespace="org.lgs.mapper.AdminInfoMapper">
<!--
resultMap:是用来告诉系统 字段和属性之间的关联性
属性:type:关联到哪一个类(类的权限定名)
id:自己定义,唯一即可
使用:在对应的select标签的resultMap属性中写上该resultMap的id值即可
-->
<resultMap type="org.lgs.pojo.AdminInfo" id="adminInfo_resultMap">
<!--
id:是用来告诉系统 当前表的主键和属性的关系
属性:column:主键的字段名
property:类的属性名
-->
<id column="ADMIN_ID" property="adminId"/>
<result column="ADMIN_NAME" property="adminName"/>
<result column="ADMIN_PWD" property="adminPwd"/>
<result column="ADMIN_STATE" property="adminState"/>
<result column="ADMIN_CTIME" property="adminCtime"/>
<result column="ROLE_ID" property="roleId"/>
</resultMap>
<!--
select是一个查询的标签
属性:id:接口类中的方法名称
resultMap:对应的字段和属性之间的关联
举例:我们的字段名:admin_name -> 属性名 adminName
那么系统怎么知道这个是对应上的呢?所以我们需要对这个字段和属性的对应关系进行配置
而这样的配置叫做 结果集映射,所以我们需要一个resultMap标签与之对应
内容:sql语句
-->
<select id="selectAll" resultMap="adminInfo_resultMap">
select * from admin_info
</select>
</mapper>
2.12.将这个文件添加到mybatis-config.xml中
<mapper resource="org/lgs/mapper/AdminInfoMapper.xml"/>
2.13.开始编写代码:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
System.out.println(sqlSessionFactory);
SqlSession session = sqlSessionFactory.openSession();
AdminInfoMapper mapper = session.getMapper(AdminInfoMapper.class);
/*List<AdminInfo> admins = mapper.selectAll();
System.out.println(admins);*/
/*AdminInfo admin = new AdminInfo(null, "佳俊", "654321", null, null, 1L);
Integer index = mapper.insertAdmin(admin);
session.commit(); // 增删改业务都要commit
System.out.println(index);
session.close(); // 都要关闭session
Mybatis的动态查询
MyBatis动态标签
使用方式
1.1.编写接口类方法:
/**
* 多条件查询
* @param adminName 账户
* @param startDate 开始时间
* @param endDate 结束时间
* @param adminState 状态
* @param rb 分页对象
* @return 用户集合
*/
List<AdminInfo> selectByParam(@Param("name") String adminName, @Param("sdate") String startDate,
@Param("edate") String endDate, @Param("state") Integer adminState, RowBounds rb);
1.2.编写xml的实现
<select id="selectByParam" resultMap="adminInfo_resultMap">
select * from admin_info
<where><!-- 这个where标签只要内部的sql片段都没有自动where标签删除where关键字,并且删除第一个and关键字 -->
<if test="name != null">
and admin_name like concat(concat('%', #{name}), '%')
</if>
<!-- 这里的大于号不能用,会被判定位标签,所以我们需要使用转义的字符代表
大于号 >
小于号 <
-->
<if test="sdate != null">
and admin_ctime >= to_date(#{sdate}, 'YYYY-MM-DD')
</if>
<if test="edate != null">
and admin_ctime <= to_date(#{edate}, 'YYYY-MM-DD')
</if>
<if test="state != null">
and admin_state = #{state}
</if>
</where>
</select>
1.3.测试:
// 实现多条件查询:
// 要求查询:用户名模糊查询, 创建时间的区间,状态 -> 查询条件一共4个 + 分页
List<AdminInfo> admins = mapper.selectByParam("z", null, null, null, new RowBounds(0, 2));
System.out.println(admins);
可以用,并且编码的效率也能提高,这个东西归功于mybatis的动态标签
其他的动态标签:
链接:https://mybatis.org/mybatis-3/zh/dynamic-sql.html
where if
choose、when、otherwise -》 相当于java的 if else if else
trim:
删除或添加某个关键字或词语
首先我们要先说一下sql的片段写法:
<!-- sql标签:主要用于封装某些常见的sql语句片段 -->
<sql id="base_columns">
admin_name,
admin_pwd,
admin_state,
admin_ctime,
role_id,
admin_id
</sql>
<select id="selectAll" resultMap="adminInfo_resultMap">
select
<include refid="base_columns"/>
from admin_info
</select>
所以在trim使用中可以这样用:
<!-- sql标签:主要用于封装某些常见的sql语句片段 -->
<sql id="base_columns">
<!--
suffixOverrides="," 删除最后一个看到的逗号
prefixOverrides="," 删除第一个看到的逗号
prefix="," 在最前面加上一个逗号
suffix="," 在最后面加上一个逗号
-->
<trim suffixOverrides="," >
admin_name,
admin_pwd,
admin_state,
admin_ctime,
role_id,
admin_id,
</trim>
</sql>
set:
<update id="updateAdmin">
update admin_info
<!-- 会将最后一个看到的逗号去掉,这里可以加很多修改内容,
如果传递进来是null,就不会加上片段了,用法和where很像 -->
<set>
<if test="name != null">
admin_name = #{name},
</if>
</set>
<where>
<if test="id != null">
and admin_id = #{id}
</if>
</where>
</update>
foreach:
接口类:
/**
* 通过id的集合找到用户信息
* @param adminIds id集合
* @return 用户集合
*/
List<AdminInfo> selectByIds(@Param("list") List<Long> adminIds);
xml:
<select id="selectByIds" resultMap="adminInfo_resultMap">
select
<include refid="base_columns"/>
from admin_info
<where>
<if test="list != null">
<!-- and admin_id in(100, 101) -->
and admin_id
<!--
foreach:用来遍历集合数据或数组数据
属性:collection 传递进来的集合变量名称
item 遍历的每一项的别名,这里可以自己定义
open 在遍历之前添加的句子(内容)
close 在遍历最后添加的句子(内容)
separator 遍历的每一项变量之间的间隔符
-->
<foreach collection="list" item="adminId" open="in(" close=")" separator=",">
#{adminId}
</foreach>
</if>
</where>
</select>
测试:
插入的主键返回:
业务:插入一条用户信息,并且返回用户的主键id:
做法1:
首先先查询到序列的下一个值是多少 -》 得到序列值
然后通过序列值进行插入用户信息
mybatis推荐
<insert id="insertAdmin">
<!-- selectKey:用来查询主键
属性:order:在执行插入语句之前查询selectKey的sql
keyProperty:搜索到的主键的值保存在 a.adminId(xx变量的属性中)
resultType:返回的主键类型
内容:查询的sql语句
注意:插入的sql的主键的插入信息就应该是 #{a.adminId}
-->
<selectKey order="BEFORE" keyProperty="a.adminId" resultType="long">
select seq_admin_info.nextval from dual
</selectKey>
<!-- insert into admin_info values(seq_admin_info.nextval, #{a.adminName}, #{a.adminPwd}, 1, sysdate, #{a.roleId}) -->
insert into admin_info values(#{a.adminId}, #{a.adminName}, #{a.adminPwd}, 1, sysdate, #{a.roleId})
</insert>
测试:
AdminInfo admin = new AdminInfo(null, "佳俊", "654321", null, null, 1L);
Integer index = mapper.insertAdmin(admin);
session.commit(); // 增删改业务都要commit
System.out.println(index);
System.out.println(admin.getAdminId() + "主键是这个");
session.close(); // 都要关闭session
做法2:
插入用户信息,
查询当前用户信息表的主键最大值 -》 得到用户主键id
不推荐使用
Mybatis的规范
联表等问题的解决方案:
案例:表格显示:用户信息管理的数据展示: 用户名、创建时间、状态(中文)、角色名(中文)、操作
我们在数据库的表中字段:admin_name、admin_ctime、admin_state、role_id
其中admin_state、role_id问题比较大,
admin_state解决方案就是将参数表数据放到浏览器端,浏览器端去自行匹配
role_id 只能通过联表来解决了
解决方案:
市面上有代码生成器 - 生成的是pojo类以及mapper - mapper仅限于单表
我们的案例只能通过联表解决,写在哪里?
1、adminInfoMapper中
2、新建一个接口类和xml文件来写
推荐用第二种方案
如果说字段做了修改,你有代码生成器,怎么做?是不是重新生成xml和接口类
那么如果用第一种方案,将联表的sql写在adminInfoMapper中,重新生成后就没了
所以我们使用方案2来实现功能
问题:只要联表就新建一个吗?
一般来说。resultMap标签一个xml写一个,那么只要搜索是这个resultMap的数据,都可以写在这个xml中
所以只要是联表就需要新建一个xml和接口类来编写是最好的
问题:pojo类怎么办?
在vo类中创建一个关联的类,命名:主要类Rel 或 主要类Vo -》 AdminInfoVo
这个类需要继承于主要类 -》 AdminInfoVo extends AdminInfo
如果客户要求:添加一个字段或修改一个字段,如果你不继承,要改两个类
如果你用了继承只要修改AdminInfo类的属性即可
public class AdminInfoVo extends AdminInfo {
private String roleName;
-- get set
}
封装
1、修改ConnUtil 和 SqlSessionUtil,因为上课讲过Connection和SqlSession可以看成一样的东西
所以Connection的封装在ConnUtil,SqlSession也应该进行封装,封装到SqlSessionUtil中
2、封装Dao
将dao中的接口类,复制到mapper包中,修改文件名,抽象方法也要响应进行修改(去掉connection参数,@Param等)
创建对应的xml,编写mapper的xml文件
将mybatis-config.xml复制过来,记得添加引入信息
3、在service层调用sqlsession
Maven
Maven是什么
是apache做的一款软件
使用
官网:http://maven.apache.org/index.html
下载:浏览器地址栏输入官网 -- 点击左侧边栏 -- Download -- 下拉找到Files
-- 找到 apache-maven-3.6.3-bin.zip -- 点击下载即可
1.创建一个文件夹,将zip文件复制过去,解压 (这里文件名叫做 jf1912_maven)
2.需要熟悉maven中每个文件的功能
3.进行配置:
名词:
远程仓库
本地仓库
依赖
中央仓库
maven项目工程
原理:
maven其实是一个软件,负责帮助我们下载对应的jar文件,那么我们其实在
软件开发过程中一直都会涉及到文件服务器这个概念,maven需要下载的jar
文件都存放在一个文件服务器中。
这个文件服务器在maven这边叫做 远程仓库。
因为maven是国外人发明的,所以远程仓库是国外链接,所以灰常慢。
国内就有企业去做一个国内的远程仓库 - 企业名字叫做 阿里通过maven从远程仓库将jar包下载下来之后,你需要指定一个文件夹来存放
如果不指定,放在c盘的用户目录的.m2文件夹下。
那么这个存放jar包的文件夹 在maven这边叫做 本地仓库
在企业中,很多时候每个程序员都需要去远程仓库下载jar文件,如果网速
比较慢,那么就要下载很久,所以为了节约效率,所以企业做了一个内网的
服务器,在上面创建一个文件夹用来存放从maven下载的jar
那么这个内网的服务器的文件夹 在maven这边叫做 中央仓库
远程仓库仅仅是一个链接,如果需要下载jar文件需要指定到下载这个jar文件的
路径,而这样的路径在maven中叫做dependency(依赖)
那么既然maven能够封装jar文件,那么他的项目工程的结构就不能是我们之前
项目工程结构,而是maven项目工程
点击软件中的conf文件夹 -- 打开编辑settings.xml文件
-- 配置本地仓库
在jf1912_maven文件中新建一个文件夹,叫做:repository
在xml的55行(大概)添加:<localRepository>指定到repository的路径</localRepository>
-- 配置远程仓库
在mirrors标签中添加:(大概在161行)
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
-- 配置maven自身的jdk版本
在profiles标签中添加:(大概在222行)
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
-- 保存退出即可
4.下载
我们如果需要maven下载jar文件,那么需要知道他的命令结构
如果你想要的一个可视化的界面让maven下载,那么你就需要配置maven和Eclipse的关系,
让eclipse帮你通过maven来下载
配置Eclipse和maven的关联:
Window - preferences - maven下拉 - user settings点击进去
- 选择Global Settings的Browse按钮找到刚刚配置的settings.xml文件
- 选择User Settings的Browse按钮找到刚刚配置的settings.xml文件
- 点击Update Settings(多点几下)
- 点击Apply and Close
5.创建maven项目工程(web项目工程)
点击左侧空白处 -- new -- project... -- Maven文件夹下拉
-- 选择Maven Project -- 点击Next按钮 -- 勾选Create a simple project...
-- 点击Next按钮 -- 输入Group Id(包名 org.lgs) -- 输入Artifact Id(项目名)
-- 修改Version(修改成0.0.1)
-- 修改Packaging修改成war
-- 点击Finish即可
注意:第一次他会帮助我们下载需要的jar包,所以会很慢
如果断网:
需要将本地仓库的文件全部删掉
点击项目名右键 -- maven -- update project
弄好之后maven的web项目工程就是会报错的
解决方案:
点击src -- 点击main -- 在webapp下创建WEB-INF文件夹
-- 将之前3.1版本的web项目的web.xml文件复制到WEB-INF文件夹
-- 错误解决
注意如果没有解决点击项目名右键 -- maven -- update project
6.导入jar
其实就是配置对应jar的依赖文件路径
在pom.xml文件中进行配置:
创建dependencies标签,到时候找到的依赖全部写在里面
找依赖的官网:https://mvnrepository.com/
注意:maven的项目工程并没有导入servlet的jar包以及jsp等功能的jar包,所以这两个也要引用进来
基本的jar配置:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4.0-atlassian-hosted</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.57</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
注意:如果下载中出现失败,则他会在<dependency>标签位置报错
解决方案:
将本地仓库中对应的版本的文件夹删掉 -- 点击项目名右键 -- maven -- update project
7.运行项目
和web项目启动是一致的
8.打包
在pom.xml中添加jdk的版本配置:
<build>
<finalName>你的项目工程名称</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
点击项目名右键 -- run as -- Maven Install