版权声明:转载请注明出处 : https://blog.csdn.net/coder_what/article/details/90141546
文章目录
Copyright© stonee
Servlet 概念
- Servlet是按照Servlet规范编写的Java类
- Servlet是Web应用的一个组件
- Servlet由容器tomcat管理
- Servlet扩展了服务器的功能
- Servlet可以生成动态的Web页面
- Servlet产生在JSP之前
Servlet 功能特点
- 当客户机发送请求至服务器时,服务器可以将请求信息发送给Servlet,并让Servlet建立服务器到客户机的响应
- Servlet可以创建并返回一个基于客户请求性质的动态内容完整的HTML页面
- 可以与其他服务器资源进行通信(DBMS, Java应用程序)
- 可以把多个客户端传递的值传递给多个另外的客户机上
Servlet周期
- 装载Servlet,默认动态执行
- 创建Servlet实例
- Server调用Servlet的init方法
- 客户端请求到达Server
- Server创建请求对象
- Server创建响应对象
- Server激活Servlet的service()方法,把请求和响应对象作为参数
- service()获得请求对象信息,处理请求访问其他资源,获取需要信息
- service()使用响应对象方法,将响应传回Server,最终到达客户端。Service可以激活其他方法区处理请求,如doGet,doPost或者其他自定义请求
- 对于更多客户端请求,Server创建新的请求和响应对象,循环上述,但不用再次调用init方法
- 最后Server调用Servlet的destroy()方法关闭Servlet
Servlet与JSP的区别
- JSP本质上就是Servlet,但创建方式不一样
- 用Servlet输出HTML太过麻烦,JSP是个嵌入型的脚本语言
- JSP属于MVC模型中的View层,Servlet属于Control层
- JSP编译后是“类Servlet”
- Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来;而JSP是Java和HTML组合成一个扩展名为.jsp的文件
新建一个小项目
使用IDEA,默认安装Tomcat和JDK
Q: 网上已经有很多用IDEA新建servlet的项目了,我为什么要再费时费事写一遍?
A:网上许多教程对新手(我)十分不友好!只告诉你要怎么做,但是没有说为什么要这样做,搞得我在一段时间内糊里糊涂的!
如果新手单单要运行一个Servlet项目,没有大多数网上项目那么复杂,不需要配置许多路径。想让一个最简单的项目跑起来,4步就可以
一、点击文件,新建一个项目,配置
-
配置项目路径,配置完毕项目创建成功
-
此时左侧的结构如下
-
src还是存储.java的目录
-
web目录存放和网络相关的目录
-
在网上的许多新手教程中,都要把web下面再创建一个lib和classes目录分别用来存放导入的Jar包和编译后的classes文件,在我看来,如果你仅仅是想让你的项目跑通,简简单单理解一下servlet,根本不需要配置classes,而lib也不用设置,因为我们仅仅完成的是hello world级别的玩具,所以根本就不用导入外来jar包
二、点击运行,编辑配置,左上方点击“+”,选择Tomcat。这一步是配置tomcat的
- 点击Deployment左侧有一个Application context,此处是配置jsp在浏览器中的url,如配置a,则默认情况下浏览器的url是‘http://localhost:8080/a/index.jsp’。配置完毕后点击确定。当然,也可以 不设置application context,这时浏览器的url是http://localhost:8080/
三、点击左侧的项目结构
- 在project部分有一个 “项目编译输出” ,它用于存储所有项目的编译结果,默认情况下,模块的输出路径是项目编译输出路径的子目录,这也就是刚才我们不配置classes的原因,
- project下面是模块部分,点击左侧的路径,如果我们刚才新建了classes,那么就需要选择第二个使用模块编译输出路径。但是我们并没有新建classes,那就按照默认的来就好了。点击路径左侧的依赖,我们可以看到有两个依赖,一个是jdk11,一个是tomcat,如果我们还有别的依赖的话,就要返回到刚才的步骤,新建一个lib包,然后把lib包导进来,lib里存放依赖
- 点击确定
四、在src中新建一个.java文件
import javax.servlet.ServletConfig;
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;
import java.io.PrintWriter;
//此处是注解,不用配置xml。意思是servlet的url路径,http://localhost:8080/hhh
@WebServlet(urlPatterns = "/hhh")
public class MyServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("初始化...");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("hello Servlet");
PrintWriter out = resp.getWriter();
out.print("hello me");
}
@Override
public void destroy() {
System.out.println("销毁...");
}
}
-
此时我们运行该项目,在控制台中我们会发现“初始化”和“hello servlet”,说明已经启动
-
切换到浏览器(一般会自动弹出)
-
换到servlet的路径中
- 四步大功告成
@感谢Evankaka