开门见山,一张图解释
首先设置表单的
表单提交
000 index.html index.htm index.jsp default.html default.htm default.jsp Register test.com.Register Register /myURL/*
访问index:http://localhost:8080/000/index.html
Servlet中接受处理package test.com;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Register extends HttpServlet {
private static final long serialVersionUID = 1L;
public Register() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//解决中文乱码,设置字符编码
request.setCharacterEncoding("utf-8");
//request存储的是一个键值对,key:String val:String[]
//getParameter 根据键获得值
String name = request.getParameter("name");
System.out.println("name=" + name);
//空值为null
String age = request.getParameter("age");
System.out.println("age=" + age);
System.out.println("********************");
//枚举类型,获得请求参数的列表
Enumeration pNames = request.getParameterNames();
while(pNames.hasMoreElements()){
String pname = pNames.nextElement();
//如果参数名称的值有多个,则获取第一个
String namevalue = request.getParameter(pname);
System.out.println(pname + "=====" + namevalue);
}
System.out.println("********************");
//一般用于获取复选框
String[] pValues = request.getParameterValues("hobby");
for (String hobby : pValues){
System.out.println(hobby);
}
System.out.println("********************");
//获得所有键值对
Map pMap = request.getParameterMap();
//获得所有键
Set keySet = pMap.keySet();
for (String mpname : keySet){
String[] values = pMap.get(mpname);
System.out.print(mpname + "===");
for (String value : values){
System.out.print(value + " ");
}
System.out.println();
}
}
}
控制台输出
request的常用方法 setCharacterEncodingname=张三
age=null
name=张三
hobby=read
course=====Java Web
read
run
music
name=张三
hobby=read run music
course===Java Web
getParameter设置字符集,放置中文导致的乱码
request.setCharacterEncoding(“utf-8”);
getParameterNames根据参数key获得val,如果没有该键值对接受内容为null
String name = request.getParameter(“name”);
getParameterValues枚举类型,获得请求参数的列表
Enumeration pNames = request.getParameterNames();
getParameterMap一般用于获取复选框 用String[]形式接受
String[] pValues = request.getParameterValues(“hobby”);
Servlet间互传 (域属性)获得所有键值对
Map
pMap = request.getParameterMap();
第一个Servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取对象
String name = request.getParameter("name");
String age = request.getParameter("age");
//理解上可以类比成一个Map
//放入requset的域属性中
//作用域就是一次请求的时间
request.setAttribute("name", name);
request.setAttribute("age", age);
//删除属性
request.removeAttribute("age");
//当前请求转发到另一个Servlet中(还是在Servlet中没有返回浏览器,算这一次请求)
request.getRequestDispatcher("/otherServlet").forward(request, response);
}
第二个Servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置字符集
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
//获取从另一个Servlet中传入的数据
String name = (String)request.getAttribute("name");
String age = (String)request.getAttribute("age");
System.out.println("name = " + name);
System.out.println("age = " + age);
//字符集要在生成PrintWriter对象之前使用
PrintWriter out = response.getWriter();
out.println("可放html代码"); //也要处理乱码
out.append("show code");
out.println(); //只是空格
out.print("
"); //真换行
out.print("name = " + name);
out.print("
");
out.write("age = " + age);
// 再次跳转 可以跳转到html的页面
// request.getRequestDispatcher("/welcome.html").forward(request, response);
}
request路径相关的方法
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
StringBuffer requestURL = request.getRequestURL();
System.out.println("requestURL == " + requestURL);
//资源路径
String requestURI = request.getRequestURI();
System.out.println("requestURI == " + requestURI);
//获得请求的上下文路径(就是项目名)
String contextPath = request.getContextPath();
System.out.println("contextPath == " + contextPath);
//获取客户端的ip地址
String remoteAddr = request.getRemoteAddr();
System.out.println("remoteAddr == " + remoteAddr);
//Servlet的路径 精确部分,就是在web.xml中设置的url
String servletPath = request.getServletPath();
System.out.println("servletPath == " + servletPath);
//URI中去掉精确部分
String pathInfo = request.getPathInfo();
System.out.println("pathInfo == " + pathInfo);
//请求的方式 GET或者POST
String method = request.getMethod();
System.out.println("method == " + method);
}
输出
这里以本文开头图片中的表单的url提交,注意文本代码所在的项目名是000
项目名 url的精确部分 非精确部分
URI = ServletContext + ServletPath + PathInfo
requestURL == http://localhost:8080/000/myURL/toText
requestURI == /000/myURL/toText
contextPath == /000
remoteAddr == 0:0:0:0:0:0:0:1
servletPath == /myURL
pathInfo == /toText
method == POST



