sxt_(008_011)_servlet
一、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的更多相关文章
- _web基础_servlet基础
一.了解Servlet的概念 Servlet定义:Servlet是基于Java技术的Web组件,由容器管理并产生动态的内容.Servlet引擎作为WEB服务器的扩展提供支持Servlet的功能.Ser ...
- JavaWeb学习总结_Servlet开发
一. Servlet简介 二.Servlet的运行过程 Servlet程序是由Web服务器调用,web服务器收到客户端的Servlet访问请求后: WEB服务器首先检查是否已经装载并创建了该Servl ...
- SXT_项目
30. svn服务器运行方式: svnserve:自己做实验的时候用. svn&apache结合起来用.[常用的] 29. EXTJs not Jquery[根据项目组需求] 28. tags ...
- Java_Web _Servlet生命周期实验
第一次加载这个servlet程序时(选择右边的servlet程序,注意servlet程序没有main函数,因此执行的是run as servlet Application ),同时执行init()方法 ...
- 第一章_servlet
[Servlet与Jsp学习指南] *学习这servlet前.需要下载servlet-api.jar,MyEclipse给自己带来的需求javaEE3.0的天赋足以使用注解获得的版本号servlet ...
- 我的学习之路_第三十章_servlet
servlet:小服务程序 servlet是JavaWeb体系中的三大核心(servlet/Filter/Listener)之一,而且是最主要的那个. 作用:接受请求,处理请求,做出响应 继承体系:s ...
- Java精选笔记_Servlet事件监听器
Servlet事件监听器 概述 在程序开发中,经常需要对某些事件进行监听,如监听鼠标点击事件.监听键盘按下事件等,此时就需要使用事件监听器. 事件监听器用于对程序中发生的事件进行监听,在监听的过程中会 ...
- Java精选笔记_Servlet技术
Servlet技术 Servlet开发入门 Servlet接口 针对Servlet技术的开发,SUN公司提供了一系列接口和类,其中最重要的是javax.servlet.Servlet接口. Servl ...
- javaweb基础(22)_Servlet+JSP+JavaBean实战登陆
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
- javaweb基础(9)_Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:
随机推荐
- Grafana 系列文章(十五):Exemplars
Exemplars 简介 Exemplar 是用一个特定的 trace,代表在给定时间间隔内的度量.Metrics 擅长给你一个系统的综合视图,而 traces 给你一个单一请求的细粒度视图:Exem ...
- log4j 完美版配置
百度的LOG4J配置记录一下 目前无时间阅读,反正能用就行了 # priority :debug<info<warn<error #you cannot specify every ...
- 【红米note7开bl锁】快乐开锁人
背景:开发者模式已打开,绑定账号时间已经超过时间,能够连接电脑数据线没有问题,能够进入fast模式问题:无法连接上小米官方解锁软件解决:方法1:(尝试1)在小米社区看到了一个 1-手机关机 2-开启f ...
- 固定SRAM地址变量
IAR: __no_init uint8_t _downflag @0x2001FF00;
- JavaScript的闭包和作用域
作用域相关 作用域的概念: 作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性.换句话说,作用域决定了代码区块中变量和其他资源的可见性: 作用域的类型: 全局作用域: 最外层函数和在最外 ...
- JAVA 进阶第一阶段 59-69
10/10号笔记 私有与公共 用private在类中定义的成员变量 只有在这个类的内部才支持访问和编写 public 公共的 用这个定义的在任何地方都可以访问 比如public calss clock ...
- 题解 P4317 花神的数论题
并不难,但是因为各种 SB 原因调了 1145141919810min(悲 我们会发现 \(\operatorname{sum}\) 其实很小,顶多就 \(50\),这启发我们统计每个 \(\oper ...
- SQL 注入之一:Mysql 数据库(搞懂这篇就够了)
郑重声明: 本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关.倡导维护网络安全人人有责,共同维护网络文明和谐. SQ ...
- 代码随想录算法训练营day12 | leetcode 239. 滑动窗口最大值 347.前 K 个高频元素
基础知识 ArrayDeque deque = new ArrayDeque(); /* offerFirst(E e) 在数组前面添加元素,并返回是否添加成功 offerLast(E e) 在数组后 ...
- Oracle 账户【2023/2/5最新】
下载Oracle产品一般都需要登录Oracle账户才可以下载,这里提供一个账户方便大家使用,觉得有用的希望能点个小小的赞! 账号:191049742@qq.com 密码:1234qwerASDF!@# ...