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类,如下:
随机推荐
- Servlet HTTP Request Response笔记
# 今日内容: 1. Servlet 2. HTTP协议 3. Request## Servlet: 1. 概念 2. 步骤 3. 执行原理 4. 生命周期 ...
- C++ 练习7 引用作为函数返回值
当引用作为函数的返回值时,可以直接将其当作赋值语句的左值使用 如:函数refValue(int& x)可以像 a=10 中的"a"来使用 1 #include <io ...
- 快速上手vue前端存储库、全局状态管理工具pinia
pinia是什么,为什么我们要使用pinia? pinia是vue全局状态管理工具,类似vueX,用于全局的数据状态存储.修改变更等等 相较于vueX,pinia的使用较为简单,轻量级,上手容易,干掉 ...
- CF1736C1 Good Subarrays (Easy Version)
题目传送门 思路 给出一种不需要脑子的做法. 首先我们把每个 \(a_i\) 都减去 \(i\),这样原问题就转化为对于每一个左端点 \(i\),寻找一段连续的区间,使得这段区间的最小值加上 \(i- ...
- Linux 下安装Nginx两种方法- yum安装 and Centos7下yum安装配置nginx与php
转载csdn: Linux 下安装Nginx两种方法- yum安装_在电脑前深思的博客-CSDN博客 Linux安装Nginx(两种方式)_HHRunning的博客-CSDN博客_linux 是否安装 ...
- EMBARK研究: 依那西普治疗早期nr-axSpA达48周的临床和MRI疗效
关键词: 放射学阴性中轴型SpA; TNF拮抗剂; 磁共振影像 EMBARK研究48周结果: 依那西普治疗早期放射学阴性中轴型SpA患者的临床与MRI疗效 电邮发布日期:2016年1月25日 文献: ...
- CSS:linear-gradient()背景颜色渐变
css语法 background: linear-gradient(direction,color-stop1,color-stop2,...); direction:用角度值指定渐变的方向(或角度) ...
- 通过post请求添加员工信息到数据库
HMTL部分 js部分
- Qt中的多窗体编程(续一)
在前面一节中,已经把所有需要的窗体都创建好了,下面将依次实现预设的功能. 一.实现点击菜单打开模式子窗体的功能. 1.在编辑模式下双击Forms下的"mainWindow.ui", ...
- CF1098D 题解
题意 传送门 对于一个元素个数大于 \(1\) 的可重集,每次取出两个数 \(x,y\) 合并.若 \(x\le y\le 2x\),则称其为危险合并.重复上述操作至无法合并. 给你一个初始为空的可重 ...