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 ...
随机推荐
- SpringBoot系列——CORS(跨源资源共享)
前言 出于安全原因,浏览器禁止ajax调用当前源之外的资源(同源策略),我们之前也有写个几种跨域的简单实现(还在问跨域?本文记录js跨域的多种实现实例),本文主要详细介绍CORS,跨源资源共享,以及如 ...
- 关于Keepalive的那些事
服务端很多同学包括自己对keepalive理解不清晰,经常搞不清楚,TCP也有keepalive,HTTP也有keepalive,高可用也叫keepalive,经常混淆这几个概念.做下这几个概念的简述 ...
- JavaScript捕获与冒泡与委托
事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件. 相反的,事件冒泡是自下而上的去触发事件. 并不是所有的事件都能冒泡,以下事件不冒泡:blur.focus.load.un ...
- .NET Core CSharp初级篇 1-1
.NET Core CSharp初级篇 1-1 本节内容是对于C#基础类型的存储方式以及C#基础类型的理论介绍 基础数据类型介绍 例如以下这句话:"张三是一名程序员,今年15岁重50.3kg ...
- Bzoj 3624: [Apio2008]免费道路 (贪心+生成树)
Sample Input 5 7 2 1 3 0 4 5 1 3 2 0 5 3 1 4 3 0 1 2 1 4 2 1 Sample Output 3 2 0 4 3 0 5 3 1 1 2 1 这 ...
- 调用scanf函数的一个陷阱
我们在写C程序时,经常使用scanf函数,让用户输入数据,可是有时候会出现一些很奇怪的问题.例如,下面的程序是一个简单的四则运算: #include <stdio.h> int main( ...
- 关于下载安装Photoshop CS6遇到的一些问题
关于安装Photoshop CS6顺带安装AdobeBridge CS6和Aobe Extension Manager CS6的问题 Bridge是PS的一款插件,它能兼容大多数AODBE公司的软件, ...
- 【拓扑排序】排队-C++
描述 今天,学校老师让同学们排成一队,准备带大家出去玩,一共有 n 名同学,排队的时候同学们向老师提了 m 条要求,每一条要求是说同学 x 一定要排在同学 y 之前,老师现在想找到一种排队方式可以满足 ...
- 整型,布尔值,字符串详解,for语句 练习
2019 年 7 月 8 日 1.将今天的课上的代码敲一遍,然后整理笔记 已完成 2.有变量name = "aleX leNb" 完成如下操作: 移除 name 变量对应的值两边的 ...
- findBugs英文代号的对照表
findBugs错误英文翻译rule.findbugs.IMSE_DONT_CATCH_IMSE.name=不良实践 - 捕获可疑IllegalMonitorStateException rule.f ...