Servlet通俗理解:主要功能在于交互式地浏览和生成数据,生成动态Web内容。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器

(以下学习总结参考自http://how2j.cn/k/servlet/servlet-eclipse/558.html#nowhere

一、servlet简单开发:

1.首先应建立一个Java web项目,并且导入要用到的servlet-api.jar包
2.编写一个Java类,继承HttpServlet,在这个类中实现doGet或doPost方法
3.配置web.xml,提供路径与servlet的映射关系,并把某个url请求路径映射到这个类上

<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>

二、Servlet获取参数(演示servlet如何获取从浏览器提交的账号密码

1.创建login.html

(1)提交表单(form元素),action="login"会提交到login路径,然后这个路径会在web.xml中映射到对应的servlet中
(2)method="post" (有post和get提交方法)

<form action="login" method="post">
账号: <input type="text" name="name"> <br>
密码: <input type="password" name="password"> <br>
<input type="submit" value="登录">
</form>

2.创建LoginServlet

(1)提供一个form表单对应的提交方法post doPost
(2)方法中,通过request.getParameter 根据name取出对应的账号和密码

public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取提交的数据
String name = request.getParameter("name");
String password = request.getParameter("password");
//把信息输出到控制台
System.out.println("name:" + name);
System.out.println("password:" + password);
}
}

3.配置web.xml

<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>

此时启动tomcat访问http://localhost:8080/项目名/login.html,填入账号和密码,然后提交,就可以在控制台输出账号和密码

 三、Servlet调用流程

/login路径->找到对应的servlet->实例化servlet对象->调用doGet或doPost->request获取参数->response设置响应->tomcat把html传递给浏览器

四、中文问题
1.获取中文参数
  在html中加上<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 意思是告诉浏览器,等下发消息给服务器的是时候,使用UTF-8编码
2.返回中文响应
  在servlet中加上response.setContentType("text/html; charset=UTF-8");

五、生命周期
实例化->初始化->提供服务->销毁->被回收

  • 当用户通过浏览器输入一个路径,这个路径对应的servlet被调用的时候,该Servlet就会被实例化
  • init 方法是一个实例方法,所以会在构造方法执行后执行。无论访问了多少次LoginSerlvet,init初始化 只会执行一次
  • 接下来就是执行service()方法,然后通过浏览器传递过来的信息进行判断,是调用doGet()还是doPost()方法
  • 销毁(重启服务器 或有类发生更新)
  • 当该Servlet被销毁后,就满足垃圾回收的条件了。 当下一次垃圾回收GC来临的时候,就有可能被回收

六、跳转
  1.在servlet中进行服务端跳转:request.getRequestDispatcher("跳转到的路径").forward(request, response);
  2.在servlet中进行客户端跳转:response.sendRedirect("跳转到的路径");

七、常见方法:
1.request:

  • request.getRequestURL(): 浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有)"
  • request.getRequestURI(): 浏览器发出请求的资源名部分,去掉了协议和主机名"
  • request.getQueryString(): 请求行中的参数部分,只能显示以get方式发出的参数,post方式的看不到
  • request.getRemoteAddr(): 浏览器所处于的客户机的IP地址
  • request.getRemoteHost(): 浏览器所处于的客户机的主机名
  • request.getRemotePort(): 浏览器所处于的客户机使用的网络端口
  • request.getLocalAddr(): 服务器的IP地址
  • request.getLocalName(): 服务器的主机名
  • request.getMethod(): 得到客户机请求方式一般是GET或者POST
  • request.getParameter(): 是常见的方法,用于获取单值的参数
  • request.getParameterValues(): 用于获取具有多值的参数,比如注册时候提交的 "hobits",可以是多选的。
  • request.getHeader() 获取浏览器传递过来的头信息。
  • request.getHeaderNames() 获取浏览器所有的头信息名称,根据头信息名称就能遍历出所有的头信息
  • request.getParameterMap(): 用于遍历所有的参数,并返回Map类型。
  • setAttribute和getAttribute可以用来在进行服务端跳转的时候,在不同的Servlet之间进行数据共享

2.response

  • PrintWriter pw= response.getWriter();通过response.getWriter(); 获取一个PrintWriter 对象。可以使用println(),append(),write(),format()等等方法设置返回给浏览器的html内容。 设置响应内容
  • response.setContentType("text/html");设置响应格式

     设置响应编码

  • (1)response.setContentType("text/html; charset=UTF-8");发送内容以及浏览器全都使用UTF-8
  • (2) response.setCharacterEncoding("UTF-8"); 只设置发送内容为UTF-8

八、上传文件
  form的method必须是post,并且需要加上<form action="uploadPhoto" method="post" enctype="multipart/form-data">表示提交的数据是二进制文件,然后利用IO流来在servlet中实现。

Servlet基础使用总结的更多相关文章

  1. JSP数据交互(二)和Servlet基础

    01.Application原理与应用 01.application对象的作用域范围是整个应用服务,而它在应用中所承担的责任就类似于一个全局变量.只要服务启动,则application对象就会存在. ...

  2. Servlet基础(三) Servlet的多线程同步问题

    Servlet基础(三) Servlet的多线程同步问题 Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率. 由于Servlet/JSP默认是以多线程模式执行的, ...

  3. Servlet基础(二) Servlet的生命周期

    Servlet基础(二) Servlet的生命周期 Servlet的生命周期可以分为三个阶段: 1.初始化阶段 2.响应客户请求阶段 3.终止阶段 Servlet的初始化阶段 在下列时刻Servlet ...

  4. Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解

    Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...

  5. JSP/Servlet基础语法

    相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...

  6. Servlet基础简单总结(上)

    Servlet基础一些简单总结(上): 1.Java Servlet是运行在Web服务器上的Java程序2.Java平台给Servlet开发者提供了强大的API/面向对象编程平台无关/强类型/垃圾回收 ...

  7. servlet总结:Servlet基础

    Servlet基础 1.手工编写第一个Servlet ⑴继承HttpServlet ⑵重写doGet()或者doPost()方法 ⑶在web.xml中注册Servlet 2.使用eclipse编写第一 ...

  8. servlet基础(组成与生命周期)

    servlet基础作用:servlet是运行在Web服务器或应用服务器上的程序:担当web浏览器或其他HTTP客户程序发出的请求与HTTP服务器上的数据库或应用程序之间的中间层.1.读取客户程序发送的 ...

  9. Unit01: Servlet基础 、 HTTP协议

    Unit01: Servlet基础 . HTTP协议 在页面上输出当前时间 package web; import java.io.IOException; import java.io.PrintW ...

  10. Servlet基础教程:tutorialspoint-servlet

    来自turorialspoint的Servlet基础教程(英文),官网:https://www.tutorialspoint.com/servlets/index.htm 这个教程在国内已经被翻译成中 ...

随机推荐

  1. iPhone手机越狱-逆向砸壳-代码注入

    iPhone手机越狱 逆向砸壳 代码注入 工具下载 操作越狱 安装待逆向应用(app) 使用OpenSSH连接手机 找到应用二进制文件地址 找到应用document沙盒地址 拷贝砸壳工具(dumpde ...

  2. vscode编写python,引用本地py文件出现红色波浪线

    前言 引用本地py文件出现红色波浪线,如下图: 原因 经过查询得知,vscode中的python插件默认使用的是pylint来做代码检查,因此需要对pylint做一些配置 解决方案 在setting. ...

  3. C++11随机数库

    random随机数库 C++11引入了新的随机数生成机制,那就是<random>随机数库,支持多种伪随机数生成算法,多种连续和离散随机数分布算法,以及封装了真正的随机数生成引擎random ...

  4. pytest文档59-运行未提交git的用例(pytest-picked)

    前言 我们每天写完自动化用例后都会提交到 git 仓库,随着用例的增多,为了保证仓库代码的干净,当有用例新增的时候,我们希望只运行新增的未提交 git 仓库的用例. pytest-picked 插件可 ...

  5. 【C语言程序设计】小游戏之俄罗斯方块(二)!适合初学者上手、练手!

    第二篇,主要实现俄罗斯方块中的主体部分,包括容器的数据结构以及容器的相关操作,特别是大方块和容器之间的交互逻辑,包括碰撞检测,消除检测等等. 1. 容器的表示 大方块的实现涉及到位运算,而容器同样如此 ...

  6. linux-设置hostname

    设置linux root后面的名字   

  7. .Net Core单元测试规范

    .Net Core单元测试规范 一. 前言 为了有效提升代码质量,保证DevOps的顺利进行.将全面开始采用单元测试进行覆盖,届时单元测试将完全纳入 到完整的持续构建生命周期中做为第一道质量把控的门槛 ...

  8. html的keywords标签

    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /& ...

  9. 第十九章 keepalived高可用

    一.keepalived高可用 1.什么是高可用 一般是指2台机器启动着完全相同的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用户是无感知的. 2.高可用使用的工具 1 ...

  10. 【转】Centos7系统下忘记了root管理员账号密码的解决方式

    哎,事情的起因就是脑子背了,曾经还手贱把root密码改了,导致普通账户改不回管理员账号了,然而,这次是百毒"救"了我,最终完美修改了root密码,好文章特地转载过来了,侵权删. 原 ...