首页 > 其他分享 >day31 1 tomcat介绍与创建web项目 & 2 继承HttpServlet类、配置webxml全局配置文件 & 3 servlet生命周期 & 4 请求对象HttpServletReques

day31 1 tomcat介绍与创建web项目 & 2 继承HttpServlet类、配置webxml全局配置文件 & 3 servlet生命周期 & 4 请求对象HttpServletReques

时间:2022-11-15 09:02:28浏览次数:42  
标签:HttpServletRequest web 请求 配置文件 Servlet req out servlet 客户端

Servlet

Java Servlet是运行在Web服务器或应用服务器上的程序,作为客户端(Web浏览器或其他HTTP客户端)和服务端(HTTP服务器上的数据库或应用程序)之间的中间层。
使用Servlet可以接收来自网页表单的用户输入数据,呈现(返回给客户端)来自数据库或其他源的数据,还可以动态创建网页image

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 运行两次得到下图,说明单例
image

继承关系

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();
}

标签:HttpServletRequest,web,请求,配置文件,Servlet,req,out,servlet,客户端
From: https://www.cnblogs.com/xiaoto9426/p/16890119.html

相关文章

  • Web开发前奏
    目录浅谈项目开发企业的web项目类型企业项目开发流程项目来源流程开发模式浅谈项目开发企业的web项目类型1.商城(某某团购)1.1B2C直销商城商家与会员直接交......
  • 【Javaweb】了解link标签
    link标签的属性标签就是定义文档和外部的关系,常见用途是链接样式表。通常指存在于head部分。规定被连接文档的位置<linkrel='stylesheet'href='./ease.css'type='t......
  • CTFSHOW-web入门-web1-6
    此题直接按F12查看源码即可获得flag ------------------------------------------------------------------------------------------------------------------------......
  • using GitHub repos & Vercel auto deploy Next.js SSR/SSG website All In One
    usingGitHubrepos&VercelautodeployNext.jsSSR/SSGwebsiteAllInOne使用GitHubrepos和Vercel自动部署Next.jsSSR/SSG网站AllInOnevercelhttps:/......
  • spring-boot-starter-webflux
    webflux:反应式编程reactor的产物,采用发布订阅模式,引入netty的nio,比较适合IO密集型应用。因普遍应用使用的DB链接是IO阻塞型,因此在一般应用中无法体现它的优势。redis和m......
  • 踩坑JSTL标签库:/WEB-INF/jsp/fore/home.jsp (行.: [3], 列: [0]) 无法在web.xml或使用
    Tomcat9及之前使用到的JSTL库:https://files-cdn.cnblogs.com/files/zhangzhixi/jstl.zip最近心血来潮想复习一下JavaWEB,调试JSTL标签的时候出现了一些错误,如标题所示。先......
  • WebGIS数据可视化
    一、什么是GIS   GIS,全称geographicinformationsystem,地理信息系统,是对空间数据进行相关处理的一门学科,一种技术。   最常见的WebGIS应用就是互联网地图网站了,......
  • fluentd 配置文件中label的作用是什么?
    在正常的情况下,在fluentd的配置文件中,是像下面这样进行配置的: <source>@typehttpport8888bind0.0.0.0</source><filtertest.cycle>@typegrep<......
  • Nginx基础配置及构建web虚拟主机
    一,Nginx服务的主配置文件nginx.confvim/usr/local/nginx/conf/nginx.conf1.全局配置#usernobody; #运行用户,若编译时未指定则默认为nobodyworker_processes1......
  • B0::CTF小白热身赛round1 web writeup(部分)
    writeup仅代表个人理解,面向0基础小白,如有疏漏,敬请指正WEB你会百度吗(......