Servlet

Java Servlet是运行在Web服务器或应用服务器上的程序,作为客户端(Web浏览器或其他HTTP客户端)和服务端(HTTP服务器上的数据库或应用程序)之间的中间层。

使用Servlet可以接收来自网页表单的用户输入数据,呈现(返回给客户端)来自数据库或其他源的数据,还可以动态创建网页

Servlet主要任务

1)读取客户端发送的显式(GET)数据。

2)读取客户端发送的隐式(POST)HTTP请求数据。

3)处理数据并产生结果

4)发送显式的数据(文档)到客户端

5)发送隐式的HTTP响应到客户端

Java Servlet可以使用 javax.servlet和javax.servlet.http包创建,它是java企业版(JavaEE)的标准组成部分

3 Tomcat

Tomcat是一个免费的开源的Web应用服务器,属于轻量级应用服务器,在中小型系统并发访问低的场合下被普遍使用,是开发和调试web应用程序的首选

它和IIS等web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和jsp容器,独立的Servlet容器是Tomcat的默认模式。

容器

一个容器包含完整的运行时的环境:除了应用程序本身之外,这个应用所需的全部依赖、类库、其他二进制文件、配置文件等,都统一被打入了一个称为容器镜像的包中。

通过将应用程序本身和其依赖的资源环境容器化,避免因为操作系统发行版本和其他基础环境存在差异造成的错误。

tomcat结构

eclipse配置tomcat

window=》preferences=》server=》runtime enviroments=》add=>tomcat版本=》next=》弹出窗口指定本地tomcat安装目录和运行java项目需要的jre

eclipseservlet项目配置

创建dynamic web project项目 ,右键项目名=》properties

web deployment assembly

部署项目时,设置文件发布的路径以及jar包发布的路径

Java build path

项目构建,可以指定项目编译的文件路径、引入第三方jar包等

web project settings

项目部署到服务器上的项目名

部署项目

window=》servers=》点击servers窗口内带有蓝色下划线的一行字=》对应tomcat版本=》next=》点击左侧项目后add到右侧=》finish=》右键点击刚创建的tomcat服务器,弹出的菜单点击start启动项目,stop停止项目

2servlet 创建servlet类

servlet对象是单例的

每一次请求到达服务器时,服务器(tomcat)会检查有没有目标对象(servlet对象)﹐如果没有则创建,如果有,则拿来直接使用。

由于servlet是单例的,所有的用户共享的是一个对象,所以在servlet实现类中不建议定义成员变量,在高并发情况下Servlet是线程不安全的

注意

service()方法,是执行实际业务的主要方法,由servlet容器调用service方法

作用

处理来自客户端的请求,并把格式化的响应写回给客户端

1.service()方法由容器调用;

2.service()方法会检查HTTP请求类型(GET/POST/PUT/DELETE等),然后根据请求类型的不同,掉哦给你对应的方法,如GET请求调用doGet()方法

3.综上,不需要对service进行任何修改,只需要根据客户端的请求类型来重写doGet()和doPost()方法

destroy方法



//MyServlet
import java.io.IOException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class MyServlet extends HttpServlet { @Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//service()接收来自客户端的HTTP请求,然后根据请求方式的不同,调用相对应的doGet()或者doPost()
String method = req.getMethod();
System.out.println(method); if ("get".equals(method.toLowerCase())) {
doGet(req, resp);
}else if ("post".equals(method.toLowerCase())) {
doGet(req, resp);
}
} @Override
public void init() throws ServletException {
//init()初始化方法,只会调用一次;在创建setvlet对象时调用,在后续每次用户请求时不再调用
System.out.println("-----创建servlet对象-----");
} @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//通过浏览器地址栏发送请求都是doget方法
//doget方法会接收来自客户端的get方式的HTTP请求 String name = req.getParameter("name"); System.out.println("-----doGet-----"+name);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// String name = req.getParameter("name");
System.out.println("-----dopost------"+name);
} @Override
public void destroy() {
System.out.println("销毁servlet对象");
}
}
<!-- web.xml内 -->
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>servletDemo02</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>my</servlet-name>
<servlet-class>code.servlet.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>my</servlet-name>
<url-pattern>/m</url-pattern>
</servlet-mapping>
</web-app>

浏览器窗口http://localhost:8080/servletDemo02/m 运行两次得到下图,说明单例

继承关系

Servlet生命周期

生命周期

可以被定义为servlet对象从创建到销毁的整个过程:

1)在创建servlet对象时,通过调用init()方法进行初始化

2)通过service()方法来接收客户端的请求,根据请求的方式不同转发给对应的doGet()或doPost()方法

3)停止服务时,通过调用destory()方法销毁servlet对象

4)servlet对象被JVM垃圾回收器回收

请求与响应

//获取请求方式
String m = req.getMethod();
System.out.println(m);//get or post
//设置请求编码
req.setCharacterEncoding("UTF-8");
//获取请求参数
String name = req.getParameter("name");
//获取所有请求参数名的结果集
Enumeration<String> params = req.getParameterNames();
//遍历参数名的结果集,获取所有参数值
//hasMoreElements判断参数名集合中是否有元素
while(params.hasMoreElements()){
//nextElement获取下一个元素
String key = (String)params.nextElement();
System.out.print(key+":"+req.getParameter(key));
}
//向请求对象中添加参数
//req.setAttrubute("user_list",list);

HttpServletResponse响应

//设置响应数据的编码
resp.setCharacterEncoding("gb2312");
//创建字符输出流,向客户端响应数据
printWriter out = null;
out = resp.getWriter();
out.write("success");
out.flush();
if(out == null){
out.close();
}

day31 1 tomcat介绍与创建web项目 & 2 继承HttpServlet类、配置webxml全局配置文件 & 3 servlet生命周期 & 4 请求对象HttpServletRequest与响应对象HttpServletResponse的更多相关文章

  1. Intellij IDEA 创建Web项目并在Tomcat中部署运行(不使用maven)【转载】

    原文链接:http://www.thinksaas.cn/topics/0/350/350000.html 一.创建Web项目 1.File -> New Module,进入创建项目窗口 2.选 ...

  2. Intellij IDEA 创建Web项目并在Tomcat中部署运行

      一.创建Web项目 1.File -> New Module,进入创建项目窗口 2.选择Java类型,在 Module name 处输入项目名,点击Next 3.勾选 Web Applica ...

  3. macOS Sierra Version 10.12.6 环境下Tomcat的下载与安装以及InterlliJ IDEA 2017.2 环境下配置Tomcat 与创建Web项目

    一.Tomcat的下载与安装 1.官网(http://tomcat.apache.org/)下载Tomcat 9.0 Core:zip包: 2.解压到指定的文件夹即可安装完成: 3.测试是否安装成功 ...

  4. (转)MyEclipse10下创建web项目并发布到Tomcat

    转自:http://blog.sina.com.cn/s/blog_699d3f1b01012spf.html   MyEclipse10下创建web项目并发布到Tomcat 1.软件安装(不作详细描 ...

  5. MyEclipse10下创建web项目并发布到Tomcat

    MyEclipse10下创建web项目并发布到Tomcat 1.软件安装(不作详细描述) 2.启动MyEclipse10 3.File-New-Project,选中Web Project,点击Next ...

  6. IntelliJ IDEA 学习(二):Intellij IDEA 创建Web项目并在Tomcat中部署运行IDEA

    一.创建Web项目  1.File -> New Module,进入创建项目窗口 2.选择Java类型,在 Module name 处输入项目名,点击Next 3.勾选 Web Applicat ...

  7. 3.在eclipse中创建Web项目,并部署到Tomcat上

    1.找到创建web项目的菜单 2.创建web项目并选择web环境 3.查看创建好的web项目结构 4.在web项目的webContent文件夹下创建jsp页面 5.查看是否创建jsp页面成功,并编辑j ...

  8. 7.IDEA创建Web项目和Tomcat配置

    IntelliJ IDEA Tomcat配置 详解 Tomcat 7.0 和jdk1.8 一起使用 一.创建web项目 1.1  创建工程 1.2 创建java web项目并创建web.xml文件 1 ...

  9. idea 为模块添加Tomcat依赖 解决: Intelij IDEA 创建WEB项目时没有Servlet的jar包

    解决: Intelij IDEA 创建WEB项目时没有Servlet的jar包 今天创建SpringMVC项目时 用到HttpServletRequest时, 发现项目中根本没有Servlet这个包, ...

  10. 第一章 创建WEB项目

    第一章   创建WEB项目 一.Eclipse创建WEB项目 方法/步骤1 首先,你要先打开Eclipse软件,打开后在工具栏依次点击[File]>>>[New]>>&g ...

随机推荐

  1. Java中的StringBuilder和StringBuffer适用场景

    我不知道为什么这个这么老的问题会出现在我的时间线上,看了一下回答,大多是2012,2013年的回答,照说那个年代,有些历史故事还很新鲜,却不知道为什么没有一个答案说到点子上. stringbuffer ...

  2. Kubernetes 基本概念与组件

    Kubernetes(简称 K8S) 的出现是容器化技术发展的必然结果,容器化是应用程序级别的虚拟化,运行单个内核上有多个独立的用户空间实例,这些实例就是容器:容器提供了将应用程序的代码.运行时.系统 ...

  3. MySQL 在 Kubernetes IPVS 模式下引发的 TCP 超时问题

    文章转载自:https://mp.weixin.qq.com/s/XQ2SlCYxvXPY0rRRO-CURA

  4. 6. EFK:免费的日志采集与可视化搜索套件

    收集日志是为了做进一步的分析.收集是第一步,收集到日志后还需要进行存储.索引,以便进行快速查询分析.我们还需要一个友好的查询界面,来方便用户使用日志. 本文介绍一个免费的开源软件组合,正好可以实现上述 ...

  5. (Bug修复)C#爬虫,让你不再觉得神秘

    Bug修复 https://github.com/ZhangQueque/quewaner.Crawler/issues/1 修复加载Https网址中午乱码,导致Node解析失败的问题 1.使用第三方 ...

  6. [题解] Codeforces 468 E Permanent 折半,DP,图论

    题目 建立一个二分图,左右各n个点,在左边的第x个点和右边的第y个点之间连一条权值为\(a_{x,y}\)的边.根据"积和式"的定义,我们是要在矩阵中选择n个位置,满足任意两个位置 ...

  7. jquery修改图片src

    jquery修改图片src,会重新请求此图片url,重新加载图片.方法如下: $("#<img的id>").attr("src", src_valu ...

  8. HDU2844 Coins(多重背包)

    多重背包就是每种物品有数量限制时求解最大价值. 如果一种物品数量和重量之积超过背包容量,可视为完全背包:其余情况通过二进制拆分,将几个数量的物品看成一个,转化为01背包求解. 按照这种思路代码是这样的 ...

  9. Filter 筛选器(一)之 ActionFilter-- IAsyncActionFilter 和 ActionFilterAttribute

    微软官网例子:Filter筛选器 使用场景(执行顺序): IAsyncActionFilter 使用异步actionFilter 只需要实现 他的 :OnActionExecutionAsync 方法 ...

  10. Hive Beeline 命令行参数

    [hadoop@hive ~]$ beeline --help[中文版] The Beeline CLI 支持以下命令行参数: Option Description --autoCommit=[tru ...