javaee之servlet的基础练习

本文详细介绍了Servlet中的核心概念,包括如何获取全局配置、读取文件资源、处理请求数据及解决中文乱码问题等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、首先 是得到全局的配置ServletContext对象

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//演示读取web应用配置
public class ContextDemo2 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/**
		 * 读取context-param
		 */
		//1.获取ServletContext
		ServletContext context = this.getServletContext();
		String encoding = context.getInitParameter("encoding");
		System.out.println(encoding);
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
相对的在web.xml文件中有一个参数<context-parm>中有一个name为encoding的值


二、在Servket中根据文件的路径来得到准确的数据

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

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


public class ContextFileDemo extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//读取db.properties文件
		
		//写死路径,不好!!!!!
		//File file = new File("e://xxxxx");
		
		//1.getRealPath():  获取某个文件的绝对路径
	/*	ServletContext context = this.getServletContext();
		//  /: 代表web应用的根目录(部署到tomcat后的web应用)
		//String path = context.getRealPath("/db.properties");
		String path = context.getRealPath("/WEB-INF/classes/db.properties");
		System.out.println(path);
		
		File file = new File(path);
		FileInputStream in = new FileInputStream(file);*/

		
		//2. getResourceAsStream() : 获取的某个文件的输入流
		ServletContext context = this.getServletContext();
		// 和getRealPath()的路径写法一样!!!!
		InputStream in = context.getResourceAsStream("/WEB-INF/classes/db.properties");
		
		
		Properties prop = new Properties();
		prop.load(in);//加载文件
		
		System.out.println(prop.getProperty("user"));//根据key获取value
		System.out.println(prop.getProperty("password"));
			
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
在Servlet中的文件路径是在项目的web-inf目录下的位置


三、request的一些请求方法

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//演示request对象的核心方法
public class RequestDemo1 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.请求行
		//1.1 请求方式
		System.out.println("请求方式:"+request.getMethod());
		//1.2 请求路径
		System.out.println("请求路径的uri:"+request.getRequestURI());
		System.out.println("请求路径的url:"+request.getRequestURL());
		//1.3 http版本号
		System.out.println("http协议:"+request.getProtocol());
		//1.4 get方式提交的数据
		System.out.println("get提交数据:"+request.getQueryString());
		
		//2. 请求头
		//获取某个名称的头(用的多)
		System.out.println(request.getHeader("User-Agent"));
		//获取所有的头名称
		//Enumeration enums = request.getHeaderNames();
		//获取多个同名的头
		//Enumeration enums = request.getHeaders("User-Agent");
		//获取到整数类型的头
		//int dnt = request.getIntHeader("DNT"); 
		//int dnt = Integer.parseInt(request.getHeader("DNT"))
		//获取日期类型的头
		//new Date(request.getDateHeader("date"));
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//3.获取请求正文(post提交的数据)
		InputStream in = request.getInputStream();
		BufferedReader br = new BufferedReader(new InputStreamReader(in));
		System.out.println(br.readLine());
	}

}


四、request在表单中得到数据的方法

import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//演示获取用户提交的数据
/**
 * SUN公司的request对象设计了几个通用的获取用户数据的方法:(都是字符串类型)
 * 	   *String getParameter("name"): 获取一个指定名称的值
 *     *String[] getParameterValues("name"): 获取一个指定同名的多个值(多选) 
 *     Enumeration getParameterNames(): 获取所有数据名称(只有名称)
 *     Map getParameterMap(): 获取所有数据(包含名称和值)
 * @author APPle
 *
 */
public class RequestDemo4 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.getParameter()
		String userName = request.getParameter("userName");
		System.out.println(userName);
		
		System.out.println("======");
		//2.getParameterValues()
		String[] hobby = request.getParameterValues("hobby");
		//Arrays.asList() 把数组转成集合,方便输出内容
		System.out.println(Arrays.asList(hobby));
		
		//3.getParameterNames()
		System.out.println("======");
		Enumeration enums = request.getParameterNames();
		while(enums.hasMoreElements()){
			String name = (String)enums.nextElement();
			//注意:如果遍历所有的数据,应该使用getParameterValues()获取,当做都是多个值的
			String[] value = request.getParameterValues(name);
			System.out.println(Arrays.asList(value));
		}
		
		System.out.println("======");
		//4.getParameterMap
		Map map = request.getParameterMap();
		Set<Entry> entrys = map.entrySet();
		for(Entry entry:entrys){
			String name = (String)entry.getKey();
			String[] value = (String[])entry.getValue();
			System.out.println(Arrays.asList(value));
		}
		
	}

五、关于数据的中文乱码提交问题

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 RequestDemo5 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//方式二:setCharacterEncoding():修改解码时查询的码表
		//对GET无效的,只对POST有效!!!!
		request.setCharacterEncoding("utf-8");
		
		/**
		 * request.getParameter("name"): 对用户的数据进行解码
		 */
		String userName = request.getParameter("userName");
		
		/**
		 * <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" URIEncoding="utf-8"/>
		 */
		//方式一:
		//再次对数据进行解码,按照正确码表转:
		//userName = new String(userName.getBytes("iso-8859-1"),"utf-8");
		//页面(utf-8 字符) -> 传输(utf-8 字节)-> sun解码(iso-8859-1 字符)-> 编码(is-8859-1 字节) -解码(utf-8 字符)
		
		System.out.println(userName);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

在中文的提交乱码问题中,POST提交的方式是可以通过request的setCharacterEncoding("utf-8");来设置的,但是如果用户提交的方式是通过get方式提交的话,则必须手动的将数据通过new String(数据.getByte(),"utf-8");来设置,所以通常设置提交方式为post的方式

今天学习了Servlet的一些request的基本方法和应用,下次将学习response和cookie、session的了解和应用



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值