🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # Servlet是什么 Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码,通过java的API 动态的向客户端输出内容 servlet规范:包含三个技术点 1. servlet技术 2. filter技术---过滤器 3. listener技术---监听器 # 创建步骤 创建一个类实现servlet接口 在service中处理请求 在web.xml中配置servlet ![](https://box.kancloud.cn/6753cca9be820761afdabdba9a78bce1_364x196.png) 缺省Servlet 可以将url-pattern配置一个/,代表该servlet是缺省的servlet 什么是缺省的servlet? 当你访问资源地址所有的servlet都不匹配时 , 缺省的servlet负责处理 ~~~ //配置servlet在服务器中的信息 <servlet> <servlet-name>简单类名</servlet-name> <servlet-class>全类名</servlet-class> <init-param> <param-name>url</param-name> <param-value>jdbc:mysql:///mydb</param-value> </init-param> <!-- servlet在启动的时候创建对象,里面数字代表优先级,越小优先级越大 --> <!-- 指定servlet创建的时机 1. 第一次访问时,创建,那么值为负数 2. 服务器启动时创建,那么值为0或正整数 --> <load-on-startup>3</load-on-startup> </servlet> //配置浏览器访问servlet时的路径 <servlet-mapping> <servlet-name>简单类名</servlet-name> <url-pattern>/自己定义url</url-pattern> </servlet-mapping> ~~~ 欢迎页面 ![](https://box.kancloud.cn/85ce14a02afcfc47595ebeed008c9089_336x158.png) # 获取配置 服务器再调用init方法的时候会传入一个ServletConfig * 获取:服务器创建传入,可以直接使用 * 代表:Servlet的配置信息,每个Servlet都有唯一的一个ServletConfig对象 * 作用: 1. 获取Servlet的别名,servlet-name 2. 获取Servlet自定义的配置参数 3. 获取全局上下文(服务器启动时会为每个项目创建唯一一个对象代表这个项目),所有servlet获取的都是同一个全局上下文(ApplicationContext) ~~~ <servlet> <servlet-name>InfoServlet</servlet-name> <servlet-class>com.jdxia.InfoServlet</servlet-class> <!-- 一个init-param代表一个初始化参数 --> <init-param> <param-name>username</param-name> <param-value>root</param-value> </init-param> <init-param> <param-name>pwd</param-name> <param-value>123</param-value> </init-param> </servlet> ~~~ ~~~ @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("---init方法"); //获取servlet的别名 System.out.println(servletConfig.getServletName()); // 得到指定的初始化参数 //获取自定义初始化参数,根据key System.out.println(servletConfig.getInitParameter("username ")); //获取全局上下文 ServletContext context = servletConfig.getServletContext(); System.out.println(context); } ~~~ ~~~ // 得到所有的初始化参数 Enumeration<String> e = this.getServletConfig().getInitParameterNames(); while(e.hasMoreElements()) { String name = e.nextElement(); String value1 = this.getServletConfig().getInitParameter(name); System.out.println(name+"="+value1); } ~~~ # idea配置 **创建并设置javaweb工程** ![](https://img.kancloud.cn/52/5f/525f6d8a52da98ad829767768cd53981_751x734.png) 创建完成后工程结构如下: ![](https://img.kancloud.cn/b5/f8/b5f8d1af3d2a84eb24eafa3e8976c3bc_354x196.png) **Web工程设置** 1. 在WEB-INF 目录下点击右键,`New --> Directory`,创建 classes 和 lib 两个目录 ![](https://img.kancloud.cn/e9/de/e9de79246c1b7aa03c3ebec7ca3fa18a_156x122.png) classes目录用于存放编译后的class文件,lib用于存放依赖的jar包 2. `File --> Project Structure...`,进入 `Project Structure`窗口,点击 `Modules -->` 选中项目`“JavaWeb” -->` 切换到 Paths 选项卡 --> 勾选 “Use module compile output path”,将 “Output path” 和 “Test output path” 都改为之前创建的classes目录 ![](https://img.kancloud.cn/ad/5f/ad5fec9bb34c3ab450c7ed1c6a0a2999_808x335.png) 即将后面编译的class文件默认生成到classes目录下 3. 点击 `Modules -->` 选中项目`“JavaWeb” --> `切换到 Dependencies 选项卡 `-->` 点击右边的`“+”`,选择 `“JARs or directories...”`,选择创建的lib目录 ![](https://img.kancloud.cn/5e/ca/5eca01af123a8da7e464667c438a3141_855x134.png) ![](https://img.kancloud.cn/5d/47/5d470fe62b49ba47bdb7888cea0446c8_614x525.png) 选择`Jar Directory` ![](https://img.kancloud.cn/8e/39/8e39e513216325505bab8ec10099253e_377x211.png) ![](https://img.kancloud.cn/fa/81/fa81ac3e61cb9a31bcd6f5e04eb77a01_693x266.png) 4. 配置打包方式Artifacts:点击 Artifacts选项卡,IDEA会为该项目自动创建一个名为“JavaWeb:war exploded”的打包方式,表示 打包成war包,并且是文件展开性的,输出路径为当前项目下的 out 文件夹,保持默认即可。另外勾选下“Build on make”,表示编译的时候就打包部署,勾选“Show content of elements”,表示显示详细的内容列表。 ![](https://img.kancloud.cn/84/4d/844d9d462f531f9e2cbac4d9c7845ba3_905x310.png) **Tomcat配置** 1. `Run -> Edit Configurations`,进入`“Run Configurations”`窗口,点击`"+"-> Tomcat Server -> Local`,创建一个新的Tomcat容器 ![](https://img.kancloud.cn/3b/01/3b01bdf3df4f36b11af0a7dc022679a1_434x599.png) ![](https://img.kancloud.cn/b1/88/b188ae77e014766e2dc626bac189d7fc_764x249.png) 2. 在"Name"处输入新的服务名,点击“Application server”后面的“Configure...”,弹出Tomcat Server窗口,选择本地安装的Tomcat目录 -> OK ![](https://img.kancloud.cn/4e/47/4e47e78abaa523daab2dc562de1bad66_443x535.png) ![](https://img.kancloud.cn/87/1c/871cecf25857a2c9f91934b5ca3c552c_733x309.png) 配置的时候这边要这样配置 ![](https://box.kancloud.cn/e0d07691451908b42a7930e2d0983d16_1058x248.png) **JavaWeb测试** 1. `Run -> Edit Configurations`,进入“Run Configurations”窗口,选择之前配置好的Tomcat,点击“Deployment”选项卡,点击`“+” -> “Artifact”->` 选择创建的web项目的Artifact... 修改`“Application context”-> Apply -> OK ` ![](https://img.kancloud.cn/66/0e/660e653f4ba372f618da24980ba768b8_721x177.png) debug启动起来 ![](https://img.kancloud.cn/a3/2e/a32eff89bd3aac69c0be3f8805b5c942_858x594.png) # idea和tomcat 启动的时候,在server里面有个 ~~~ catalina.base=/Users/jdxia/Library/Caches/IntelliJIdea2019.2/tomcat/Unnamed_sjava ~~~ 搜索catalina.base会看到个路径,就是你项目运行的路径 conf文件夹下是配置 比如server.xml就是端口配置 `Catalina/ip/`下面有个配置文件是项目部署路径 ~~~ <Context path="/sjava_war_exploded" docBase="/Users/jdxia/Desktop/study/sjava/out/artifacts/sjava_war_exploded" /> ~~~ 工作空间项目和tomcat部署的web项目是不一样的. tomcat部署的web项目是"真正访问的",对应着"工作空间项目"的web目录下所有的资源. `WEB-INF`目录下资源不能被浏览器直接访问 # 注解配置 在类上使用`@WebServlet(urlPatterns = "/xx")`注解进行配置,可以不创建web.xml ~~~ @WebServlet({"/dd1", "/dd2", "/dd3/d1"}) ~~~ 路径定义规则 ~~~ /xx /xx/x *.do ~~~ ~~~ @WebServlet(urlPatterns = "/web1") public class ServletDemo1 implements Servlet { ~~~ 重启下看一下