文章目录
1 Tomcat安装部署
1.1 Tomcat简介
- Tomcat是Apache软件基金会一个核心项目,是一个开源免费的轻量级Web服务器,支持Servlet/JSP,少量JavaEE规范。
- JavaEE: Java Enterprise Edition,Java企业版。指Java企业级开发的技术规范总和。包含13项技术规范:JDBC、JNDI、EJB、RMI、JSP、Servlet、XML、JMS、Java IDL、JTS、JTA、JavaMail、JAF。
- 因为Tomcat支持Servlet/JSP规范,所以Tomcat也被称为Web容器、Servlet容器。Servlet需要依赖Tomcat才能运行。
- Tomcat的官网: https://tomcat.apache.org/ 从官网上可以下载对应的版本进行使用。
1.2下载安装
选择合适版本,解压即安装完成,卸载删除解压文件即可
1.3 目录结构简介
解压后能看到如下目录结构
1.bin目录
存放一些可执行的二进制文件,.sh结尾的为linux下执行命令,.bat结尾的为windows下执行命令。
- conf目录
存放tomcat相关配置文件的。
- lib目录
存放tomcat依赖jar包的。其中ecj-x.x.x.jar起到了将.java文件编译成.class字节码文件的作用。
4. logs目录
存放tomcat运行时产生的日志文件。在windows环境中,日志文件输出到catalina.xxxx-xx-xx.log文件中。
在linux环境中,日志文件输出到catalina.out文件中。
5. temp目录
用户存放tomcat在运行过程中产生的临时文件(清空不会对tomcat运行带来影响)。
- webapps目录
用来存放应用程序,可以以文件夹、war包、jar包的形式发布应用。
默认自带以下5个项目:
- work目录
用于存放tomcat在运行时的编译后文件(清空该目录下所有内容,重启tomcat,可达到清除缓冲的作用)
1.4 启动
- 执行
bin/startup.bat
启动tomcat- 启动后访问
http://localhost:8080/
可以看到欢迎页面,则启动成功。
1.5 可能出现的问题
1 若页面一闪而过,则可能是由于JAVA_HOME
配置错误
2 Tomcat默认的端口是8080,要想修改Tomcat启动的端口号,需要修改 conf/server.xml
,可选端口号取值范围是0-65535之间任意未被占用的端口,如果设置的端口号被占用,启动的时候就会包如下的错误
3,若控制台启动信息乱码如下所示
可以通过一下方式解决,修改conf中logging.properties文件,将所有UTF-8改为GBK。
1.7 关闭
关闭有三种方式
- 直接x掉运行窗口:强制关闭
- bin\shutdown.bat:正常关闭
- ctrl+c: 正常关闭
1.7 项目部署
-
直接将资源文件放置到
webapps
下即部署完成。 -
若将
war
包放置到webapp
下可以自动完成解压,如将index.html
打包成test.war
,将其放到webapps目录下,自动生成test>index.html
可以通过http://localhost:8080/test/inext.html
访问。 -
war包,后期我们会借助于IDEA工具来生成。
2 IDEA中构建javaweb项目
2.1 项目结构
开发中目录结构
发布后目录结构
2.2 项目构建
🔴方式一,使用骨架构建
具体的步骤包含:
-
创建Maven项目,选择使用Web项目骨架
-
删除pom.xml中多余内容
-
补齐Maven Web项目缺失的目录结构
第一步,创建Maven项目,选择骨架
第二步,删除pom.xml的多余内容,仅保留如下内容即可
<?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>org.example</groupId>
<artifactId>demo1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
</project>
第三步, 补齐Maven Web项目缺失的目录结构
mian>右键>目录,会有提示
🔴方式二,不使用骨架构建
具体的步骤包含:
1.创建普通Maven项目
2.在pom.xml设置打包方式为war
3.补齐Maven Web项目缺失webapp的目录结构,WEB-INF/web.xml的目录结构
第一步,创建普通Maven项目
略
第二步,在pom.xml设置打包方式为war
<?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>org.example</groupId>
<artifactId>servletDemo2</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
</project>
第三步, 补齐Maven Web项目缺失webapp的目录结构
若生成是位置不对,则移动到对应位置
最终目录结构如下:
2.3 配置Tomcat(方式一)
测试第一步,webapp下新建test.html,运行程序
测试第二步,访问该路径http://localhost:8080/demo2_war/test.html,可看到如下界面,则配置成功。
可以在此更改默认访问路径名称
2.4 配置Tomcat(方式二)
直接使用Maven中的Tomcat插件来部署项目,具体的实现步骤,只需要两步
第一步,在pom.xml中添加Tomcat插件
<build>
<plugins>
<!--Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
第二步,启动
测试
访问http://localhost:8080/demo2/test.html,即可看到方式一同样的测试结果。
3 Servlet入门案例
Servlet是JavaEE规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet
3.1 导入坐标依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<!--
provided指的是在编译和测试过程中有效
最后生成的war包时不会加入
Tomcat的lib目录中已经有servlet-api这个jar包
如果在生成war包的时候生效就会和Tomcat中的jar包冲突,导致报错
-->
<scope>provided</scope>
</dependency>
3.2 实现接口(方式一)
定义一个类,实现Servlet接口,并重写接口中所有方法,并在service方法中打印一条语句,访问
http://localhost:8080/demo2_war/abc
package com.qlit.servlet;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/demo2")
public class servletTest implements Servlet {
public void init(ServletConfig servletConfig) throws ServletException {
}
public ServletConfig getServletConfig() {
return null;
}
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("调用了");
}
public String getServletInfo() {
return null;
}
public void destroy() {
}
}
Servlet由web服务器创建,service方法由web服务器调用,因为我们自定义的Servlet必须实现Servlet接口并复写其方法,而Servlet接口中有service方法
3.3 继承类(方式二)
要想编写一个Servlet就必须要实现Servlet接口,重写接口中的5个方法,比较麻烦的,因为我们更关注的其实只有service方法
继承HttpServlet,该类对HTTP协议进行了封装,仅需要重写doGet与doPost方法,即可处理get与post请求
package com.yiwu.Servlet;
import javax.jws.WebService;
import javax.servlet.*;
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("/abc")
public class ServletTest extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doget222-------");
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost-------");
}
}
4 项目三层架构的概念
4.1 MVC设计模式
MVC是一种模式、思想,是一种软件设计规范。 针对BS结构的应用程序,将业务逻辑、数据、显示分离的方法来组织代码。将表现和逻辑解耦。
-
M(Model) 模型层: 应⽤程序的核⼼功能,用于处理应用程序数据逻辑以及与数据库交互。有两类bean
- 一类称为数据承载 Bean:实体类,专门用户承载业务数据的,如 Student、User 等,
- 一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理用户提交请求的。(bean,dao);
-
V(View )视图层: 视图提供模型的展示,是应用程序中数据显示与提交的部分,管理模型如何显示给⽤户,它是应⽤程序的外观(jsp/html);
-
C(Controller)控制器: 将用户请求转发给相应的 Model 进行处理,并根据 Model 的计算结果向用户提供相应响应。是连接模型和视图的枢纽。(servlet/service)
4.2 JavaWEB三层架构
- View层(表现层):接收请求,封装数据,调用业务逻辑层,响应数据
- Service 层(业务逻辑层):对业务逻辑进行封装
- dao层(数据访问层):对数据库的操作代码
JSP开发模式发展史
-
纯Servlet开发
Servlet是Java技术中最早的Web解决方案,Servlet与普通Java类的编写类似。在Servlet中可以通过输出Html等语句来实现页面的样式,实现了数据的动态功能。表现、逻辑、控制、业务全部混在Servlet类中。
-
JSP(纯JSP开发)——也叫model1第一代
为了解决纯Servlet开发的弊端,Sun公司又推出了JSP(Java Server Page),JSP中采用HTML语言直接生成界面,还可以在界面中使用<% %>脚本标识嵌入Java代码,其本质也是最终生成一个Servlet类来编译解析。
-
JSP+JavaBean(Model1第二代)
JavaBean 是一种JAVA语言写成的可重用组件。实际上就是作为和数据库交互的Java类,Jsp页面里边编写部分Java代码用于转发等操作以及HTML页面的生成代码,而获取数据的方式以及业务逻辑(这里的业务逻辑就是非请求转发部分的代码)则通过JavaBean来实现。
JSP:表现层、控制层; JavaBean:模型层 利用我们现在熟悉的MVC模型的思想去看,虽然编写代码十分容易,但Jsp混淆了MVC模型中的视图层和控制层, 高度耦合的结果是Jsp代码十分复杂,后期维护依旧困难。
- servlet+JSP+JavaBean(Model2)
Model1第二代虽然在一定程度上解耦了,但JSP依旧即要负责页面控制,又要负责逻辑处理,职责不单一!Model2基于MVC模式,增加了Servlet,使得各个部分各司其职。
在这种开发模式下,JSP页面中就可以不用任何的<%%>语句了,包括<%=%>全部用EL表达式来代替, JSP中不涉及任何的业务逻辑,前端人员修改样式也十分方便。这里可以理解为JSP为MVC设计模式中的V,即视图。控制层通过Servlet来实现,获取前台传的参数、控制页面跳转,封装对象、向前台传输对象或者参数。并且可以由自己设计,设法用一个Servlet类实现该模块的所有功能的页面跳转。这里可以理解为Servlet为MVC设计模式中的C,即控制器。
但Model2并不是一个完全标准的MVC设计模式,因为JavaBean还过于臃肿,并不能完全作为M层存在,所以将JavaBean中的封装业务功能再一次进行分割:业务逻辑、数据持久化。
- 目前的三层架构
为了更好的降低各层间的耦合度,在三层架构程序设计中,采用面向抽象编程,这就实现了层间解耦合。
- 即上层对下层的调用,是通过接口实现的。
- 下层对上层的真正服务提供者,是下层接口的实现类。
- 服务标准(接口)是相同的,服务提供者(实现类)可以更换。
4.3 SSM与三层架构的关系
SpringMVC、Spring 与 MyBatis ,在三层架构中位置不同,功能不相同,各司其职。
- SpringMVC:View 层的实现者,完成用户的请求接收功能。SpringMVC 的 Controller作为整个应用的控制器,完成用户请求的转发及对用户的响应。
- MyBatis:Dao 层的实现者,完成对数据库的增、删、改、查功能。
- Spring:以整个应用大管家的身份出现。整个应用中所有 Bean 的生命周期行为,均由Spring 来管理。即整个应用中所有对象的创建、初始化、销毁,及对象间关联关系的维护,均由 Spring 进行管理。