文档章节

java servlet概要

klink
 klink
发布于 2014/06/11 15:56
字数 535
阅读 87
收藏 0

Servlet API

java Servlet有两个包,javax.servlet和javax.servlet.http。

  • javax.servlet包不是通过特定协议实现的,它是更加通用的servlet。
  • javax.servlet.http是javax.servlet基于http协议实现的版本。

java Servlet不同于我们写的普通程序,它没有main()方法。因此它必须要借助http server来执行。当客户端向服务器发送请求时,服务器就会把请求分发给servlet,servlet会根据请求的不同来处理它。

  • 对于GenericServlet,服务器会调用该类的service()方法来处理请求,因此我们可以override service()方法来实现想要的逻辑。
    • service()有两个参数,一个参数是request object, 另一个参数是response object。第一个参数记录了客户端请求的详细信息,第二个参数是向客户端返回的响应信息。

图中给出了GenericServlet处理请求的过程:

  • 对于HttpServlet,HttpServlet基于HTTP协议将service()分成了不同的模块,get, post等,因此我们不会直接override service()而是override doGet(),doPost(),doXXXX()等方法。

下图给出了HttpServlet处理请求的过程:

除了 GenericServlet和HttpServlet之外,还有一些辅助的类。如:

  • ServletRequest 和 ServletResponse提供了一般的请求和响应信息。
  • HttpServletRequest 和 HttpServletResponse提供了Http的请求和响应信息。

Servlet Example

创建Web工程

使用Maven创建Web工程 http://my.oschina.net/klink/blog/269718

编写Servlet代码

在编写之前,我们需要将Servlet的包引入到工程中来。在POM.XML中添加下面的依赖。

<dependency>
	<groupId>org.apache.geronimo.specs</groupId>
	<artifactId>geronimo-servlet_2.4_spec</artifactId>
	<version>1.1.1</version>
	<scope>provided</scope>
</dependency>

创建Class HelloWorld,并编写下面的代码。

package io.github.klink.web;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {

  public void doGet(HttpServletRequest req, HttpServletResponse res)
   throws ServletException, IOException {

res.setContentType("text/html");
PrintWriter out = res.getWriter();

out.println("<HTML>");
out.println("<HEAD><TITLE>Hello World</TITLE></HEAD>");
out.println("<BODY>");
out.println("<BIG>Hello World</BIG>");
out.println("</BODY></HTML>");
  }
}

将下面的配置信息写入到WEB-INF/web.xml中。

  <servlet>
    <servlet-name>
        hi
    </servlet-name>
    <servlet-class>
        io.github.klink.web.HelloWorld
    </servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>
        hi
    </servlet-name>
    <url-pattern>
        /hello.html
    </url-pattern>
</servlet-mapping>

使用mvn运行,mvn install。将Web工程编译并打包成war文件。然后将war文件上传到tomcat中,最后输入

http://localhost:8080/SimpleWebApp/hello.html

输出结果为:

Hello World

© 著作权归作者所有

共有 人打赏支持
klink
粉丝 0
博文 24
码字总数 29450
作品 0
苏州
私信 提问
Java EE部分核心技术简介

EJB — JavaEE的基石: 1、 EJB (Enterprise JavaBeans) : 一个Java服务器端组件开发的规范,定义了一个用来开发面向对象分布式应用组件的标准方法,软件厂商根据它来实现EJB服务器。 Java...

顶层设计
2012/08/03
0
0
【J2EE】之常用的接口和协议

前言 初接触J2EE,会遇到很多之前没有遇到过的术语,下面我们来简单地汇总一下这些接口和协议吧。 各大接口和协议详解 JDBC 1.定义:Java数据库连接 2.地位:用于Java应用程序连接数据库的标...

m18633778874
04/26
0
0
Name xxx is not bound in this Context 总结

查询了JNDI的相关资料和帖子之后得出结论,原来在使用有资源引用的J2EE程序时,context lookup的时候要加上环境上下文 即加上java:comp/env/ 例如: datasource = (DataSource) new InitialCont...

郑鱼
2014/02/21
0
0
六、JSP的由来以及与Servlet的关系

JavaWeb在有了Servlet这项技术以后,就可以编写动态网页了。在动态网页中,一般来说样式是不变的,变化的是数据。如果程序员在Servlet类中写了大量的静态代码,例如out.println("<html>");这...

Wakeeee_
07/09
0
0
JavaEE的核心API与组件

JAVAEE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,下面对JAVAEE中的13种技术规范进行简单的描述(限于篇幅,这里只进行简单的...

明理萝
08/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kubernetes里的secret最基本的用法

Secret解决了密码、token、密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中。 Secret可以以Volume或者环境变量的方式使用。 使用如下命令...

JerryWang_SAP
昨天
1
0
可重入锁和非可重入锁

广义上的可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁(前提得是同一个对象或者class),这样的锁就叫做可重入锁。 可重入锁: ReentrantLoc...

狼王黄师傅
昨天
1
0
2018-11-20学习笔记

1. python数据类型: 给变量赋值什么样的值,变量就是什么样的类型 给变量赋值整数,变量就是整数类型 给变量赋值字符串,变量就是字符串类型 123 和“123”一样吗? 在python中 单引号 与双...

laoba
昨天
1
0
使用 React 和 Vue 创建相同的应用,他们有什么差异?

在工作中应用 Vue 之后,我对它有了相当深刻的理解。 不过,俗话说「外国的月亮比较圆」,我好奇「外国的」 React 是怎么样的。 我阅读了 React 文档并观看了一些教程视频,虽然它们很棒,但...

阿K1225
昨天
2
0
2天闭门培训|以太坊智能合约从入门到实战(北京)

2天培训 16个课时 探寻技术原理,精通以太坊智能合约开发 以太坊智能合约是现在应用的最广泛的区块链应用开发方式,HiBlock区块链社区针对以太坊智能合约的学习特别推出2天闭门研修班,通过2...

HiBlock
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部