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类,如下:
随机推荐
- IIS服务器SSL证书安装 (pfx文件不能直接运行时)
在证书控制台下载IIS版本证书,下载到本地的是一个压缩文件,解压后里面包含.pfx文件是证书文件,pfx_password.txt是证书文件的密码. 友情提示: 每次下载都会产生新密码,该密码仅匹配本 ...
- CMakeList汇总
cmake_minimum_required(VERSION 2.8.3) PROJECT (HELLO) #工程名 set(CMAKE_BUILD_TYPE "Debug")se ...
- 【Vue】计算属性 监听属性 组件通信 动态组件 插槽 vue-cli脚手架
目录 昨日回顾 1 计算属性 插值语法+函数 使用计算属性 计算属性重写过滤案例 2 监听属性 3 组件介绍和定义 组件之间数据隔离 4 组件通信 父子通信之父传子 父子通信之子传父 ref属性 扩展 ...
- NetCore使用ZipFile 和ZipOutputStream
一.序言 环境:NetCore 3.1 项目类型:Web 二.使用ZipFile压缩本地文件 var filePath = Directory.GetCurrentDirectory() + $@&q ...
- ClickHouse使用笔记
什么是ClickHouse? ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS). 更多说明请参考官网:https://clickhouse.com/docs/zh/ ...
- JZOJ 4744.同余
\(\text{Problem}\) \(\text{Solution}\) 考虑 \(60\) 分 设 \(f_{i,j,k}\) 表示前 \(i\) 个数,模 \(j\) 同余 \(k\) 的个数 ...
- MySQL索引的基本理解
之前一致以为索引就是简单的在原表的数据上加了一些编号,让查询更加快捷.后来发现里面还有更深的知识. 索引用于快速查找具有特定列值的行.如果没有索引,MySQL 必须从第一行开始,然后通读整个表以找到相 ...
- JVM相关知识学习
JVM的垃圾回收算法是什么? 分代回收算法:然后详细阐述年轻代有哪些算法,老年代有哪些算法 垃圾收集器总结: 最初使用的是Serial + Serial Old收集垃圾,最简单,因为二者都是单线程的, ...
- Python学习方向
Python python学习方向 1.web开发 2.网络爬虫 3.人工智能 4.云计算 5.软件测试
- 2021-08-17:cocos creator 如何控制 spine 动画的进度
// 传入spine与进度比例(注意初始要把spine的TimeScale设置为0)updateSpine(spine: sp.Skeleton,rate: number) { const track ...