您的位置:首页 > 产品设计 > UI/UE

servlet request response

2016-09-12 17:58 309 查看
今天说一说requestresponse,servlet中最重要的两个

**HttpServletResponse:**
doGet()  doPost()
消息行:setStatus(302)
消息头:setHeader("content-disposition")  refresh  location
消息体:PrintWriter out = response.getWriter()
ServletOutputStream st = response.getOutputStream()


见上一篇http://blog.csdn.net/daliyuan350649623/article/details/52493977

**HttpServletRequest:**
消息行:getMethod(),getRequestURL(),getRequestURI(),getContextPath()
getQueryString()
消息头:getHeader(),getHeaderNames(),getHeaders()
消息体:getParameter(String name) getParameterValues(String name)
getParameterNames(),Map<String,String[]>getParameterMap()               PropertyDiscriptor
ServletInputStream in = getInputStream()--URLDecoder.decode()


消息行

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
//获取请求消息行中的信息的方法
System.out.println(request.getMethod());//获取请求方式
System.out.println(request.getRequestURL());//获取请求的路径
System.out.println(request.getRequestURI());//获取请求的资源路径
System.out.println(request.getContextPath());//获取当前应用的                  目录 /day34_request
System.out.println(request.getQueryString());//获取地址后跟的参数
}


消息头:

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取请求的头信息的方法
//      String value = request.getHeader("User-Agent");
//      //判断浏览器类型
//      if(value.toLowerCase().contains("msie"))
//          System.out.println("你使用的是ie浏览器");
//      else if(value.toLowerCase().contains("firefox"))
//          System.out.println("你使用的是火狐浏览器");
//      else if(value.toLowerCase().contains("chrome"))
//          System.out.println("你使用的是谷歌浏览器");

//getHeaderNames()方法的使用
Enumeration enu = request.getHeaderNames();
while(enu.hasMoreElements())
{
String  name = (String) enu.nextElement();
String  v = request.getHeader(name);
System.out.println(name+":"+v);
}
//Enumeration en = request.getHeaders("accept");
//头信息中的name 是可以重复的,这个方法用来得到该名称的所有的值
}


消息体:

getParameter(String name) getParameterValues(String name)

//处理消息体的方法
//告诉服务器客户端使用的编码,以post方式提交表单数据的乱码问题
request.setCharacterEncoding("utf-8");
//得到用户名--表单中的数据默认都是字符串的
String username = request.getParameter("username");
//得到密码
String psw = request.getParameter("pwd");
//得到性别
String sex = request.getParameter("sex");

//得到爱好
String[] hobbys = request.getParameterValues("hobby");

//得到所在城市
String city = request.getParameter("city");

System.out.println(username+"  "+psw+"  "+sex+"   "+city);
for(String ss:hobbys)
{
System.out.print(ss+"   ");
}


getParameterNames()

//getParameterNames()方法的使用
request.setCharacterEncoding("utf-8");
Enumeration en = request.getParameterNames();//得到所有的name
while(en.hasMoreElements())
{
String name = (String) en.nextElement();//得到一个参数名
//根据名字获取值
String[] values = request.getParameterValues(name);
System.out.print(name);
for(int i=0;values!=null && i<values.length;i++)
{
System.out.print(values[i]+"  ");
}
System.out.println();
}


Map< String,String[]>getParameterMap()

PropertyDescr
4000
iptor


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//      try {
//          request.setCharacterEncoding("utf-8");
//          //getParameterMap的使用
//          Map<String,String[]> maps = request.getParameterMap();//一次性得到表单上提交过来的所有名称值对儿
//          User user = new User();
//
//          //遍历Map集合
//          for(Map.Entry<String, String[]> en:maps.entrySet())// username=冬冬
//          {
//              String name = en.getKey();//得到键 username
//              String[] value = en.getValue();//得到值
//
//              //属性描述器  getUsername()  setUsername()---Method
//              PropertyDescriptor des = new PropertyDescriptor(name, User.class);
//
//              //从属性描述器中得到set方法
//              Method m = des.getWriteMethod();
//
//              //执行 set方法
//              if(value.length==1)
//                  m.invoke(user, value[0]);
//              else
//                  m.invoke(user, (Object)value);
//          }
//
//          System.out.println(user);
//
//      } catch (Exception e) {
//
//          e.printStackTrace();
//      }

//使用commons-beanutils.jar和commons-logging.jar实现上边的功能
try {
request.setCharacterEncoding("utf-8");
User user = new User();
BeanUtils.populate(user,request.getParameterMap());
System.out.println(user);

} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}


ServletInputStream in = getInputStream()–URLDecoder.decode()

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//使用getInputStream()获取表单提交的数据
ServletInputStream in = request.getInputStream();
int len = 0;
byte[] arr = new byte[1024];
while((len = in.read(arr))!=-1)
{
//System.out.println(new String(arr,0,len));
System.out.println(URLDecoder.decode(new String(arr,0,len,"utf-8"), "utf-8"));
}
in.close();
//URLEncoder.encode("","");
}


post方式提交表单数据的乱码问题:

request.setCharacterEncoding(“utf-8”);

get方式提交表单数据的乱码问题:

//再编码,再解码功能的函数
public String fun(String str)
{
String result = "";
try {
result = new String(str.getBytes("ISO8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//以get方式提交表单数据的乱码处理---tomcat默认用iso8859-1进行解码,所以乱码
//获取用户名
String name = request.getParameter("username");
//        //再编码
//        byte[] arr = name.getBytes("ISO8859-1");
//        //再解码
//        String ss = new String(arr,"utf-8");
String ss = fun(name);
System.out.println(ss);

}


请求重定向与请求转发区别

//请求重定向   response.sendRedirect("/servelt/demo8")
//请求转发request.getRequestDispatcher("/servlet/demo8").forward(request, response);
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
//请求转发
//在服务器端执行的
//地址栏只显示一个地址
//客户端只请求了一次
//地址不用写应用名
//不能转到其它应用
System.out.println("demo7---我没钱,我招Demo8借");
//request也是一个域对象
request.setAttribute("hello", "java");//ServletContext----域对象
//请求Demo8:带着 request和 response对象转到demo8
request.getRequestDispatcher("/servlet/demo8").forward(request, response);
//不能转到其它应用
//request.getRequestDispatcher("http://www.baidu.com").forward(request, response);
System.out.println("demo7---给你钱");

//请求重定向
//在客户端执行的
//地址栏先后显示2个地址
//客户端请求了2次
//地址需要写应用名
//可以转到其它应用
//response.sendRedirect(request.getContextPath()+"/servlet/demo8");
//      response.sendRedirect("http://www.baidu.com");
//      System.out.println("demo7---给你钱");
}

//demo8的内容
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
//使用的request和 response对象是  demo7传过来的
String v = (String) request.getAttribute("hello");
System.out.println(v+"   ,demo8--我借给你钱");
}


如果要转到其它应用必须要使用重定向
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet request response