前段时间面向复制粘贴编程完成了java组的寒假项目,但是很多细节还是没了解...现在先把输入弄懂。

@RequestParam注解

@Controller
public class TestController {
public void TestRequestParam( @RequestParam("username") String name, @RequestParam ( "password" ) String pwd)
{
  //do something
}
}

通过@RequestParam可以将get,post请求所带参数的传递给后面所跟的形参。

对于文件上传

public class TestController {   
@RequestMapping(value = "/upload", method = RequestMethod.POST)
  public String uploadExcel(@RequestParam("file") MultipartFile file,Model model) {
       Object result;
       try {
           result = resolveExcelService.resolveExcel(file);
      } catch (BusinessException e) {
           e.printStackTrace();
           model.addAttribute("log", ApiResponse.failOf(-1, e.getErrMsg()));
           return "failure";
      }
       model.addAttribute("log", ApiResponse.successOf(result));
       return "success";
  }
}

这里获取了MultipartFile要通过getInputStream()转换成输入流来读取文件内容。

@RequestBody注解

@Controller
public class TestController {
   public void TestRequestBody( @RequestBody Map<String,Object> reqMap ){
       String name = reqMap.get("username").toString();
       String pwd = reqMap.get("password").toString();
  }
}

@RequestBody注解可将参数存入一个Map中再供调用。

HttpServletRequest

HttpServletRequest可使用的方法有请求头相关 数据相关(继承自javax.servlet.ServletRequest),

通过post方法传输form表单数据

样例form表单

<form action="/postForm" method="post">
  编号:
  <input type="text" name="userid"><br>
  用户名:
  <input type="text" name="username"><br>
  密码:
  <input type="password" name="userpass" value="请输入密码"><br>
  <!--单选按钮,通过checked指定默认选中,名称必须一样,其中value为真正需要的内容-->
  性别(单选框):
  <input type="radio" name="sex" value="男" checked>男
  <input type="radio" name="sex" value="女">女<br>
  <!--下拉列表框,通过<option>元素指定下拉的选项-->
  部门(下拉框):
  <select name="dept">
      <option value="技术部">技术部</option>
      <option value="销售部" SELECTED>销售部</option>
      <option value="财务部">财务部</option>
  </select><br>
  <!--复选框,可以同时选择多个选项,名称必须一样,其中value为真正需要的内容-->
  兴趣(复选框):
  <input type="checkbox" name="inst" value="唱歌">唱歌
  <input type="checkbox" name="inst" value="游泳">游泳
  <input type="checkbox" name="inst" value="跳舞">跳舞
  <input type="checkbox" name="inst" value="编程" checked>编程
  <input type="checkbox" name="inst" value="上网">上网
  <br>
  <!--大文本输入框,宽度为34列,高度为5行-->
  说&nbsp;&nbsp;明(文本域):
  <textarea name="note" cols="34" rows="5">
   </textarea>
  <br>
  <!--隐藏域,在页面上无法看到,专门用来传递参数或者保存参数-->
  <input type="hidden" name="hiddenField" value="hiddenvalue"/>
  <!--提交表单按钮,当点击提交后,所有填写的表单内容都会被传输到服务器端-->
  <input type="submit" value="提交(提交按钮)">
  <!--重置表单按钮,当点击重置后,所有表单恢复原始显示内容-->
  <input type="reset" value="重置(重置按钮)">
</form>

controller

@Controller
@RequestMapping("/postForm")
public class TestController extends HttpServlet {
   public void getFromForm( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
       String userid = request.getParameter("userid");
       String userpass = request.getParameter("userpass");
String sex = request.getParameter("sex");
String dept = request.getParameter("dept");
String[] insts = request.getParameterValues("inst");
       //复选框使用一个数组通过.getParameterValues方法接受
  }
}

不使用注解

简单的几个参数

当形参名与get请求所带参数名相同时也可省略注解。

@Controller
public class TestController {
public void getParamBySimple(String username, String password) {
//do something
}
}

使用pojo对象

也可将数据包含到简单的POJO类

@Controller
public class TestController {
public void getParamByPojo(User user) {
//do something
}
}
public class User{
   private String username;
   private String password;
   //getter,setter...
}

注意:这里其实是 SpringMVC 通过反射调用的 User 的无参的构造方法 new 的对象,然后调用两个 setter 方法来进行的参数注入,如果 User 类没有无参构造或者没有响应的 setter 方法结果就为空。


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。