传输过程 表单 to Servlet
开门见山,一张图解释
首先设置表单的
<form action="myURL/toText" method="post">
此处的action对应
web.xml
中的url-pattern
web.xml
中需要注册好对应的Servlet
method
可设置post
或者get
不设置的话默认是get
后文添加的其他文件的
web.xml
注册代码不在展示
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>表单提交</title>
</head>
<body><form action="myURL/toText" method="post">姓名<input type="text" name="name"> <br>爱好 <input type="checkbox" name="hobby" value="read"> 阅读<input type="checkbox" name="hobby" value="run"> 跑步<input type="checkbox" name="hobby" value="music"> 音乐<br>该课程名称<input type="radio" name="course" value="Java Web"/>Java Web<input type="radio" name="course" value="Android"/>Android<input type="radio" name="course" value="PHP"/>PHP<br>交卷请单击:<input type="submit" value="交卷"/>重答请单击:<input type="reset" value="重答"/></form>
</body>
</html>
<?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" id="WebApp_ID" version="2.5"><display-name>000</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><servlet><servlet-name>Register</servlet-name><servlet-class>test.com.Register</servlet-class></servlet><servlet-mapping><servlet-name>Register</servlet-name><url-pattern>/myURL/*</url-pattern></servlet-mapping>
</web-app>
访问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);//空值为nullString age = request.getParameter("age");System.out.println("age=" + age);System.out.println("********************");//枚举类型,获得请求参数的列表Enumeration<String> 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<String, String[]> pMap = request.getParameterMap();//获得所有键Set<String> 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();}}}
控制台输出
name=张三
age=null
name=张三
hobby=read
course=====Java Web
read
run
music
name=张三
hobby=read run music
course===Java Web
request的常用方法
setCharacterEncoding
设置字符集,放置中文导致的乱码
request.setCharacterEncoding(“utf-8”);
getParameter
根据参数key获得val,如果没有该键值对接受内容为null
String name = request.getParameter(“name”);
getParameterNames
枚举类型,获得请求参数的列表
Enumeration pNames = request.getParameterNames();
getParameterValues
一般用于获取复选框 用String[]形式接受
String[] pValues = request.getParameterValues(“hobby”);
getParameterMap
获得所有键值对
Map<String, String[]> pMap = request.getParameterMap();
Servlet间互传 (域属性)
第一个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("<br/>"); //真换行 out.print("name = " + name);out.print("<br/>");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中设置的urlString servletPath = request.getServletPath();System.out.println("servletPath == " + servletPath);//URI中去掉精确部分String pathInfo = request.getPathInfo();System.out.println("pathInfo == " + pathInfo);//请求的方式 GET或者POSTString 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