一、servlet简介

  Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

二、编写servlet(我的第一个servlet)

  2.1实现Servlet接口

    2.1.1新建一个web项目

    2.1.2编写servlet    

package edu.aeon.servlet;

import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* [说明]:我的第一个servlet
* @author qq:1584875179
*
*/
public class HelloServlet implements Servlet {
@Override
public void destroy() { }
@Override
public void init(ServletConfig arg0) throws ServletException { }
/**
* 处理用户请求
*/
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
//设置浏览器端显示的编码方式
response.setContentType("text/html;charset=utf-8");
PrintWriter printWriter=response.getWriter();
printWriter.println("<html>");
printWriter.println("<head>");
printWriter.println("<title>");
printWriter.println("我的第一个servlet");
printWriter.println("</title>");
printWriter.println("</head>");
printWriter.println("<body>");
printWriter.println("<h1>我的第一个servlet:hello servlet!</h1>");
printWriter.println("</body>");
printWriter.println("</html>");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
}

    2.1.3在web.xml中配置servlet  

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>helloservlet</display-name>
<!-- servlet配置[start] -->
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>edu.aeon.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<!-- servlet配置[/end] -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

   2.1.4访问servlet

    通过url:http://localhost:8080/helloservlet/hello 访问、其访问结果如下:

      

  2.2继承自GenericServlet类

  2.3继承自HttpSerlvet类

三、模拟一个服务端展示集合数据的servlet

  3.1编写实体类  

package edu.aeon.entity;

/**
* [说明]:用户实体类
* @author qq:1584875179
*
*/
public class User {
private String userName;
private String userSex;
private Integer userAge;
private String userPhone;
public User() {
}
public User(String userName, String userSex, Integer userAge, String userPhone) {
super();
this.userName = userName;
this.userSex = userSex;
this.userAge = userAge;
this.userPhone = userPhone;
} public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
public Integer getUserAge() {
return userAge;
}
public void setUserAge(Integer userAge) {
this.userAge = userAge;
}
public String getUserPhone() {
return userPhone;
}
public void setUserPhone(String userPhone) {
this.userPhone = userPhone;
}
}

  3.2编写servlet类(还是通过实现Servlet接口的方式)

  

package edu.aeon.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List; import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; import edu.aeon.entity.User;
/**
* [说明]:模拟服务器端数据展示的servlet
* @author qq:1584875179
*
*/
public class DataServlet implements Servlet {
@Override
public void destroy() { }
@Override
public void init(ServletConfig arg0) throws ServletException { }
/**
* 处理用户请求
*/
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
//准备数据(也可认为这些数据是来自数据库)
List<User> userList=new ArrayList<User>();
userList.add(new User("aeon1", "男", 21, "1584875171"));
userList.add(new User("aeon2", "女", 22, "1584875172"));
userList.add(new User("aeon3", "男", 23, "1584875173"));
userList.add(new User("aeon4", "女", 24, "1584875174"));
userList.add(new User("aeon5", "男", 25, "1584875175"));
//设置浏览器端显示的编码方式
response.setContentType("text/html;charset=utf-8");
PrintWriter printWriter=response.getWriter();
printWriter.println("<html>");
printWriter.println("<head>");
printWriter.println("<title>");
printWriter.println("模拟服务器端数据展示");
printWriter.println("</title>");
printWriter.println("</head>");
printWriter.println("<body>");
printWriter.println("<table border='1' align='center' width='60%'>");
printWriter.println("<tr>");
printWriter.println("<th>");
printWriter.println("用户名");
printWriter.println("</th>");
printWriter.println("<th>");
printWriter.println("用户性别");
printWriter.println("</th>");
printWriter.println("<th>");
printWriter.println("用户年龄");
printWriter.println("</th>");
printWriter.println("<th>");
printWriter.println("电话号码");
printWriter.println("</th>");
printWriter.println("</tr>");
for(int i=0;i<userList.size();i++){
printWriter.println("<tr>");
printWriter.println("<td>");
printWriter.println(userList.get(i).getUserName());
printWriter.println("</td>");
printWriter.println("<td>");
printWriter.println(userList.get(i).getUserSex());
printWriter.println("</td>");
printWriter.println("<td>");
printWriter.println(userList.get(i).getUserAge());
printWriter.println("</td>");
printWriter.println("<td>");
printWriter.println(userList.get(i).getUserPhone());
printWriter.println("</td>");
printWriter.println("</tr>");
}
printWriter.println("</table>");
printWriter.println("</body>");
printWriter.println("</html>");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
}

  3.3在web.xml文件中配置servlet

  

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>data</display-name>
<servlet>
<servlet-name>dataservlet</servlet-name>
<servlet-class>edu.aeon.servlet.DataServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dataservlet</servlet-name>
<url-pattern>/dataServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

  3.4访问

  http://localhost:8080/data/dataServlet、其访问结果如下:

   

四、servlet处理流程简图

  

  用户发起一个请求后,由服务器接受处理,根据web.xml文件中的配置信息,查找所有请求的资源是否存在,如果不存在则返回处理结果(404)。当找到资源后(相应的servlet),检查该servlet对象是否存在,如果不存在则创建该对象,如果存在,则执行相应的处理方法。处理方法执行以后将返回处理结果给web服务器,web服务器根据结果进行相关处理后,返回给浏览器。浏览器显示相应的处理结果。

五、servlet生命周期

  

  

六、servlet类的实例化时机
  6.1配置了容器启动时调用(容器启动时就会实例化);
    <load-on-startup>0</load-on-startup> //配置一个大于等于0的数,该数字越小启动时调用的优先级最高。

  6.2当请求时,该servlet不存在时会再次进行实例化。

七、HttpServletResponse对象
  7.1 HttpServletResponse对象的产生:
    当服务器接受到请求后会产生两个对象:请求对象,响应对象,并且将这两个对象给Servlet.
  7.2 响应数据:
    getOutputStream():字节流数据
    getWriter():字符流数据
    getOutputStream()和getWriter互斥、不共戴天
    原因:当调用getOutputStream或getWriter后,服务器接受后会将数据进行处理。处理完成后会检查流对象是否关闭,如果没有关闭,服务器会自动关闭。
    setContentType("text/html;charset=utf-8"):指定响应的客户端内容的类型及编码方式,如果不指定则默认为iso-8859-1

  

sxt_(008_011)_servlet的更多相关文章

  1. _web基础_servlet基础

    一.了解Servlet的概念 Servlet定义:Servlet是基于Java技术的Web组件,由容器管理并产生动态的内容.Servlet引擎作为WEB服务器的扩展提供支持Servlet的功能.Ser ...

  2. JavaWeb学习总结_Servlet开发

    一. Servlet简介 二.Servlet的运行过程 Servlet程序是由Web服务器调用,web服务器收到客户端的Servlet访问请求后: WEB服务器首先检查是否已经装载并创建了该Servl ...

  3. SXT_项目

    30. svn服务器运行方式: svnserve:自己做实验的时候用. svn&apache结合起来用.[常用的] 29. EXTJs not Jquery[根据项目组需求] 28. tags ...

  4. Java_Web _Servlet生命周期实验

    第一次加载这个servlet程序时(选择右边的servlet程序,注意servlet程序没有main函数,因此执行的是run as servlet Application ),同时执行init()方法 ...

  5. 第一章_servlet

    [Servlet与Jsp学习指南] *学习这servlet前.需要下载servlet-api.jar,MyEclipse给自己带来的需求javaEE3.0的天赋足以使用注解获得的版本号servlet ...

  6. 我的学习之路_第三十章_servlet

    servlet:小服务程序 servlet是JavaWeb体系中的三大核心(servlet/Filter/Listener)之一,而且是最主要的那个. 作用:接受请求,处理请求,做出响应 继承体系:s ...

  7. Java精选笔记_Servlet事件监听器

    Servlet事件监听器 概述 在程序开发中,经常需要对某些事件进行监听,如监听鼠标点击事件.监听键盘按下事件等,此时就需要使用事件监听器. 事件监听器用于对程序中发生的事件进行监听,在监听的过程中会 ...

  8. Java精选笔记_Servlet技术

    Servlet技术 Servlet开发入门 Servlet接口 针对Servlet技术的开发,SUN公司提供了一系列接口和类,其中最重要的是javax.servlet.Servlet接口. Servl ...

  9. javaweb基础(22)_Servlet+JSP+JavaBean实战登陆

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  10. javaweb基础(9)_Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:

随机推荐

  1. C++_关键字explicit

    首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数 ...

  2. 浏览界面servlet实现

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  3. 【KAWAKO】speechmetrics-语音方面评价指标库的安装与使用

    目录 简介 安装 将工程以压缩包形式下载到本地 把压缩包传到服务器(你想部署的地方)上进行解压 用编辑器打开setup.py进行修改 在工程目录下进行安装 测试 简介 speechmetrics库提供 ...

  4. JZOJ 2020.07.30【NOIP提高组】模拟

    总结 本场比赛很不负责对待 暴力都没怎么打 一个半小时后才开始打题 很悲剧的只有 \(23+11+36=70\) 分 \(T1\) 4300. 装饰大楼 题目 略 思路 很无聊的找规律题 考场弃疗 \ ...

  5. JZOJ 3184. 【GDOI2013模拟7】最大异或和

    最大异或和 可持久化字典树经典题 题目网上自己找 来波模板 \(Code\) #include<cstdio> #include<iostream> using namespa ...

  6. [IOI2013]robots 机器人

    题目传送门 思路 简单题,设函数 \(f_i\) 表示当时间为 \(i\) 时是否能够收拾好所有玩具,则 \(f_i\) 显然是单调的. 所以我们可以考虑二分. 设我们当前二分到 \(x\),我们先把 ...

  7. .net core Ubuntu下docker部署(精简版)

    一.首先先添加一个.netCore 项目,选择启用docker(我用的是vs2019,之前的可能需要手动点击项目添加docker支持) 没有的话需要手动添加 之后你的项目会存在这个dockerfile ...

  8. ViT简述【Transformer】

    目录 结构概述 图像切patch Patch0 Position Embedding Multi-Head Attention 代码[Pytorch] Transformer在NLP任务中表现很好,但 ...

  9. sqlite3数据库Linux 系统移植和使用

    sqlite3数据库是一个小型的数据库,当数据量不大,要求不是特别高的时候,是个不错的选择. 在Linux上移植和使用也非常的方便. 本示例是在硬件全志r528 .linux5.4 上验证的. 移植操 ...

  10. 自己动手从零写桌面操作系统GrapeOS系列教程——6.电脑启动过程介绍

    学习操作系统原理最好的方法是自己写一个简单的操作系统. 按一下电脑上的电源按钮,电脑就启动了,不一会儿电脑屏幕上就出现了登录界面或直接进入了桌面. 这是一个很日常的场景,但有时候会有个疑问:电脑内部是 ...