一、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. SpringBoot 2.x 在Tomcat8上无法运行,报无法访问错误

    非法访问:此Web应用程序实例已停止.无法加载[].为了调试以及终止导致非法访问的 这仅是我的一个Filter重写的时候没有重写他的其他两个方法,导致我在Tomcat8上不能运行,但在Tomcat9上 ...

  2. CSP-S2022 总结

    调整了下心态开考 顺序开题 看完 \(T1,T2\) 直接开打 \(T2\) 的线段树,还是比较好写的 然后思考先打 \(T1\) 呢还是拍 \(T2\),最后决定拍 \(T2\),稳一点 发现随机数 ...

  3. 免杀之:Python加载shellcode免杀

    免杀之:Python加载shellcode免杀 目录 免杀之:Python加载shellcode免杀 1 Python 加载Shellcode免杀 使用Python可以做一些加密.混淆,但使用Pyth ...

  4. 使用 UnoCSS shortcuts 简化 class

    UnoCSS 确实简化了不少样式书写.也降低了 CSS 打包体积,提升了样式使用率.但样式太多的话,class 也写得多,比较费眼.所幸,UnoCSS 提供了 shortcuts 来简化 class, ...

  5. Prettier 在 Vite 项目下格式化报错

    Prettier 配置文件有很多种格式,有.json..js..yml等.因为 Vite 默认项目用的模块机制是 ES6,我的配置文件又正好是.js,且用的模块机制是 CommonJS.所以就是如上图 ...

  6. Postgresql实现不同用跨模式访问

    1.修改参数 2.创建两个用户 创建a1 create user a1 connection limit-1 password '123456'; alter user a1 SUPERUSER; g ...

  7. ELK 一些截图

    一.背景 集成环境中,多台服务器会存在多份日志,不方便查阅 · 二.原理 三.配置原理 Logstash是安装在服务器上的,相当于读取本地日志,然后输出到ES服务器,kibana会从ES服务器读取数据 ...

  8. EF Core迁移 (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。)

    A connection was successfully established with the server, but then an error occurred during the log ...

  9. linux常用操作指令记录

    https://maker.pro/linux/tutorial/basic-linux-commands-for-beginners ## 打开终端 ## **Ctrl+Alt+T** ## ls ...

  10. 关于winform 调用本地html页面路径不正确问题

    //为了使网页能够与winform交互 将com的可访问性设置为真 [System.Security.Permissions.PermissionSet(System.Security.Permiss ...