Java-springMVC框架:springMVC取参数值、把值放入作用域方法
package com.zp.upload;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.json.JSONException;
import org.apache.struts2.json.JSONUtil;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;
import com.zp.bean.User;
@Controller
@RequestMapping("model")
@SessionAttributes("sessionUser")
public class ModelMapController {
/***********************************参数获取的方式**********************************************/
//http://localhost:8080/zpupload/model/index1/3/fyl.html
@RequestMapping("/index1/{id}/{name}")
public String index1(@PathVariable("id") Integer id,@PathVariable("name") String username) {
System.out.println("参数一:id="+id+",参数二:username="+username);
//结果为:参数一:id=3,参数二:username=fyl
return "model/index1";
}
//http://localhost:8080/zpupload/model/index2.html?id=56&name=mm
@ResponseBody
@RequestMapping("/index2")
public String index2(Integer id,String name) {
System.out.println("参数一:id="+id+",参数二:name="+name);
//结果:参数一:id=56,参数二:name=mm
return "index2";
}
//http://localhost:8080/zpupload/model/index3.html?username=mm&age=17&address=北京
@ResponseBody
@RequestMapping("/index3")
//参数名要和User 类属性名一致,属性也要相同(例如Integer不能穿String类型的值)
public String index3(User user) {
System.out.println("username="+user.getUsername()+";age="+user.getAge()+";address="+user.getAddress());
//结果:username=mm;age=17;address=北京
return "index3";
}
//http://localhost:8080/zpupload/model/index4.html?name=fyl
@ResponseBody
@RequestMapping("/index4")
public String index4(HttpServletRequest request) {
System.out.println(request.getParameter("name"));
//结果:fyl
return "index4";
}
/**************作用域的问题 reuqest session application ************/
/**************作用域的范围:request*******/
/**
* index5.jsp EL表达式返回值
1111 ${message }
2222 ${user.username }
3333 ${user.age }
4444 ${sessionMessage }
5555 ${sessionUser.username }
6666 ${sessionUser.age }
*/
@RequestMapping("/index5")
public String index5(HttpServletRequest request) {
request.setAttribute("message", "request作用域-HttpServletRequest-index5");
return "model/index5";
}
@RequestMapping("/index6")
public String index6(ModelMap map) {
map.addAttribute("message", "request作用域-ModelMap-index6");
return "model/index5";
}
@RequestMapping("/index7")
public ModelAndView index7() {
//视图和作用域融合体
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("model/index5");
modelAndView.addObject("message", "request作用域-ModelAndView-index7");
return modelAndView;
}
//@ModelAttribute 需要传递对象
@RequestMapping("/index8")
public String index8(@ModelAttribute("user") User user) {
user.setUsername("request作用域-@ModelAttribute-index8");
user.setAge(18);
return "model/index5";
}
/**************以流的方式返回数据 *******/
@ResponseBody
@RequestMapping("/data1")
public String data1(User user) throws JSONException {
user.setUsername("MM");
user.setAddress("北京");
List patterns = new ArrayList<>();
patterns.add(Pattern.compile("age|address"));
//不显示key为"age|address",不显示null,以JSON方式返回 {"username":"MM"}
return JSONUtil.serialize(user, patterns, null, false, true, false);
}
@RequestMapping("/data2")
public void data2(HttpServletResponse response) throws IOException, JSONException {
//response.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=utf-8");
User user = new User();
user.setUsername("ff");
user.setAge(18);
user.setAddress("海淀区");
PrintWriter writer = response.getWriter();
writer.println(JSONUtil.serialize(user));
writer.flush();
writer.close();
}
/**************作用域的范围:session*******/
@RequestMapping("/index9")
public String index9(HttpServletRequest request) {
//放入session域后,其他请求也会取到sessionMessage 值
request.getSession().setAttribute("sessionMessage", "session作用域-@-index9");
//request.setAttribute("sessionMession", "session作用域-@-index9");
return "model/index5";
}
/*的时候,方法的@ModelAttribute先调用 会调用一个指明:@ModelAttribute隐式的对象创建,
* 第一步
* 如果@SessionAttributes没有sessionUser属性
* 带@ModelAttribute方法先执行,
@ModelAttribute("sessionUser")
public User getUser() {
return new User();
}
上面代码及:User user = new User();
对象创建成功以后在赋给 @SessionAttributes
session.setAttribute("sessionUser",user);
* 第二步(index10)
@ModelAttribute("sessionUser") User user
User user = (User)session.getAttribute("sessionUser");
user.setAge(17);
* */
@RequestMapping("/index10")
public String index10(@ModelAttribute("sessionUser") User user) {
user.setUsername("session作用域-@ModelAttribute-index10");
user.setAge(17);
return "model/index5";
}
//@ModelAttribute隐式的对象
@ModelAttribute("sessionUser")
public User getUser() {
return new User();
}
/**************注销session*******/
@RequestMapping("/logout")
public String logout(HttpSession session) {
session.invalidate();//清除所有的会话
//session.removeAttribute("user");
return "model/index5";
}
@RequestMapping("logout2")
public String logout2(SessionStatus sessionStatus) {
sessionStatus.setComplete();
return "model/index5";
}
/*application的获取*/
//@RequestMapping("/application")
//public String application(ServletContext context){
//System.out.println(context);
//return "ok";
//}
//@RequestMapping("/application")
//public String application(HttpServletRequest request){
//request.getServletContext();
//return "ok";
//}
}