Servlet 响应 响应相关与重定向 请求 获取表单数据2种方法
一、HttpServletResponse (响应)
包括下面三个:
1、响应消息行 HTTP/1.1 200 OK
200是HTTP状态码, 代表请求已成功。 (查httpservletresponse类可知)
setStatus(int sc) 设置响应状态码
2、响应消息头
sendRedirect(String location) 请求重定向
setHeader(String name, String value) 设置响应头信息
告诉浏览器使用什么编码表
response.setHeader("content-type", "text/html;charset=UTF-8");
设置3秒后刷新跳转到/day9/servlet/demo1
response.setHeader("referesh", "3;url=/day9/servlet/demo1");
3、响应正文(主体)
- *** getWriter(); 字符输出流
- getOutputStream(); 字节输出流
- setCharacterEncoding(String charset) 告知服务器使用什么编码
- *****setContentType(String type)
二、响应相关操作与重定向操作
1.建立HttpServlet应用
2.然后按照下图在doGet方法中输入:箭头1和箭头2功能一样,写一个就行。
getWriter()字符输出流方法的使用:
然后加载应用,启动tomcat
然后在浏览器中输入:
http://localhost:8080/day9/servlet/demo1
就会在浏览器中显示: 你好!
getOutputStream()字节输出流方法的使用:
上述程序response细节说明:
getOutputStream用于得到(返回)输出二进制数据的ServletOuputStream对象。
getWriter方法用于得到(返回)输出文本数据的Printwriter对象。
getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。不然会抛异常。
Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据(其实就是调用write和getwriter方法),将被tomcat从response里面获取,然后将这些数据当作响应消息的正文,与响应状态行和响应消息头组合后输出到客户端
请求重定向
先访问7,被告知重定向到8
Demo7.java
注意!先执行完这句话,再跳转
Demo8.java
浏览器输入:http://localhost:8080/day9/servlet/demo7
三、HttpServletRequest (请求)
1、请求消息行
Resquest类中的方法:
//获得请求方式 GET
request. getMethod()
//返回客户端发出请求时的完整URL
request.getRequestURL()
//返回请求行中的资源名部分
request.getRequestURI()
// 获得当前应用的虚拟目录
request.getContextPath()
//返回请求行中的参数部分。
request.getQueryString()
2、请求消息头
String getHeader(String name) 根据头名称得到这个头的值
Enumeration getHeaderNames() 得到所有头名称
Enumeration getHeaders(String name) 根据头名称得到所有相同头名称的值
域对象:就是Java编译系统中的非基本类性数据的类名
例如:private Test instance;//Test是当前类,instance就是当前类的域对象
3、请求正文(重要)
与 获取表单数据 相关的方法
getParameter(name) 根据表单中name属性的名字,获取value属性的值方法
getParameterValues(String name)专业为复选框取值提供的方法
getParameterNames() 得到表单提交的所有name的方法
getParameterMap 得到表单提交的所有值的方法
getInputStream 以字节流的方式得到所有表单数据
与操作 非表单数据 相关的方法(request也是一个域对象)
将非表单的数据添加到request的域中(name是自己取得名字,value是值)
void setAttribute(String name, Object value);
从request对象中获取name的值
Object getAttribute(String name);
将request对象中的移除
Void removeAttribute(String name);
与 请求转发 相关的方法
//得到请求转发的协助对象
RequestDispatcher getRequestDispatcher(String path)
相关的方法:
forward(ServletRequest request, ServletResponse response) //请求转发的方法
include(ServletRequest request, ServletResponse response) //请求包含的方法
与 请求编码 相关的方法:
//解决post方式编码
*****request.setCharacterEncoding("UTF-8"); //告诉服务器客户端什么编码,只能处理post请求方式
//解决get方式编码
String name = new String(name.getBytes(“iso-8859-1”),”UTF-8”);
四、获取表单数据的两种方法
建立一个register.html文件
然后按照下面写一个form表单
注意下面按照method="post"方式传输
- <body>
- <form action="/day9_3/servlet/demo3" method="post">
- 用户名:<input type="text" name="userName"/><br/>
- 密码:<input type="password" name="pwd"/><br/>
- 性别:<input type="radio" name="sex" value="男" checked="checked"/>男
- <input type="radio" name="sex" value="女"/>女 <br/>
- 爱好 :
- <input type="checkbox" name="hobby" value="篮球"/>篮球
- <input type="checkbox" name="hobby" value="唱歌"/>唱歌
- <input type="checkbox" name="hobby" value="编码"/>编码
- <br/>
- 所在城市:
- <select name="city">
- <option>------请选择------</option>
- <option value="bj">北京</option>
- <option value="sh">上海</option>
- <option value="gz">广州</option>
- </select>
- <br/>
- <input type="submit" value="注册"/>
- </form>
- </body>
第一种
Demo3.java 详细步骤见 Servlet三种创建方式
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- //解决乱码问题:告诉服务器要使用什么编码,注:浏览器使用的是什么编码(UTF-8)传过来的就是什么编码
- //因为浏览器是post传输所以,服务器(test1()方法)端应该添加下面语句
- request.setCharacterEncoding("UTF-8");//只能解决post方式的乱码
- test1(request);
- }
- private void test1(HttpServletRequest request) throws UnsupportedEncodingException {
- //获取表单数据
- //根据表单中name属性的名字,获取value属性的值方法
- String userName = request.getParameter("userName");
- String pwd = request.getParameter("pwd");
- String sex = request.getParameter("sex");
- // 专为复选框提供的方法,当在表单中一个都没有选择时,那么hobbys的值是null
- String[] hobbys = request.getParameterValues("hobby");
- String city = request.getParameter("city");
- //如果register.html中的method是get方式,那么需要下面的语句进行转码,不然会出现乱码。
- // sex = new String(sex.getBytes("iso-8859-1"),"UTF-8");
- System.out.println(userName);
- System.out.println(pwd);
- System.out.println(sex);
- System.out.println(city);
- for (int i = 0;hobbys!=null && i < hobbys.length; i++) {
- System.out.print(hobbys[i]+"\t");
- }
- System.out.println();
- }
在浏览器中输入:
http://localhost:8080/day9_3/register.html
然后一定要在表单中输入一些数据然后注册提交后,就会在myeclipse的底部看到提交的数据了。
如果改成get方式如下图1,那么在test1()中应该加上一句话,如下图2:
建议使用POST方法
第二种
Demo3.java 详细步骤见《建立HttpServlet应用步骤.doc》
getParameterNames() 方法:得到表单提交的所有的name
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- request.setCharacterEncoding("UTF-8");//只能解决post方式的乱码
- test2(response);
- }
- private void test2(HttpServletRequest request) {
- //获取所有的表单name的名子
- Enumeration names = request.getParameterNames();
- while(names.hasMoreElements()){
- //因为表单里的内容都是字符串,所以强转一下,得到每一个name名
- String name = (String) names.nextElement();
- //根据name名,得到value值,使用getParameterValues的原因是因为有hobby复选框 ,其实getParameterValues也能接受单个字符串,所以使用这个。
- String[] values = request.getParameterValues(name);
- for (int i = 0;values!=null && i < values.length; i++) {
- // 输出name和value值
- System.out.println(name+"\t"+values[i]);
- }
- }
- }
注意:浏览器 一定要刷新缓存 ,重新部署应用,重启tomcat
在浏览器中输入:http://localhost:8080/day9_3/register.html
Servlet 响应 响应相关与重定向 请求 获取表单数据2种方法的更多相关文章
- Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据
用servlet实现一个注册的小功能 ,后台获取数据. 注册页面: 注册页面代码 : <!DOCTYPE html> <html> <head> <meta ...
- ASP.NET MVC 获取表单数据
public class Person { public string Name{get;set;} public string Phone{get;set;} } view层 @model Mode ...
- 1.3(学习笔记)Servlet获取表单数据
一.Servlet获取表单数据 表单提交数据经由Servlet处理,返回一个处理结果显示在页面上, 那么如何获取表单提交的参数进出相应的处理呢? 主要用到以下方法: String getParame ...
- php学习笔记-获取表单数据
在网页上经常要填写用户名和密码,点击确认按纽之后,用户名和密码经过前端处理之后发送到了服务器上,那么服务器端怎么获取到这些用户提交的数据呢?就是通过超级全局变量 _POST和_GET 先拿_POST做 ...
- 用Servlet获取表单数据
用Servlet获取表单数据 在webroot下新建userRegist2.jsp 代码如下: <%@ page contentType="text/html;charset=gb23 ...
- FromData获取表单数据
一般想要不刷新页面提交数据时,可以使用ajax提交.如果数据量不大可以自己写json数据用ajax提交到后台服务,但是数据量多且需要动态添加数据时,自己写json格式数据就有点麻烦了,这时候就需要Fo ...
- JS--轻松设置获取表单数据
接触过Angularjs的都知道,ng支持双向绑定,我们可以轻轻松松的通过ngModel将我们的值绑定到界面,当修改了值提交表单的时候不需要再重新通过ID去重新抓取输入框信息了.那对于我们开发前台网站 ...
- django获取表单数据
django获取单表数据的三种方式 v1 = models.Business.objects.all() # v1是QuerySet的列表 ,内部元素都是对象 v2 = models.Business ...
- Day20-单表中获取表单数据的3种方式
1. 搭建环境请参考:http://www.cnblogs.com/momo8238/p/7508677.html 2. 创建表结构 models.py from django.db import m ...
随机推荐
- PAT Basic 1076 Wifi密码 (15 分)
下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1:B-2:C-3:D-4:请同学们自己作答,每两日一 ...
- (转)MyBatis 一、二级缓存和自定义缓存
1.一级缓存 MyBatis 默认开启了一级缓存,一级缓存是在SqlSession 层面进行缓存的.即,同一个SqlSession ,多次调用同一个Mapper和同一个方法的同一个参数, 只会进行一次 ...
- 最简单的Android项目(添加jar文件)
如果项目需要引用第三方jar文件,需要对编译命令做一些改动. 首先在项目根目录创建libs目录,将需要的jar文件拷贝到里面. 编译过程中有两步需要改动. 编译java源文件时,需要添加class p ...
- for循环与内置方法详解
''' for循环与内置方法详解 ''' # 循环:重复(按照某种规律的)做一件事情 # lt = [1, 2, 3, 4] # # ind = 0 # # while True: # print(l ...
- STM32Cube IDE 汉字字体变小解决办法
用STM32Cube IDE自动生成的工程,如果用汉字注释的话,字体会变小,如下图: 解决方法:选中变小的汉字->右击选择Preferences,如下图: 在弹出的对话框中可以看出默认的字体是C ...
- Taro 压缩图片api
Taro API里面没有写支持compressImage,ts提示也是,开发者工具提示暂时不支持此API调试,请使用真机进行开发.这是因为Taro这个库没有把新的api加上,其实还是调用了wx.com ...
- c语言日志打印
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <stdarg.h> ...
- 理解 es7 async/await
简介 JavaScript ES7 中的 async / await 让多个异步 promise 协同工作起来更容易.如果要按一定顺序从多个数据库或者 API 异步获取数据,你可能会以一堆乱七八糟的 ...
- IOS上编译boost库
环境:xcode9mac os 10.13 1.下载boost库并解压2.cd到解压后的文件包内,执行 sh bootstrap.sh(解压后会得到这个脚本文件).3.执行./b2 编译整个库.4.经 ...
- shell练习--PAT题目1008:数组元素循环右移问题 (失败案例,运行超时)
一个数组A中存有N(>)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A ...