一、首先 是得到全局的配置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的值
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目录下的位置
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());
}
}
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的了解和应用