Servlet(二)之request和response
一、简介
web服务器收到客户端的Http请求后,会针对每一次请求,分别创建一个用于代表请求的request对象和代表响应的response对象。
request和response既然代表请求和响应,那么我们要获取客户端提交过来的数据,只需要找request对象就可以了,要向客户机输出数据,仅仅需要找response对象就行了。
Response对象
二、响应
响应行
publicvoidsetStatus(intsc)设置状态码
响应头:key:value的形式,一个key可以对应一个value,一个key可以对应多个value
设置头信息
publicvoidsetHeader(Stringname,Stringvalue)一个key对应一个value,经常使用
publicvoidsetIntHeader(Stringname,intvalue)
publicvoidsetDateHeader(Stringname,longdate)
publicvoidaddHeader(Stringname,tringvalue)一个key对应多个value
publicvoidaddIntHeader(Stringname,intvalue)
publicvoidaddDateHeader(Stringname,longdate)
响应体
publicServletOutputStreamgetOutputStream()throwsIOException字节输出流
publicPrintWritergetWriter()throwsIOException字符输出流
三、response代码案例之重定向(登录页面)
登录页面的重定向
状态码是302 响应头是location
需求:登录页面,用户名和密码的登录页面,用户名和密码都是admin,如果有一个不是,重定向到登录页面,重新登录。
在webRoot下新建login.html
<!DOCTYPEhtml><html><head><title>loginl.html</title><metaname="keywords"content="keyword1,keyword2,keyword3"><metaname="description"content="thisismypage"><metaname="content-type"content="text/html;charset=UTF-8"><!--<linkrel="stylesheet"type="text/css"href="./styles.css">--></head><body><formaction="/day10/login"method="post"><table><tr><td>用户名</td><td><inputtype="text"name="username"/></td></tr><tr><td>密码</td><td><inputtype="password"name="password"/></td></tr><tr><tdcolspan="2"><inputtype="submit"value="登录"/></td></tr></table></form></body></html>
新建cn.servlet.LoginServlet类
packagecn.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;@SuppressWarnings("serial")publicclassLoginServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//获取用户名Stringusername=request.getParameter("username");//获取密码Stringpassword=request.getParameter("password");if("admin".equals(username)&&"admin".equals(password)){//登录成功response.setCharacterEncoding("utf-8");response.getWriter().print("登录成功!");}else{//登录失败,重定向到登录页面//设置302的状态码response.setStatus(302);//设置地址response.setHeader("location","/day10/login.html");}}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doGet(request,response);}}
publicvoidsendRedirect(Stringpath)可以完成重定向
packagecn.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;@SuppressWarnings("serial")publicclassLoginServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//获取用户名Stringusername=request.getParameter("username");//获取密码Stringpassword=request.getParameter("password");if("admin".equals(username)&&"admin".equals(password)){//登录成功response.setCharacterEncoding("utf-8");response.getWriter().print("登录成功!");}else{//登录失败,重定向到登录页面//设置302的状态码//response.setStatus(302);//设置地址//response.setHeader("location","/day10/login.html");response.sendRedirect("/day10/login.html");}}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doGet(request,response);}}
web.xml配置如下
<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><display-name>day10</display-name><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>cn.servlet.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login</url-pattern></servlet-mapping></web-app>
四、response代码案例之页面定时刷新(页面读秒操作)
响应头 refresh
新建cn.servlet.RefreshServlet.java
packagecn.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;/***页面的定时刷新*/@SuppressWarnings("serial")publicclassRefreshServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=utf-8");response.getWriter().println("<h2>页面将在5秒后跳转</h2>");//通过refresh头完成页面刷新response.setHeader("refresh","5;URL=/day10/login.html");}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doGet(request,response);}}
web.xml
<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><display-name>day10</display-name><servlet><servlet-name>RefreshServlet</servlet-name><servlet-class>cn.servlet.RefreshServlet</servlet-class></servlet><servlet-mapping><servlet-name>RefreshServlet</servlet-name><url-pattern>/refresh</url-pattern></servlet-mapping></web-app>
在webRoot下新建refresh.html
<!DOCTYPEhtml><html><head><!--5秒后跳转--><metacharset="UTF-8"><title>页面的定时跳转</title><metahttp-equiv="refresh"content="5;URL=/day10/login.html"/></head><body><h3>页面将在<spanid="spanId">5</span>秒后跳转</h3></body><scripttype="text/javascript">/*读秒操作页面一加载,加载事件onload执行读秒的操作,每隔一秒变一次使用js的定时器*/window.onload=function(){varx=5;window.setInterval(function(){varspan=document.getElementById("spanId");span.innerHTML=x;x--;},1000)}</script></html>
五、response代码案例之禁用浏览器缓存
应用:网银等
Cache-Control:no-cache
Expires:-1 值是日期类型
Pragma:no-Cache
新建cn.servlet.DateServlet
packagecn.servlet;importjava.io.IOException;importjava.text.SimpleDateFormat;importjava.util.Date;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;/***禁用浏览器缓存*/@SuppressWarnings("serial")publicclassDateServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{/***Cache-Control:no-cache*Expires:-1值是日期类型(setDateHeader())*Pragma:no-cache*///设置三个头信息response.setHeader("Cache-Control","no-cache");response.setDateHeader("Expires",-1);response.setHeader("Pragma","no-cache");//向页面输出当前的事件//获取当前的时间Datedate=newDate();SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");Stringstr=format.format(date);//输出response.getWriter().println(str);}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doGet(request,response);}}
web.xml
<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><display-name>day10</display-name><servlet><servlet-name>DateServlet</servlet-name><servlet-class>cn.servlet.DateServlet</servlet-class></servlet><servlet-mapping><servlet-name>DateServlet</servlet-name><url-pattern>/date</url-pattern></servlet-mapping></web-app>
六、response代码案例之中文输出问题
新建cn.servlet.OutServlet.java类
packagecn.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;@SuppressWarnings("serial")publicclassOutServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{printWriter(response);}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doGet(request,response);}/***字符输出中文是否乱码*一定乱码*response缓冲区的编码默认是ISO-8859-1*设置浏览器打开文件所采用的编码*response.setHeader("Content-Type","text/html;charset=utf-8");*@throwsIOException**/publicvoidprintWriter(HttpServletResponseresponse)throwsIOException{response.setCharacterEncoding("utf-8");response.setHeader("Content-Type","text/html;charset=utf-8");response.getWriter().println("世界这么大我想去看看");}/***字节输出中文*输出“世界这么大我想去看看”是否乱码?*不一定乱码*解决办法:*设置浏览器打开文件时所采用的编码*response.setHeader("Content-Type","text/html;charset=utf-8");*获取字符串byte[]数组的编码和浏览器打开文件时候的编码相同*"世界这么大我想去看看".getBytes("utf-8");*@throwsIOException**/publicvoidprintOutPutStream(HttpServletResponseresponse)throwsIOException{response.setHeader("Content-Type","text/html;charset=utf-8");response.getOutputStream().write("世界这么大我想去看看".getBytes("utf-8"));}}
web.xml
<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><display-name>day10</display-name><servlet><servlet-name>OutServlet</servlet-name><servlet-class>cn.servlet.OutServlet</servlet-class></servlet><servlet-mapping><servlet-name>OutServlet</servlet-name><url-pattern>/out</url-pattern></servlet-mapping></web-app>
简写
packagecn.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;@SuppressWarnings("serial")publicclassOutServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{printWriter(response);}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doGet(request,response);}/***字符输出中文是否乱码*一定乱码*response缓冲区的编码默认是ISO-8859-1*设置浏览器打开文件所采用的编码*response.setHeader("Content-Type","text/html;charset=utf-8");**简写:*response.setContentType("text/html;charset=UTF-8");*@throwsIOException**/publicvoidprintWriter(HttpServletResponseresponse)throwsIOException{response.setContentType("text/html;charset=UTF-8");response.getWriter().println("世界这么大我想去看看");}/***字节输出中文*输出“世界这么大我想去看看”是否乱码?*不一定乱码*解决办法:*设置浏览器打开文件时所采用的编码*response.setHeader("Content-Type","text/html;charset=utf-8");*获取字符串byte[]数组的编码和浏览器打开文件时候的编码相同*"世界这么大我想去看看".getBytes("utf-8");*@throwsIOException**/publicvoidprintOutPutStream(HttpServletResponseresponse)throwsIOException{response.setHeader("Content-Type","text/html;charset=utf-8");response.getOutputStream().write("世界这么大我想去看看".getBytes("utf-8"));}}
六、response代码案例之文件下载初级实现
超链接:浏览器可以解析直接打开
弹出下载窗口:
前提条件:先准备一个文件
读取文件,读取到输入流中,通过response输出到浏览器。
设置头信息:
Content-Disposition attachement;filename=文件名称
以附件的形式打开
新家cn.servlet.DownloadServlet.java类
packagecn.servlet;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjavax.servlet.ServletContext;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;@SuppressWarnings("serial")publicclassDownloadServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//先获取文件,读入输入流中//获取文件的绝对磁盘路径ServletContextcontext=this.getServletContext();Stringpath=context.getRealPath("/img/psb.jpg");Stringfilename=path.substring(path.lastIndexOf("/")+1);response.setHeader("Content-Disposition","p_w_upload;filename="+filename);InputStreamis=newFileInputStream(path);OutputStreamos=response.getOutputStream();byte[]b=newbyte[1024];intlen=0;while((len=is.read(b))!=-1){os.write(b,0,len);}is.close();os.close();}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doGet(request,response);}}
web.xml
<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><display-name>day10</display-name><servlet><servlet-name>DownloadServlet</servlet-name><servlet-class>cn.servlet.DownloadServlet</servlet-class></servlet><servlet-name>DownloadServlet</servlet-name><url-pattern>/download</url-pattern></servlet-mapping></web-app>
七、response代码案例之实现验证码
7.1验证码的热身
packagecn.servlet;importjava.awt.Color;importjava.awt.Graphics;importjava.awt.p_w_picpath.BufferedImage;importjava.io.IOException;importjavax.p_w_picpathio.ImageIO;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;/***验证码的热身*/@SuppressWarnings("serial")publicclassTestServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//在内存中生成图片BufferedImagep_w_picpath=newBufferedImage(400,400,BufferedImage.TYPE_INT_RGB);//获取画笔对象Graphicsg=p_w_picpath.getGraphics();//设置颜色g.setColor(Color.RED);//画矩形g.drawRect(80,80,150,100);g.setColor(Color.YELLOW);//定义字符串Stringstr="abc";g.drawString(str,85,85);//把内存中的图片输出的浏览器端ImageIO.write(p_w_picpath,"jpg",response.getOutputStream());}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doGet(request,response);}}
web.xml
<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><display-name>day10</display-name><servlet><servlet-name>TestServlet</servlet-name><servlet-class>cn.servlet.TestServlet</servlet-class></servlet><servlet-mapping><servlet-name>TestServlet</servlet-name><url-pattern>/test1</url-pattern></servlet-mapping></web-app>
7.2验证码的实现
packagecn.servlet;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.Graphics2D;importjava.awt.p_w_picpath.BufferedImage;importjava.io.IOException;importjava.util.Random;importjavax.p_w_picpathio.ImageIO;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;/***验证码*/@SuppressWarnings("serial")publicclassCheckCodeServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{/***在内存中生成图片(纸),没有设置背景颜色,画填充的矩形和纸的大小相同,并且矩形有颜色*获取画笔的对象(设置颜色、设置字体、画字符串、画矩形)*先准备好数据,随机生成4个字符,把字符画到纸上*画干扰线*把内存中的图片输出的客户端*///在内存中生成图片intwidth=120;intheight=30;BufferedImagep_w_picpath=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//获取画笔对象Graphics2Dg=(Graphics2D)p_w_picpath.getGraphics();//设置灰色g.setColor(Color.gray);//画填充的矩形g.fillRect(0,0,width,height);//设置颜色g.setColor(Color.BLUE);//画边框g.drawRect(0,0,width-1,height-1);//准备数据Stringwords="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";//设置颜色g.setColor(Color.YELLOW);//设置字体g.setFont(newFont("隶书",Font.BOLD,20));Randomrandom=newRandom();intx=20;inty=20;for(inti=0;i<4;i++){/**voidrotate(doubletheta,doublex,doubley)*theta弧度*弧度=角度*Math.PI/180*获取正负30的角度*/intjiaodu=random.nextInt(60)-30;doublehudu=jiaodu*Math.PI/180;g.rotate(hudu,x,y);//获取下标intindex=random.nextInt(words.length());//返回指定下标位置的字符,随机获取下标charch=words.charAt(index);//写字符串g.drawString(""+ch,x,y);g.rotate(-hudu,x,y);x+=20;}g.setColor(Color.GREEN);intx1,x2,y1,y2;//画干扰线for(inti=0;i<4;i++){x1=random.nextInt(width);y1=random.nextInt(width);x2=random.nextInt(width);y2=random.nextInt(height);g.drawLine(x1,y1,x2,y2);}//把内存中的图片输出到客户端上ImageIO.write(p_w_picpath,"jpg",response.getOutputStream());}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doGet(request,response);}}
web.xml
<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><display-name>day10</display-name><servlet><servlet-name>CheckCodeServlet</servlet-name><servlet-class>cn.servlet.CheckCodeServlet</servlet-class></servlet><servlet-mapping><servlet-name>CheckCodeServlet</servlet-name><url-pattern>/checkCode</url-pattern></servlet-mapping></web-app>
Request对象
八、HttpServletRequest
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器的时候,HTTP强求中所有信息都封装在这个对象之中,开发人员通过这个对象的方法,可以获取客户的这心信息。
九、获取客户端的信息
publicStringgetRemoteAddr()获取IP地址
publicStringgetMethod()获取请求方法
publicStringgetContextPath()获取上下文路径(虚拟路径)
packagecn.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;@SuppressWarnings("serial")publicclassRequestDemoextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//获取IPStringip=request.getRemoteAddr();System.out.println("客户机的IP是:"+ip);//获取请求的方法Stringmethod=request.getMethod();System.out.println("请求的方法是:"+method);//获取虚拟路径的名称StringcontextPath=request.getContextPath();System.out.println("虚拟路径的名称:"+contextPath);}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doGet(request,response);}}
web.xml
<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><servlet><servlet-name>RequestDemo</servlet-name><servlet-class>cn.servlet.RequestDemo</servlet-class></servlet><servlet-mapping><servlet-name>RequestDemo</servlet-name><url-pattern>/requestDemo1</url-pattern></servlet-mapping></web-app>
十、获取请求头的信息
publicStringgetHeader(Stringname)
publiclonggetDateHeader(Stringname)
publicintgetIntHeader(Stringname)
请求头:
referer记住网页的来源
User-Agent判断浏览器
if-modified-since控制缓存
packagecn.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;@SuppressWarnings("serial")publicclassRequestDemo2extendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//获取请求头//网页来源防盗链Stringreferer=request.getHeader("referer");System.out.println("网页来源于:"+referer);//判断浏览器文件下载Stringagent=request.getHeader("User-Agent");System.out.println("浏览器版本:"+agent);}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doGet(request,response);}}
web.xml
<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><display-name>day10</display-name><servlet><servlet-name>RequestDemo2</servlet-name><servlet-class>cn.servlet.RequestDemo2</servlet-class></servlet><servlet-mapping><servlet-name>RequestDemo2</servlet-name><url-pattern>/request2</url-pattern></servlet-mapping></web-app>
十一、获取请求参数
publicStringgetParameter(Stringname)
publicString[]getParameterValues(Stringname)
publicMapgetParameterMap()
publicEnumerationgetParameterNames()
register.html
<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>Inserttitlehere</title></head><body><formaction="/day10/register"method="post"><table><tr><td>输入姓名</td><td><inputtype="text"name="username"/></td></tr><tr><td>输入密码</td><td><inputtype="password"name="password"/></td></tr><tr><td>选择性别</td><td><inputtype="radio"name="sex"value="男"/>男<inputtype="radio"name="sex"value="女"/>女</td></tr><tr><td>选择爱好</td><td><inputtype="checkbox"name="love"value="篮球"/>篮球<inputtype="checkbox"name="love"value="足球"/>足球<inputtype="checkbox"name="love"value="排球"/>排球<inputtype="checkbox"name="love"value="乒乓球"/>乒乓球</td></tr><tr><td>选择城市</td><td><selectname="city"><optionvalue="none">===请选择城市====</option><optionvalue="北京">北京</option><optionvalue="上海">上海</option><optionvalue="广州">广州</option></select></td></tr><tr><tdcolspan="2"><inputtype="submit"value="注册"/></td></tr></table></form></body></html>
RegisterDemo.java
packagecn.servlet;importjava.io.IOException;importjava.util.Arrays;importjava.util.Iterator;importjava.util.Map;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;@SuppressWarnings("serial")publicclassRegisterDemoextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringusername=request.getParameter("username");Stringpassword=request.getParameter("password");Stringsex=request.getParameter("sex");String[]love=request.getParameterValues("love");Stringcity=request.getParameter("city");System.out.println("用户名:"+username+",密码:"+password+",性别:"+sex);for(inti=0;i<love.length;i++){System.out.println("爱好"+love[i]);}System.out.println("城市:"+city);System.out.println("===================");//获取map集合Map<String,String[]>parameterMap=request.getParameterMap();//循环遍历for(Iterator<String>keys=parameterMap.keySet().iterator();keys.hasNext();){Stringkey=keys.next();String[]value=parameterMap.get(key);System.out.println("key:"+key+",value="+Arrays.toString(value));}for(Iterator<Map.Entry<String,String[]>>iterator=parameterMap.entrySet().iterator();iterator.hasNext();){Map.Entry<String,String[]>entry=iterator.next();Stringkey=entry.getKey();String[]value=entry.getValue();System.out.println("key:"+key+",value="+Arrays.toString(value));}}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doGet(request,response);}}
web.xml
<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><servlet><servlet-name>RegisterDemo</servlet-name><servlet-class>cn.servlet.RegisterDemo</servlet-class></servlet><servlet-mapping><servlet-name>RegisterDemo</servlet-name><url-pattern>/register</url-pattern></servlet-mapping></web-app>
十二、request获取中文乱码问题
POST请求乱码:request.setCharacterEncoding("utf-8");
GET请求乱码:
解决方案一:修改Tomcat/conf/server,xml
<Connectorport="80"protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"URIEncoding="utf-8"/>
必须有修改Tomcat服务器配置文件的权限
解决方案二:逆向编解码
username = URLEncoder.encode(username, "ISO-8859-1");
username = URLDecoder.decode(username, "utf-8");
解决方案三:简写形式
username = new String(username.getBytes("iso-8859-1"),"utf-8")
十三、利用请求域传递对象
publicObjectgetAttribute(Stringname)
publicvoidsetAttribute(Stringname,Objecto)
publicvoidremoveAttribute(Stringname)
十四、重定向和转发的区别
request对象提供了getRequestDispather方法,该方法返回一个RequestDispatcher对象,调用这个方法的forward方法可以实现请求转发,从而共享请求中的数据。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。