一、servlet简介

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

总的来说,servlet就是一个运行在服务器(tomcat)上的一段小程序,可供开发人员实现客户端的网页请求和服务器响应过程中的操作,是由服务器来创建的,我们只需要配置好后启动程序就可以了。servlet帮我们实现了tomcat识别的war包,再把小程序打成war包存在tomcat下这个过程,不需要我们再自己打war包。

二、http请求方式

要用servlet首先我们得了解服务器常用的请求方式,才能来操作他们。

在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。httpservlet类中也提供了doget()和dopost()两种方法。

  • GET - 从指定的资源请求数据。
  • POST - 向指定的资源提交要被处理的数据

get和post的区别:

三、常见请求状态

  • 200-299:本次请求已完成
  • 300-399:本次请求已完成,开始下次请求
  • 400-499:404请求错误,找不到资源,403:请求方式错误
  • 500-599:500服务崩溃,程序出现问题

四、web工程创建

大致知道原理后就来创建第一个web项目吧。

1.在eclipse中新建Dynamic Web Project项目。我这里用eclipse创建的,勾选红框处会自动创建web.xml配置文件

创建好后的项目目录如下:(注意若要手动创建web.xml要创建在WEB-INF目录下)

2.引入servlet-api.jar包,并buid path

3.创建一个类,该类需要继承HTTPServlet类,根据自己需求重写doPost()或doGet()方法

4.配置web.xml配置文件信息(我这里就最简单配了一下名字、目录还可以配置优先级<load-on-startup>等)

5.开发工具关联tomcat,我用的是eclipse

选择你自己安装的tomcat版本

给这个服务起个名字,选择你自己tomcat的安装路径

6.部署项目

五、servlet的配置加载过程

当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,我们通过ServletConfig对象就可以得到当前servlet的初始化参数信息。

例如,可以用config.getInitParameter("path");来获取当前servlet的资源路径

也可以获取全部的配置信息:

1 Enumeration<String> initParameterNames = config.getInitParameterNames();
2 while (initParameterNames.hasMoreElements()) {
3 String key = initParameterNames.nextElement();
4 String values = config.getInitParameter(key);
5 System.out.println(values);
6 }

六、访问servlet

开启tomcat服务后就可以在浏览器里访问servlet啦

我这里使用的都是tomcat默认的端口号和ip

访问/hello的servlet:

http:localhost:8080/servlet-1/hello

访问test.html:

http://localhost:8080/servlet-1/test.html

七、servlet的访问过程

那么servlet访问过程是怎样的,他是怎么找到资源路径的呢?

对于http://localhost:8080/servlet-1/hello

/hello:资源路径

servlet会先去web.xml中找有没有一个<url-pattern>/hello</url-pattern>相匹配,再去找与<url-pattern>在同一级的标签下的<server-name>标签

找到servlet-name时,此时再去找与<servlet-name>同名的标签

六、常用api

HttpServletRequest获取参数:

  • getParameter(name):获取一个参数,参数对应前端页面中name属性的值
  • getParameterMap():key是参数的name值,value是一个String[]
  • getParameterNames():获取所有的key值,返回值是一个迭代器类型
  • getParameterValues():针对一个key对应多个值得时候使用

七、乱码问题

在请求和响应过程中若字符编码不一致就会出现乱码的问题,还有可能是浏览器默认编码,编译器编码不一致等原因,改成一致的就可以了。

修改请求和响应的编码方式一般有两种。

方法一:代码中修改

在重写的doPost(),doGet()加入下面两行代码:

request.setCharacterEncoding("UTF-8");

response.setContentType("text/html;charset=utf-8");

  

方法二:修改tomcat/server.xml

JavaWeb——servlet1的更多相关文章

  1. JavaWeb(四)Servlet-1

    1.Servlet 简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中.Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet ...

  2. JavaWeb——Servlet

    一.基本概念 Servlet是运行在Web服务器上的小程序,通过http协议和客户端进行交互. 这里的客户端一般为浏览器,发送http请求(request)给服务器(如Tomcat).服务器接收到请求 ...

  3. 传智播客JavaWeb听课总结

    一. JavaWeb基础 第一天: 1.Eclipse详解: (1).Bad versionnumber in .class file:编译器版本和运行(JRE)版本不符合.高的JRE版本兼容低版本的 ...

  4. JavaWeb学习总结-04 Servlet 学习和使用

    一 Servlet 1 Servlet概念 Servlet时运行在服务器端的Java程序. Servlet的框架核心是 javax.servlet.Servlet 接口. 所有自定义的Servlet都 ...

  5. 传智博客(JavaWeb方面的所有知识)听课记录(经典)

    一.       JavaWeb基础 第一天: 1.Eclipse详解: (1).Bad versionnumber in .class file:编译器版本和运行(JRE)版本不符合.高的JRE版本 ...

  6. javaweb笔记全套

    Lesson 1 一.eclipse工具的使用 1. java代码的位置 1) 选择工作空间 workspace  选择一个文件夹存放程序(代码) 不要用中文和空格 2) 新建一个java 工程(Pr ...

  7. javaweb笔记分享

    Lesson 1 一.eclipse工具的使用 1. java代码的位置 1) 选择工作空间 workspace  选择一个文件夹存放程序(代码) 不要用中文和空格 2) 新建一个java 工程(Pr ...

  8. 超全面的JavaWeb笔记day10<Response&Request&路径&编码>

    1.Response 2.Request 3.路径 4.编码 请求响应流程图 response 1.response概述 response是Servlet.service方法的一个参数,类型为java ...

  9. Javaweb经典三层架构的演变

    1.Javaweb经历了三个时期 ①JSP Model1第一代 JSP Model1是JavaWeb早期的模型,它适合小型Web项目,开发成本低!Model1第一代时期,服务器端只有JSP页面,所有的 ...

随机推荐

  1. linux搭建tomcat集群+nginx

    安装JDK 一.官方下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下 ...

  2. python编程基础之简单购物车

    #good文件夹内容[ ['Iphone7', 5800], ['Coffee', 30], ['疙瘩汤', 10], ['Python Book', 99], ['Bike', 199], ['Vi ...

  3. Java Split()方法按点(.)切分注意细节

    按点(.)切分,必须要注意转义!如:split("\\."). 例子: public class Test { public static void main(String[] a ...

  4. winsows CMD及Linux命令大全 欢迎补充

    CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统版本) CMD命令锦集 1. gpedit.msc-----组策略 2. sndrec32--- ...

  5. 原生JS实现图片循环切换

    <!-- <!DOCTYPE html> <html> <head> <title>原生JS实现图片循环切换 —— 方法一</title&g ...

  6. 快速排序的python实现

    def quick_sort(array, left, right): if left < right: base_index = division(array, left, right) qu ...

  7. 二、冯式结构与哈佛结构及ARM处理器状态和处理器模式

    2.1 冯式结构与哈佛结构 2.1.1 两者的区别 如果是独立的存储架构和信号通道那就是哈佛结构,否则就是冯式结构 结构与是否统一编址没有关系,也与 CPU 没有关系,与计算机的整体设计有关 CACH ...

  8. [php代码审计] apache 后缀名解析“漏洞”

    不能说是漏洞,只是 apache 特性而已. 下面是apache  httpd.conf中截取的一段: <IfModule mime_module> # # TypesConfig poi ...

  9. Java类加载器初识

    类加载器基本概念 类加载器(class loader)用来加载 Java 类到 Java 虚拟机中.一般来说,Java虚拟机使用Java类的方式如下:Java 源程序(.java 文件)在经过 Jav ...

  10. 19.go语言基础学习(下)——2019年12月16日

    2019年12月16日16:57:04 5.接口 2019年11月01日15:56:09 5.1 duck typing 1. 2. 接口 3.介绍 Go 语言的接口设计是非侵入式的,接口编写者无须知 ...