02.Maven介绍与作用【理解】
疑问
-
项目引用第三方jar包直接将jar包复制到项目中的方式好不好?不好在哪里?
不好,原因如下: 1.因为管理jar包不方便。一个项目复制一次jar包,很多项目导致磁盘jar包冗余; 2.jar包类冲突无法解决。复制过来的jar包,就会使用里面所有类的api,无法排除指定类的api。
-
有没有更好的方式管理项目引入jar包?
有,实现项目构建工具maven
maven介绍
可以管理项目jar包的构建,解决jar包之间的冲突;可以对项目进行管理,比如项目打包等,maven使用pom项目对象模型进行构建项目的。
POM介绍
POM(Project Object Model 项目对象模型),是一个maven的核心配置文件(xml格式)。用于描述项目如何构建,声明项目依赖,打包运行的方式等等。它是按面向对象的思想来管理项目的(每个jar包都是一个对象,通过给对象配置不同的属性来解决jar包的使用范围、不同版本冲突等),每个maven工程中都有一个pom.xml配置文件。
maven的作用
1. 项目jar包的构建
2. 项目的管理(项目生命周期的管理)
比如:打包,javase项目打jar,javaweb项目打成war包,还有其他功能
3. 分模块开发,在maven高级的时候讲解
小结
-
为什么使用maven管理jar的引用(maven的依赖管理)?
因为可以更加灵活控制每个jar包的使用,还可以节省磁盘jar包冗余,解决jar包类的冲突
03.Maven的仓库【理解】
疑问
-
使用maven管理依赖jar包,以后就不用复制jar包到项目中了,那么maven从哪里获取jar包进行构建项目呢?
仓库(磁盘的空间位置)
仓库类型
官方中央仓库地址:http://repo1.maven.org/maven2/
第三方阿里云仓库:http://maven.aliyun.com/nexus/content/groups/public/
小结
-
本地仓库的作用?
本地缓存,加快项目引用jar包构建
-
远程仓库有哪几种?
3种:官方、第三方、私服
04.Maven的坐标【理解】
疑问
-
所有项目要引用的jar包都在仓库里面,如何从仓库里面找到jar包给项目构建使用?
使用maven的坐标去仓库里面找到jar包给项目去构建
坐标的作用
可以在pom.xml配置坐标信息,坐标信息用于指向仓库里面具体jar包的位置
坐标具体含义
groupId,对应仓库里面第一层目录
artifactId,对应仓库里面第二层目录
version,对应仓库里面第三层目录
例子,引用junit的jar包使用坐标来描述,这个描述会放到pom.xml文件中
<dependency> <!--依赖-->
<groupId>junit</groupId> <!--组织名,仓库里面的第一层目录-->
<artifactId>junit</artifactId> <!--项目名-模块名, 仓库里面的第二层目录-->
<version>4.12</version> <!--版本号, 仓库里面的第三层目录-->
<scope>test</scope>
</dependency>
本地仓库的jar包位置
注意的点:大多数每个坐标的组成都对应一层目录,只有groupId特殊,如果groupid描述的信息中有“.”,就会代表多层目录结构
小结
-
坐标的作用是什么?
引用仓库里面的jar包
05.Maven的安装与配置【应用】
实现步骤
-
下载maven(素材中提供)
-
解压完成安装
-
介绍maven服务器的目录结构
-
配置maven全局配置文件settings.xml
-
绑定本地仓库
<localRepository>C:\webServer\repository</localRepository>
-
绑定远程仓库,阿里云
<mirror> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror>
注意,上面id的名字不要改,否则会导致本地仓库的所有jar需要重新下载
将上面信息配置到如下位置
-
配置全局的jdk编译语言级别版本(如果不配这个,默认编译级别是1.5,太低,idea运行的会有警告)
<profile> <id>development</id> <activation> <jdk>1.8</jdk> <activeByDefault>true</activeByDefault> </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>
将上面内容添加到如下配置文件位置
-
-
设置环境变量,到处都可以使用maven的命令
-
测试是否安装配置成功,如下信息代表配置成功
小结
-
给maven配置环境变量有哪些?
MAVEN_HOME Path
-
安装maven,给全局配置文件settings.xml配置什么信息?
本地仓库
远程仓库
全局jdk编译语言级别版本
### 06.IDEA绑定本地Maven服务器【应用】
##### idea当前项目或工作空间绑定Maven实现步骤
![\[外链图片转存失败(img-U5e1RNK6-1567396505773)(assets/)\]](https://img-blog.csdnimg.cn/2019090212485113.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0J1bGlkX0V2b2x0bw==,size_16,color_FFFFFF,t_70)
运行参数绑定
1. 设置运行参数
-DarchetypeCatalog=internal ,用于设置任何配置信息都从本地缓存中拿。有一些模板信息maven默认从远程仓库下载获取,如果设置了这个参数第一次从远程拿,以后从本地拿(这就要求大家第一次玩maven必须联网,1~5M不等)
```properties
-DarchetypeCatalog=internal
配置效果如下
全局设置以后所有新建的项目或工作空间绑定Maven实现步骤
-
绑定本地maven软件
注意,旧的项目或工作空间需要每个单独设置绑定maven
07.使用Maven骨架向导创建javaweb工程【了解】
实现步骤
-
使用向导骨架创建maven项目
新建模块设置坐标是为了以后可以将项目打包后安装到仓库,给其他人使用
生成默认的项目目录结构
配置maven自动刷新
如图下面webapp有蓝点
-
学习maven对javaweb项目目录结构的要求规范
项目名字 src main-------------------主程序目录,会被放到打包war文件中【必须有】 java---------------主程序java源文件目录 resources----------放业务配置文件,最后会放到classes类路径下面 webapp-------------存储web资源文件,类似以前web工程中web目录 test-------------------测试程序目录,不会放到war文件中【可有可无】 java---------------测试程序java源文件目录 resources----------放测试配置文件(经常不用这个目录) target---------------------输出目录存放部署资源和编译代码,由maven自动管理生成 pom.xml
完善当前javaweb项目目录结构
注意:里面的颜色变化,需要点击maven projects窗口里面的刷新才会有。
-
介绍pom.xml文件(每个项目都有maven的核心配置文件)
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!--当前项目的坐标--> <groupId>javaee117</groupId> <artifactId>day35_01_javaweb_archetype</artifactId> <version>1.0-SNAPSHOT</version> <!-- 设置打包方式,war代表当前项目打成war包,如果不设置默认打成jar包 --> <packaging>war</packaging> <!-- name与url的配置可有可无,因为没有具体意义,name设置maven窗口显示的模块名称,url显示的访问地址--> <name>day35_01_javaweb_archetype Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <!--设置全局属性--> <properties> <!--设置maven的码表,与当前项目没有关系,只会影响maven的输出信息--> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!--设置jdk编译语言的级别改为1.8,如果不设置会采用settings.xml全局配置文件的设置--> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <!--配置jar的引用依赖--> <dependencies> <!--配置junit的jar包引用--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <!--配置构建需要的工具--> <build> <!--finalName也是可有可无,代表名字--> <finalName>day35_01_javaweb_archetype</finalName> <!--配置的插件,插件就是代表一种功能,下面是骨架方式生成的插件信息 下面配置的插件版本比较高,如果不配置,插件默认也有的,只不过版本比较低 --> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> </build> </project>
总结:骨架方式生成的pom.xml文件生成了很多没有用的信息
-
开发一个Servlet
导入servelet的jar包依赖,在pom文件中dependencies标签里面
疑问:为什么以前的web项目没有导入servlet的jar包,也可以开发servlet?
答:因为以前的项目与tomcat直接绑定,tomcat上就有servlet的jar包,所以以前项目不用。
证明1:项目与tomcat是绑定的
证明2:tomcat默认有servlet的jar包
选中main/java鼠标右键创建servlet
package com.itheima.web; import java.io.IOException; @javax.servlet.annotation.WebServlet(name = "DemoServlet", urlPatterns = "/DemoServlet") public class DemoServlet extends javax.servlet.http.HttpServlet { protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException { doGet(request, response); } protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException { //数据数据给浏览器 response.getWriter().write("hello maven javaweb archetype"); } }
-
部署项目运行
由于maven工程默认没有与tomcat绑定,所以需要手动部署运行
运行效果
注意运行部署的位置
小结
-
maven项目对javaweb目录结构的要求是什么?
src
main
java
resources
webapp
test
java
resources
target
pom.xml
08.使用Maven自定义创建javaweb工程【了解】
实现步骤
-
创建maven项目,不用向导骨架
生成的默认目录结构
-
完成项目目录结构
完成webapp目录
将web目录拖拽到main目录里面,并修改名字为webapp
更新当前项目的webapp目录位置,因为如下报错
修改正确
完善后的路径
-
开发一个servlet
完善pom文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>javaee117</groupId> <artifactId>day35_02_javaweb_selfdefine</artifactId> <version>1.0-SNAPSHOT</version> <!--设置打包方式--> <packaging>war</packaging> <!--导入jar包--> <dependencies> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--servlet--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies> </project>
创建servlet
package com.itheima.web; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "DemoServlet", urlPatterns = "/DemoServlet") public class DemoServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("hello javaweb selfdefine"); } }
-
部署运行
小结
-
自定义方式创建方式需要额外做什么?
完善目录结构添加webapp
完善pom.xml添加打包方式
09.使用maven自定义和插件创建JavaWeb工程【重要】
实现步骤
-
安装插件(只需要做一次,以后不用做,根据插件安装文档安装),安装完成之后重启idea
鼠标右键有如下菜单说明插件安装完成
-
新建项目
-
使用插件优化项目目录结构
直接点击OK
-
开发servlet
导入依赖
servlet代码
package com.itheima.web; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "DemoServlet", urlPatterns = "/DemoServlet") public class DemoServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("hello maven javaweb selfdefine plugin"); } }
-
部署运行
小结
-
使用maven插件帮助创建了什么?
创建了webapp和打包方式
10.Maven的生命周期常用命令1—clean与使用命令方式【应用】
目标
通过生命周期管理命令管理项目
生命周期命令介绍
使用命令方式
-
方式一:传统方式使用dos命令
-
方式二:使用idea开发工具内置集成的maven工具操作(推荐方式)
11.Maven的生命周期常用命令2—其他命令【应用】
complie命令:用于对main目录下的java代码编译
test命令:先编译再运行test目录下的所有java代码,运行test目录下的java有2个要求
要求1:测试类类名必须以Test为结尾,否则只会编译不会运行
要求2:使用test目录运行测试类输出中文,默认会乱码,不建议使用test命令运行测试类,而是直接在测试类里面点击运行不会乱码。如果要解决这个乱码需要如下设置【了解】
a.设置当前项目maven码表为utf8
b.所有生命周期的命令都是使用插件完成的,要求插件必须使用最新版本
package命令:将当前项目进行打包的
intall命令:将当前项目安装到本地仓库
总结
12.依赖管理-依赖插件【应用】
maven的插件介绍
maven工具自带的插件,每个插件都有特殊的功能,常见知名的插件有2个
jdk编译语言级别设置插件
tomcat7插件
实现步骤
-
jdk插件用于设置编译级别【了解】
-
tomcat7插件,非常建议使用这个,因为部署项目速度快
配置插件代码
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>javaee117</groupId> <artifactId>day35_03_javaweb_selfdefine_plugin</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <!--导入jar包--> <dependencies> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--servlet--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <!-- jdk版本编译语言级别插件(了解),因为一般都采用全局settings.xml配置了,如果当前项目不使用全局就可以使用这个插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> <showWarnings>true</showWarnings> </configuration> </plugin> <!--tomcat7的插件,官方只提供了tomcat7,没有提供tomcat8 对比:tomcat7插件与tomcat正式服务器的区别 tomcat7插件部署速度快,有如下2个快: A.支持webapp目录下资源修改的热部署,即修改后立即生效,不需要重新部署 B.不需要部署,服务器直接运行当前项目模块位置的代码 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port><!--设置插件使用端口--> <path>/</path> <!--设置项目资源部署目录的名字--> <uriEncoding>UTF-8</uriEncoding> <!--设置get提交中文码表为utf-8,目的解决tomcat7的get方式提交中文乱码--> <server>tomcat7</server> <!--插件服务器的名字--> </configuration> </plugin> </plugins> </build> </project>
使用插件运行
运行浏览器
对与webapp目录下的资源修改,支持热部署(修改完立刻可以看到效果,不用重新部署)
对于main目录下java和resources任何的修改,不支持热部署,需要重新部署。
小结
推荐使用tomcat7,官方没有提供tomcat8,只能用tomcat7插件
tomcat7,get请求提交中文默认会乱码,但是这个插件解决了
13.依赖管理-依赖jar与依赖范围【理解】
依赖jar包
http://mvnrepository.com/ ,不会写可以在这里参照jar包的坐标依赖写法
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--指定Servlet的依赖包-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
依赖范围介绍
上面的依赖jar包有个scope是依赖范围,就是这个jar包在什么情况下起作用或使用。
编译classpath:在main目录下的java代码编译时可用
测试classpath:在test目录下的java代码编译时可用
运行时classpath:在运行的时候可用,才会将jar包部署到服务器上
编译时和运行时:
编译时:指将java代码编译成class文件的时候
运行时:在服务器上运行.class文件的时候
test依赖范围
只有在test目录下编译代码的时候可用
provided依赖范围
在运行的时候不可用。
servlet的jar包由于服务器上已经存在,所以使用provided就不会将其部署到服务器上。在tomcat7服务器上,如果将这个jar包部署到服务器上会与服务器自带的servlet的jar包产生冲突
runtime依赖范围
只有运行时需要,其他情况不需要。mysql的驱动包,编译的时候不用,但是服务器运行的时候要用
我们写jdbc操作的编译时候,使用的都是jdk的接口(connection,Resultset,PreparedStatement这些接口)
在运行jdbc的.class文件的时候,获取mysql的数据库连接com.mysql.jdbc.Connection的实例对象操作数据库
,所以运行的时候mysql驱动包
注意
如果没有配置依赖范围,默认使用complie,所有地方都需要。
小结
14.Maven案例添加联系人信息1-需求与环境搭建【应用】
需求
点添加联系人的按钮,弹出如下的模态框,使用原型文件夹的页面
点保存添加一行,使用ajax向后台数据库添加一行记录,更新表格,隐藏模态框。
模态框方法
新建maven工程
导入页面原型素材,导入到项目main目录下
环境搭建
pom文件内容
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>javaee112</groupId>
<artifactId>day35_04_contactSys</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
<scope>runtime</scope>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--BeanUtils-->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.2</version>
<scope>compile</scope>
</dependency>
<!--jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.3.3</version>
</dependency>
<!--jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<!--tomcat7的插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</build>
</project>
根据素材中“原型目录”中的所有资源导入项目中src/main目录下
代码结构
15.Maven案例添加联系人信息2-后端实现【应用】
实现步骤
实现代码
IContactDAO代码
//添加联系人
@Insert("INSERT INTO contact2 VALUES(NULL,#{name},#{phone},#{email},#{birthday})")
void insert(Contact contact);
ContactService代码
//添加联系人业务方法,并且更新缓存
public boolean addContact(Contact contact){
//初始化sqlSession资源
SqlSession sqlSession = MybatisUtils.getSession();
IContactDao contactDao = sqlSession.getMapper(IContactDao.class);
//1.调用dao添加联系人
contactDao.insert(contact);
//2.删除缓存,下次查询自动会更新缓存
//获取Jedis连接对象
Jedis jedis = JedisUtils.getJedis();
//删除缓存数据
jedis.del("contacts");
//关闭连接
jedis.close();
//关闭sqlSession
MybatisUtils.closeSession(sqlSession);
return true;
}
AddContactServlet代码
package com.itheima.servlet;
import com.itheima.entity.Contact;
import com.itheima.service.ContactService;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "AddContactServlet", urlPatterns = "/AddContactServlet")
public class AddContactServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
//实例业务
private ContactService contactService = new ContactService();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//1.获取添加联系人数据封装到Contact对象
Contact contact = new Contact();
BeanUtils.populate(contact,request.getParameterMap());
//2.调用业务层添加联系人
boolean isAdd = contactService.addContact(contact);
//3.返回添加成功,返回true
response.getWriter().print(isAdd);
//wirte方法适合输出字符串类型数据,其他类型输出使用print方法
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);//前端error回调函数接收弹出服务器忙
}
}
}
将解决乱码的过滤器放入到项目中
16.Maven案例添加联系人信息3-前端实现【应用】
实现步骤
index.html实现代码
//1.给“保存”按钮注册点击事件
$("#btnSave").click(function () {
//获取表单所有数据有2种方法:
//方法一:一个一个表单项获取,有多少个就获取多少次
//方法二(推荐):使用jquery提供获取表单所有数据方法,一次性获取所有数据
var contactData = $("#contactForm").serialize(); //格式="name1=value1&name2=value2..." 键值对字符串格式
//alert(contactData);
//2.提交添加联系人异步请求,并传递表单所有数据给服务器
$.post({
url:"AddContactServlet",
data:contactData,//传递表单所有数据
success:function (isAdd) {
//3.获取服务器返回的结果
if(isAdd=="true"){
//返回true,
// 表单数据清空, jquery没有提供表单清空方法,js对象有,语法为:js对象.reset();
$("#contactForm")[0].reset();
// 关闭模态框
$("#contactAdd").modal("hide");
// 刷新页面数据,让“加载联系人列表”按钮执行点击事件
$("#btnLoad").click();//click() 有参数叫绑定事件,没有参数就是执行点击事件
}else{
//返回false, 提示添加失败
}
},
error:function () {
//有异常,弹出“服务器忙”
alert("服务器忙");
}
});
});
16.Maven案例添加联系人信息3-前端实现【应用】
index.html实现代码
//1.给“保存”按钮注册点击事件
$("#btnSave").click(function () {
//获取表单所有数据有2种方法:
//方法一:一个一个表单项获取,有多少个就获取多少次
//方法二(推荐):使用jquery提供获取表单所有数据方法,一次性获取所有数据
var contactData = $("#contactForm").serialize(); //格式="name1=value1&name2=value2..." 键值对字符串格式
//alert(contactData);
//2.提交添加联系人异步请求,并传递表单所有数据给服务器
$.post({
url:"AddContactServlet",
data:contactData,//传递表单所有数据
success:function (isAdd) {
//3.获取服务器返回的结果
if(isAdd=="true"){
//返回true,
// 表单数据清空, jquery没有提供表单清空方法,js对象有,语法为:js对象.reset();
$("#contactForm")[0].reset();
// 关闭模态框
$("#contactAdd").modal("hide");
// 刷新页面数据,让“加载联系人列表”按钮执行点击事件
$("#btnLoad").click();//click() 有参数叫绑定事件,没有参数就是执行点击事件
}else{
//返回false, 提示添加失败
}
},
error:function () {
//有异常,弹出“服务器忙”
alert("服务器忙");
}
});
});