javaEE:day6-requset和response用法、表单参数的接受、文件手动上传(简易版)

通过<%=request.getContextPath() %> 可以将项目名写活,这样,即使项目名变了,仍可以运行。

request代码每一次请求的容器。浏览器每次请求都是一个新的request对象。因此放在request里面的属性request.getAttribute()是空的,上一个request放的属性request.setAttribute() 是上一个的。与这次无关。但如果是转发的时候,那么request对象是共享的。这种情况下,两次的request是同一个。这种情况下,里面的属性可以共用的。

setCharacterEncoding()和getCharacterEncoding()

setCharacterEncoding()只对post请求方式有效,因为它只设置请求体(正文)中内容的读取编码

如果不设置setCharacterEncoding(),那么默认的request.getCharacterEncoding()是iso8859-1 返回的是null

getContentType()

如果是get提交则返回null

如果是post方式提交则返回:application/x-www-form-urlencoded

通过getMethod()判断请求方式,同时演示GET方式下的中文乱码解决

tomcat直接用iso8859-1解码,属于解码错误,如果非要用这种方式传中文,那么先还原再编码:

name = new String(name.getBytes("iso8859-1"),"utf-8");

注意,在get方式下的中文乱码解决不可靠。–如果避不开,那么就明确告诉用户,要使用什么浏览器访问!因为有的浏览器支持,而有的浏览器不支持。以上例子就有ie不支持,360支持。

获取客户端的国际化信息—浏览器Internet选项中设置的语言环境—-request.getLocale()

local.getCountry()

local.getDisplayCountry()

local.getDisplayLanguage()

local.getDisplayName()

参数接受–表单参数接受

单个参数值

request.getParameter("name");

多个参数值

方法1:

        String hoby[]=request.getParameterValues("hoby");//如果某个参数的值有好几个,用这个方法
        if (hoby!=null) {
            for (String str : hoby) {
                out.print( "<br/>"+str);
                System.out.println(str);
            }
        }

方法2:一次将所有表单参数封装到map中,然后通过操纵map拿值

        //演示getParameterMap()
        Map<String, String[]> map = request.getParameterMap();
        ////遍历出所有参数及值
        Iterator<Entry<String, String[]>> it = map.entrySet().iterator();
        while(it.hasNext()){
            Entry<String, String[]> en = it.next();
            String key = en.getKey();
            String[] value = en.getValue();
            out.println("参数名称:"+key);
            for(String v:value){
                out.print("参数值:"+v+"&nbsp;&nbsp;");
            }
        }

获取客户端的ip和端口号

        String ip= request.getRemoteHost();
        int port = request.getRemotePort();
        out.print("<br>"+ip+":"+port);

request.getQueryString()

request.getQueryString()是将get方式提交的请求地址 ? 后面的都封装成一个字符串。

文件上传

简易版:手动处理文件上传

<form>中加入属性:enctype="multipart/form-data" 这样拿到的就是多段字符串。而不是一个文件名。但是这种手动上传很麻烦,要自己去解析。我们在下一篇博客文章中使用阿帕奇公司-Commons-io.jar 和 Commos-fileupload.jar写好的去做文件上传

本文完整代码如下:

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
        <title>演示request和response用法</title>
  </head>
  <body>
  <!--通过request.getContextPath()可以把项目根目录(项目名)写活  -->
        <form action="<%=request.getContextPath() %>/requestDemo" method="post">
            姓名:<input type="text" name="name" /><br/>
            <input type="submit" value="提交"/>
        </form>
        <!-- 演示表单参数的接受 -->
        <form action="<%=request.getContextPath() %>/param" method="post">
            姓名:<input type="text" name="name" /><br/>
            年龄:<input type="text" name="age" /><br/>
            <input type="checkbox" name="hoby" value="music" />音乐&nbsp;&nbsp;
            <input type="checkbox" name="hoby" value="tv" />电视&nbsp;&nbsp;
            <input type="checkbox" name="hoby" value="game" />游戏<br/>
            <input type="radio" name="sex" value="0" checked="checked" >男&nbsp;&nbsp;
            <input type="radio" name="sex" value="1">女
            <input type="submit" value="提交"/>
        </form>
        <!-- 演示文件上传 -->
        <h2>文件上传手动版</h2>
        <form action="<%=request.getContextPath() %>/upload1" method="post" enctype="multipart/form-data">
            文件名:<input type="file" name="fileName">
            <input type="submit" value="上传">
        </form>
        <!-- 上面这种手动上传 的方法不好。要自己解析,麻烦,我们用阿帕奇公司-Commons-io.jar 和 Commos-fileupload.jar写好的去做文件上传 -->

  </body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>
  <servlet>
    <servlet-name>RequestDemo</servlet-name>
    <servlet-class>cn.hncu.servlets.RequestDemo</servlet-class>
    <init-param>
        <param-name>name</param-name>
        <param-value>Hello</param-value>
    </init-param>
  </servlet>
  <servlet>
    <servlet-name>ParamerServlet</servlet-name>
    <servlet-class>cn.hncu.servlets.ParamerServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>UpFileServlet</servlet-name>
    <servlet-class>cn.hncu.servlets.UpFileServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>RequestDemo</servlet-name>
    <url-pattern>/requestDemo</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ParamerServlet</servlet-name>
    <url-pattern>/param</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>UpFileServlet</servlet-name>
    <url-pattern>/upload1</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

RequestDemo

package cn.hncu.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Locale;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RequestDemo extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        out.print(request);
        //每一次请求,request对象是新的,因此这里读取的属性是null,因为之前放进去的属性是属于另一个request对象
        //如果是转发,那么request对象是共享的即是同一个,这种情况下,里面的属性可以共用
        int num = new Random().nextInt(200);
        if(request.getAttribute("name")==null){
            System.out.println("放入:"+num);
            request.setAttribute("name", num);
        }

        //setCharacterEncoding()只对post请求方式有效,因为它只设置请求体(正文)中内容的读取编码
        //以下演示setCharacterEncoding()和getCharacterEncoding()
        request.setCharacterEncoding("utf-8");
        String character = request.getCharacterEncoding();//utf-8
        //如果没有设置的话 默认的request.getCharacterEncoding()是iso8859-1 返回的是null
//      String character = request.getCharacterEncoding();//null
        System.out.println(character);

        //以下演示getContentType()----如果是get提交则返回null,
        //如果是post方式提交则返回:application/x-www-form-urlencoded
        String contextType = request.getContentType();
        System.out.println(contextType);//application/x-www-form-urlencoded

        //下面演示通过getMethod()判断请求方式,同时演示GET方式下的中文乱码解决--
        //注意,不可靠!!!--如果避不开,那么就明确告诉用户,要使用什么浏览器访问!
        String name = request.getParameter("name");
        if(request.getMethod().equals("GET")){
            System.out.println("DOGET...");
            name = new String(name.getBytes("iso8859-1"),"utf-8");
            System.out.println(name);
            out.print("<br/>name:"+name);
        }

        //获取客户端的国际化信息---浏览器Internet选项中设置的语言环境
        Locale local = request.getLocale();
        out.println("<br/>Country:"+local.getCountry());//Country:CN
        out.println("<br/>DisplayCountry:"+local.getDisplayCountry());//DisplayCountry:中国
        out.println("<br/>DisplayLanguage:"+local.getDisplayLanguage());//DisplayLanguage:中文
        out.println("<br/>DisplayName:"+local.getDisplayName());//DisplayName:中文 (中国) 

        out.println("<br/>"+request.getAttribute("name"));
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

}

ParamerServlet

package cn.hncu.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ParamerServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        String name = request.getParameter("name");//读取单个参数值
        String age = request.getParameter("age");
        out.println("name:"+name);
        out.println("age:"+age);
        String hoby[]=request.getParameterValues("hoby");//如果某个参数的值有好几个,用这个方法
        if (hoby!=null) {
            for (String str : hoby) {
                out.print( "<br/>"+str);
                System.out.println(str);
            }
        }
        String sex = request.getParameter("sex");
        if ("1".equals(sex)) {
            out.print("<br/>女" );
        }else{
            out.print("<br/>男" );
        }
        System.out.println("sex="+sex);

        //演示getParameterMap()
        Map<String, String[]> map = request.getParameterMap();
        ////遍历出所有参数及值
        Iterator<Entry<String, String[]>> it = map.entrySet().iterator();
        while(it.hasNext()){
            Entry<String, String[]> en = it.next();
            String key = en.getKey();
            String[] value = en.getValue();
            out.println("参数名称:"+key);
            for(String v:value){
                out.print("参数值:"+v+"&nbsp;&nbsp;");
            }
        }
        ////获取客户端的ip和端口号
        String ip= request.getRemoteHost();
        int port = request.getRemotePort();
        out.print("<br>"+ip+":"+port);
        String queryStr= request.getQueryString();
        out.println("queryStr:"+queryStr);
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

}

UpFileServlet

package cn.hncu.servlets;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UpFileServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");

        InputStream in = request.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String line = null;
        while((line=br.readLine())!=null){
            System.out.println(line);
        }

    }

}
时间: 2024-10-09 23:58:47

javaEE:day6-requset和response用法、表单参数的接受、文件手动上传(简易版)的相关文章

Ajax模拟Form表单提交,含多种数据上传

<div> <table id="outputInfo"> <tr><td>Client</td><td><input id='ClientName' type='text'></td></tr> <tr><td>CropID</td><td><input id='CropID' type='text' /></t

【转】文件各种上传,离不开的表单

阅读目录 利用表单实现文件上传 表单异步上传(jquery.form插件) 模拟表单数据上传(FormData) 分片上传 使用HTML5 拖拽.粘贴上传 上传插件(WebUploader) 总结 作为程序员的我们,经常会要用到文件的上传和下载功能.到了需要用的时候,各种查资料.有木有..有木有....为了方便下次使用,这里来做个总结和备忘. 利用表单实现文件上传 最原始.最简单.最粗暴的文件上传. 前端代码: //方式1 <form action="/Home/SaveFile1&quo

【前端】文件各种上传离不开的表单

阅读目录 利用表单实现文件上传 表单异步上传(jquery.form插件) 模拟表单数据上传(FormData) 分片上传 使用HTML5 拖拽.粘贴上传 上传插件(WebUploader) 总结 作为程序员的我们,经常会要用到文件的上传和下载功能.到了需要用的时候,各种查资料.有木有..有木有....为了方便下次使用,这里来做个总结和备忘. 利用表单实现文件上传 最原始.最简单.最粗暴的文件上传.前端代码: //方式1 <form action="/Home/SaveFile1"

使用ajax提交form表单,包括ajax文件上传 转http://www.cnblogs.com/zhuxiaojie/p/4783939.html

使用ajax提交form表单,包括ajax文件上传 前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){ ... },"json"); 又或者是这样的ajax $.ajax({ url:"${pageContext.request.contextPath}/public/testupload", type:"post", data:{username:username},

springMVC学习总结(二) --springMVC表单处理和静态文件处理

springMVC学习总结(二) --springMVC表单处理和静态文件处理 根据springMVC学习总结(一) --springMVC搭建 搭建项目 一.表单处理 1.创建两个java类 Student.java, StudentController.java. 2.在jsp字文件夹下面创建两个视图文件student.jsp.result.jsp. 项目目录结构如下: 实体类Student.java package com.myl.controller.form; /** * * @aut

文件的上传(表单上传和ajax文件异步上传)

一.表单上传: html客户端部分: <form action="upload.ashx" method="post" enctype="multipart/form-data"> 选择文件:<input type="file" name="file1" /><br /> <input type="submit" value="上传&q

struts2 文件的上传下载 表单的重复提交 自定义拦截器

文件上传中表单的准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置为 post 需添加 <input type=“file”> 字段. Struts 对文件上传的支持 在 Struts 应用程序里, FileUpload 拦截器和 Jakarta Commons FileUpload 组件可以完成文件的上传. 步骤:1. 在 Jsp 页面的文件上传表单里使用

jquery ajax提交整个表单参数

转自 : http://www.jb51.net/article/35085.htm function submit(){ var formData=$("form").serialize();  $.ajax({  type: "POST",  url: "/index.aspx",  processData:true,  data:formData,  success: function(data){  $("#result&quo

Servlet之doPost获取表单参数

/** * 获取表单参数 */ private void readForm() { // TODO Auto-generated method stub Enumeration e = request.getParameterNames(); while (e.hasMoreElements()) { String parameterName = (String) e.nextElement(); String parameterValue= request.getParameter(param