一.Idea中创建Maven Web项目
1.使用骨架创建项目
点击files->new ->new project->出现页面如下
在左侧选择Maven
右侧选择Create from archetype->org.apache.maven.archetypes:maven-archetype-webapp
然后点击右下角的next
然后点击finish(名字随意)
然后会出现项目——如图示
点击左侧的pom.xml
其中在右侧的<packaging>war</packaging>其中<packaging>是打包方式打包方式有两种一种是jar:默认值;一种是war:Web项目打包用的
骨架创建之后会出现如下图所示界面(如果是第一次安装该界面下的src可能没有出现,需要等待idea安装相关的包)
其中的web.xml如下图所示
在这个骨架main文件夹里面缺少Java文件夹和resources文件夹
补充Java文件:点击main文件->鼠标右键->new->Driectory->选择图片下面的两个一个蓝色的java图标一个是resources资源包
以上就是使用骨架的方式
2.不使用骨架创建Maven Web项目
点击files->new ->new moudles->出现页面如下
直接next然后完成(名字随意)。
然后出现如下页面:
点击左侧的untitled16(我自己创建的名字)里的pom.xml并添加
<packaging>war</packaging>
<properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties>
点击file里面的Project Structure
出现如下界面
选择左侧的Facets,观察是否出现如下三点
选择的Web是不是你所选择项目中的Web如果没有点击左上方的“+”号
选择的Web Resources Directory是否存在红色现象,如果存在红色现象点击右侧“+”号
请查看Deployment Descriptors里面是否有Web模块类型如下图,没有的话点击右边“+”号
最终发现没有红色->进行下一步
如果没有任何差错,就证明你完成啦!!!
二.idea中使用Tomcat
之前打包采用war包的方式,tomcat包从官网上面进行下载,然后解压到任意的目录文件下(只要你记得的话)(基于上面的无骨架安装Maven Web框架)
点击项目文件->右键->选择run maven ->选择package(因为之前打过包了)
在控制台会输出这样
如果出现意外,发现红点就单点file里的蓝色位置
查看右侧的两个Path是否一致,若不一致就点击“-”删除,再点击加号“+”进行添加(我本人采用无骨架的项目是untitled16有骨架的是untitled15)
要配置Tomcat点击右侧的配置项
绿色锤子旁边的Add Configuration
出现如下界面,点击“+”号,下拉
选择蓝色位置,然后配置Tomcat(是在系统环境变量配好的前提下)
第一个Application server中要记得选择Tomcat的版本右侧的Configuration是文件路径
然后点击Deployment选择“+”号,
然后选择蓝色位置
然后点击下方的apply(应用),之后点击OK
整个页面就是这样的
进行简单的尝试
在进行简单的创建a.html
在
点击右侧的绿色三角形或者箭头之后进行测试
单独的话会是404 not found
因为路径错误
按照课程的说法是在上方的网址路径上添加对应的文件名即可成功,但是我的不太一样
我的这个项目的端口并不是8080,反而是这样的端口64332
三.tomcat的Maven插件
首先,要栽pom.xml中添加如下代码:(在<build>标签中)
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>80</port> <path></path> </configuration> </plugin>
然后点击项目右键的run maven 的tomcat7开头的选项,然后重启
记得关掉之前的端口(这个插件只支持tomcat7版本)
四.Servlet
Servlet是Java提供的一门动态Web资源开发技术。
Servlet(Server Applet),全称Java Servlet,没有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
Servlet是JavaEE规范之一,其实就是一个接口,我们需要定义Servlet类来实现Servlet接口
可以查看JavaEE的api文档
Servlet的快速入门
创建web项目,导入Servlet依赖坐标(pom.xml文件)
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
创建:定义一个类,实现Servlet接口,并重写接口中所有方法,并在service方法中输入一句话
public class ServletDemo1 implements Servlet{
public void service();
}
配置:在类上使用@WebServlet注解,配置该Servlet的访问路径
import javax.servlet.annotation.WebServlet;
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet{
public void service();
}
访问:启动Tomcat,浏览器输入URL访问该Servlet
http://localhost:8080/web-demo/demo1
例子过程
在src->main->java->创建一个.class文件,文件名自定,我的叫做ServletDemo1.class
Servlet这个接口可以直接通过implements methods来进行一系列的书写,简化操作
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("servlet hello world");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
然后点击整个项目的run maven->tomcat7开头的
因为我的Maven插件安装失败,所以无法给出运行正确的局面。
Servlet执行流程
浏览器发出请求->服务器(端口号:接口名/.class文件)
request里面放的是请求的数据,response放的是响应的数据
Servlet由Web服务器创建,Servlet方法由Web服务器调用
Servlet必须调用Servlet接口并复写方法。
Servlet的生命周期
在Web服务器中,生命周期由容器来管理
加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创造Servlet对象。
初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些初始化工作,只调用一次。
public void init(ServletConfig servletConfig) throws ServletException { }
请求处理:每次请求Servlet时,sevlet容器都会调用Servlet的service()方法对请求进行处理,可以多次调用。
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("servlet hello world"); }
服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放。在该方法调用之后,容器就会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。
public void destroy() { }
获取ServletConfig对象
public ServletConfig getServletConfig() { }
获取Servlet信息
public String getServletInfo() { return null; }
关于Servlet出现了部分错误,原因是tomcat里的Servlet-API并未配置 ,可以通过http://t.csdnimg.cn/hWRVZ
来进行解决
错误图像:
Servlet体系结构
Servlet-->Servlet体系根接口
GenericServlet-->Servlet抽象实现类
HttpServlet-->对HTTP协议封装的Servlet实现类
对于B/S架构的Web项目,都是针对HTTP协议,所以我们字定义Servlet,会继承HttpServlet
例如这样:
运行Tomcat
记得在打开的网页网址后缀加上自己起的@WebServlet("/demo")里的demo名字
在控制台下看到结果
为什么HttpServlet要有不同的方式调用请求?
要处理逻辑就是获取请求参数的,不同的请求方式请求的参数位置不一样,根据请求方式的不同进行分别的处理,请求方式需要借助ServletRequest对象。
HttpServlet使用步骤
1.继承HttpServlet
2.重写doGet和doPost方法
HttpServlet原理
获取请求方式,并根据不同的请求方式,调用不同的doXxx方法