JavaWeb——Servlet开发1
Java Servlet是运行在服务器端上的程序,Servlet是Java Servlet包中的一个接口,能够直接处理和相应客户端的请求,也可以将工作委托给应用的其他类。
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
这是Java Servlet包中的Servlet接口的源代码,init方法用于初始化,service用于响应请求,destroy用于销毁该Servlet。
public abstract class HttpServlet extends GenericServlet {
public HttpServlet() {
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ }
protected long getLastModified(HttpServletRequest req) {}
protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{}
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ }
protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{}
private Method[] getAllDeclaredMethods(Class<? extends HttpServlet> c) {}
protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
protected void doTrace(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
private void maybeSetLastModified(HttpServletResponse resp, long lastModified) {}
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {}
}
这是Java Servlet包中的HttpServlet的所有方法(具体实现我删掉了),
- 可以看到HttpServlet继承自GenericServlet,GenericServlet是一个实现了Servlet接口的抽象类,不过GenericServlet只是添加了一些用于日志操作的和从应用和Servlet配置中获取信息的方法。
- HttpServlet提供了响应每种Http方法类型的实现。

1、使用maven引入Java Servlet包
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
2、实现一个基本的HttpServlet类。
创建一个继承自HttpServlet的HelloServlet类,这里调用参数HttpServletResponse中的getWriter方法,获得一个Java.io.PrintWriter.接下来再调用PrintWriter的println方法向输出流中输入文本“helloworld”+Serlet的名字
这里的初始化仅仅只是添加了输出几句话而已,平常我们可以选择什么都不做。
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("helloworld" + this.getServletName());
}
@Override
public void init() throws ServletException {
System.out.println("Servlet " + this.getServletName() + "has started");
}
@Override
public void destroy() {
System.out.println("Servlet " + this.getServletName() + "has stopped");
}
}
3、部署Servlet
打开Web.xml。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1" id="data-fabric-web-tool"> <display-name>Hello World Application</display-name> <servlet>
<servlet-name>firstServlet</servlet-name>
<servlet-class>servlet.HelloServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>firstServlet</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping> </web-app>
其中<servlet></servlet>和<servlet-mapping></servlet-mapping>是部署的关键,而且它两是一一对应的。
<servlet-name>是Servlet的名字,这里是任意设定的。
<servlet-class>是使用的类
<load-on-startup>的用处是,如果多个Servlet包含了该标签那么它们将按照标签内的大小顺序启动,数字越大启动得越晚。
所以<servlet></servlet>就是将一个<servlet-class>中的servlet类命名为<servlet-name>这样应用程序运行的时候就会启动这个servlet
<servlet-mapping></servlet-mapping>中的<servlet-name>和<url-pattern>配置之后,所有访问应用程序的URL/first都将由firstServlet处理。
<servlet>
<servlet-name>firstServlet</servlet-name>
<servlet-class>servlet.HelloServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>secondServlet</servlet-name>
<servlet-class>servlet.HelloServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>firstServlet</servlet-name>
<url-pattern>/first</url-pattern>
<url-pattern>/third</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>secondServlet</servlet-name>
<url-pattern>/second</url-pattern>
</servlet-mapping>
我们甚至可以这么来设置部署,这里的意思是一个Servlet可以使用不同的URL进行访问,如果两个Servlet有着相同的逻辑,但链接到不同的数据库,我们可以使用相同的类。
所以最后实现了两个Servlet的实例,它们使用的是相同的Servlet类,名字不同,被映射到了不同的URL上,而且这里有两个不同的URL指向firstServlet。
4、使用Tomcat+IDEA运行测试
点击Run,添加Tomcat Server,在Deployment中点击+号,点击Aetifact添加项目,修改Application context,下图这样运行项目的时候浏览器可以通过这个"http://localhost:8080/hello-world/"URL进行访问

5、效果



JavaWeb——Servlet开发1的更多相关文章
- 【Java123】JavaWeb Servlet开发
http://www.runoob.com/servlet/servlet-intro.html https://www.cnblogs.com/xdp-gacl/tag/JavaWeb学习总结/de ...
- JavaWeb——Servlet开发
什么是Servlet? Servlet运行的过程 Servlet的生命周期 生命周期的各个阶段 Servlet的配置 使用Web.xml配置 使用注解配置 Servlet相关接口 ServletCon ...
- JavaWeb——Servlet开发3
1.使用初始化参数配置应用程序 初始化参数的方式有两种 在Web.xml文件中使用<context-param>标签声明上下文初始化参数 <context-param> < ...
- JavaWeb——Servlet开发2
1.HttpServletRequest的使用 获取Request的参数的方法. 方法getParameter将返回参数的单个值 方法getParameterValues将返回参数的值的数组 方法ge ...
- javaweb学习之Servlet开发(二)
javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个< ...
- JavaWeb学习总结第四篇--Servlet开发
Servlet开发 用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求.服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应.浏览器收到回应,再把回应的内容显示出来.这种请 ...
- JavaWeb开发之四:servlet技术 黑马程序员_轻松掌握JavaWeb开发之四Servlet开发 方立勋老师视频教程相当的经典
总结: 记住:servlet对象在应用程序运行的过程中只创建一次,浏览器每次访问的时候,创建reponse对象 request对象,然后调用servlet的service方法,reponse对象和re ...
- javaweb学习总结(五)——Servlet开发(一)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- javaWeb中servlet开发(5)——WEB开发模式:Mode I与Mode II
1.servlet开发 2.model I模式 客户端通过访问JSP,调用里面的javabean,而通过javabean调用处理数据库的操作,javabean中有专门处理数据库的操作,数据库主要以DA ...
随机推荐
- 基于Django框架 CRM的增删改查
思路: 创建表------从数据库读出数据展示出来------配置路由-----写视图函数------写对应页面 练习点: 数据库建表 ORM 数据库数据读取 数据 ModelForm (form组 ...
- Keep It Simple
The KISS principle, or Keep It Simple, Stupid, spans many trades, industries, and professions. The m ...
- 究竟什么是Windows句柄
图解说明——究竟什么是Windows句柄 这里需要说明: 1.这里将句柄所能标识的所有东西(如窗口.文件.画笔等)统称为“对象”. 2.图中一个小横框表示一定大小的内存区域,并不代表一个字节, ...
- Java面试题 equals()与"=="的区别?
面试官:请问 equals() 和 "==" 有什么区别? 应聘者: equals()方法用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object ...
- Docker笔记(二):Docker管理的对象
原文地址:http://blog.jboost.cn/2019/07/14/docker-2.html 在Docker笔记(一):什么是Docker中,我们提到了Docker管理的对象包含镜像.容器. ...
- c++学习书籍推荐《C++ Primer(中文版)(第5版)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <C++ Primer(中文版)(第5版)>编辑推荐:一书在手,架构无忧:三十位一线架构师真知实践:百位架构师献计献策:十万文字尽显架构精华. 媒 ...
- tomcat问题解决
tomcat问题解决 运行tomcat环境下,idea中出现 error running 项目名address localhost1099 is already in use 的时候,如何解决? 1, ...
- Windows下GIT的使用方法
文章引用自:Git使用教程 https://www.cnblogs.com/tugenhua0707/p/4050072.html 本文章只限用于Windows,敬请参考 注意:操作命令纯属手敲 ...
- C# 使用Quartz简单实例以及备忘
一.导入NuGet 二.创建一个类并实现接口Ijob,并实现该接口中的方法. using Buday.Gold.Cusumer.Lib; using Quartz; using System; us ...
- Socket编程(C语言实现):bind()函数英文翻译
本篇翻译的bind()函数,我参考的国外网站是: bind 朋友们可以自由转载我对英文的中文翻译,但是对于"作者注:"的描述,转载时请注明出处和作者,否则视为侵权. 下面是翻译的正 ...