Web开发基础_Servlet学习_0004_Servlet开发相关

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Coder_Boy_/article/details/82290259

HTTP协议

什么是HTTP协议

  • 浏览器和服务器之间通信的规范;
  • 它规定了通信的方式以及数据格式;

通信方式

  1. 建立连接
  2. 发送请求
  3. 接收响应
  4. 关闭连接

特征是一次请求需建立一次连接,目的是降低服务器压力。

数据格式

请求数据包

  1. 请求行:基本信息
  2. 消息头:数据的描述信息
  3. 实体内容:数据

响应数据包

  1. 状态行:基本信息
  2. 消息头:数据的描述信息
  3. 实体内容:数据

对开发的要求

  1. 通信方式已经由浏览器和服务器实现;
  2. 数据的打包和传输由浏览器和服务器实现;
  3. 程序要需要通过Servlet处理请求和响应数据;
  4. 其中request处理请求数据,response处理响应数据;

注册

Servlet运行原理 

请求方式

什么是请求方式

  • 浏览器向服务器传递数据的方式
  • req.getMethod()
  • 有多种传递数据的方式,其传递数据的能力不同,解决乱码的方案也不同

GET

  • 采用路径传参,参数可见
  • 隐私性差
  • 因为路径大小有限制(2K),因此数据大小受限
  • 默认的所有请求都是GET请求(网址、超链接、提交表单)

POST

  • 采用实体内容传参,参数不可见
  • 隐私性好
  • 实体内容专门用来传参,大小不受限制

使用场景

  • 向服务器索取(查询)数据时通常用GET
  • 向服务器提交(保存)数据时通常用POST

案例演示:

工程案例目录结构

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.study</groupId>
  <artifactId>Servlet01_v2</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <dependencies>
  	<dependency>
  		<groupId>javaee</groupId>
  		<artifactId>javaee-api</artifactId>
  		<version>5</version>
  	</dependency>
  </dependencies>
</project>

web.xml:

<?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_2_5.xsd" version="2.5">
  <display-name>Servlet01</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 1.注册别名:给这个类取一个别名,
  		该别名只能在此文件中使用,与注册访问路径中对应 -->
  <servlet>
  	<servlet-name>time</servlet-name>
  	<servlet-class>web.TimeServlet</servlet-class>
  </servlet>
  
  <!-- 2.注册访问路径:根据别名给这个类
  		取一个网名,用于在网络上访问 -->
  <servlet-mapping>
  	<servlet-name>time</servlet-name>
  	<url-pattern>/tt</url-pattern>
  </servlet-mapping>
</web-app>

TimeServlet.java

package web;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TimeServlet extends HttpServlet{

	@Override
	protected void service(HttpServletRequest req,
			HttpServletResponse res) throws ServletException, IOException {
		
		//1.获取请求数据
		//1.1请求行
		System.out.println("协议类型:"+req.getProtocol());
		System.out.println("请求方式:"+req.getMethod());
		System.out.println("Servlet路径:"+req.getServletPath());
		
		//1.2消息头(key-value)
		//getHeaderNames()返回所以key的迭代器,
		//Enumeration是比Iterator更古老的迭代器
		Enumeration e = req.getHeaderNames();
		while(e.hasMoreElements()){
			String key = e.nextElement().toString();
			String value = req.getHeader(key);
			System.out.println(key+":"+value);
		}
		
		//1.3实体内容
		//由于本案例没有给服务器传递业务数据,
		//因此实体内容为空,后面再演示
		
		//2.输出响应数据
		//2.1状态行:由服务器自动写。
//		 res.setContentType("application/json;charset=utf-8");//指定返回的格式为JSON格式
//		 res.setCharacterEncoding("UTF-8");//setContentType与setCharacterEncoding的顺序不能调换,否则还是无法解决中文乱码的问题
//		 String jsonStr ="{\"id\":\"123\",\"name\":\"小黎\"}";
//		 PrintWriter out =null ;
//		 out =res.getWriter() ;
//		 out.write(jsonStr);
//		 out.close();

		
//		System.out.println(res.getCharacterEncoding());// 如果未指定字符集,则将使用ISO-8859-1
		//2.2消息头
		res.setContentType("text/html");
		//2.3实体内容
		PrintWriter pw	= res.getWriter();
		//用Servlet直接拼一个完整网页太麻烦了,
		//将来有更好的办法(jsp),当jsp以Servlet
		//为基础,所以也必须掌握Servlet怎么用。
		//此处省略HTML中大部分的标签,直接写出
		//内容,浏览器有纠错能力,依然能正常显示。
		
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
		String now  = sdf.format(date);
		pw.println("<h1>"+now+"</h1>");
		pw.close();
	}

	@Override
	public void init() throws ServletException {
		System.out.println("init");
	}
	
	

}

 将Servlet01_v2工程部署到Tomcat上后,运行Tomcat启动案例工程,

浏览器录入http://localhost:8080/Servlet01_v2/tt即可:

如果没有错误,最终页面展示效果应如下图:

后台控制台输出截图:

猜你喜欢

转载自blog.csdn.net/Coder_Boy_/article/details/82290259