SpringMVC学习笔记

一、入门

	1、创建web项目
		1)打开idea ->new ->project->java enterprise->(勾选上)web application->next ->输入项目名
		2)导入jar包
		再WEB-INF下创建一个lib文件夹->将jar包导入lib文件夹中->选择右键->add as library
		3)添加配置文件
			再src目录下创建一个springmvc.xml文件
			在springmvc.xml中添加如下内容:
			<?xml version="1.0" encoding="UTF-8"?>
			<beans xmlns="http://www.springframework.org/schema/beans"
				xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        	  xmlns:context="http://www.springframework.org/schema/context"
        		xmlns:mvc="http://www.springframework.org/schema/mvc"
        		xmlns:aop="http://www.springframework.org/schema/aop"
        		xmlns:tx="http://www.springframework.org/schema/tx"
        	xsi:schemaLocation="http://www.springframework.org/schema/beans
        	http://www.springframework.org/schema/beans/spring-beans.xsd
        	http://www.springframework.org/schema/context
        	http://www.springframework.org/schema/context/spring-context.xsd
        	http://www.springframework.org/schema/aop
        	http://www.springframework.org/schema/aop/spring-aop.xsd
       	 	http://www.springframework.org/schema/mvc
        	http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        	http://www.springframework.org/schema/tx
        	http://www.springframework.org/schema/tx/spring-tx.xsd">
        	
			<!--开启注解扫描-->
        	<context:component-scan base-package="com.itlike"/>
			</beans>
		4)配置前端控制器
		再web.xml中配置如下内容:
		<?xml version="1.0" encoding="UTF-8"?>
		<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         	version="4.0">
    	<!--配置前端控制器-->
    	<servlet>
        	<servlet-name>mySpringMVC</servlet-name>
        	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        	<init-param>
            	<param-name>contextConfigLocation</param-name>
            	<param-value>classpath:springmvc.xml</param-value>
        	</init-param>
    	</servlet>
    	<servlet-mapping>
        	<servlet-name>mySpringMVC</servlet-name>
        	<url-pattern>*.action</url-pattern>
    	</servlet-mapping>
		</web-app>
	5)创建控制器
		(1)在src目录下创建一个包com.itlike.springmvc
		(2)在包中创建一个l类MyController
			@Controller
			public class MyController {
    			@RequestMapping("/first.action")
    			public ModelAndView show(){
        			//创建ModeANndView 用来从存放数据视图
        			ModelAndView modelAndView=new ModelAndView();
        			//请求过来后 跳转到另一个界面  往另一个
        			modelAndView.addObject("name","myxq");
        			//设置视图jsp
        			modelAndView.setViewName(/result.jsp");
        			return modelAndView;
    			}
			}
	6)创建jsp
		(1)ideal实现热部署
			https://blog.csdn.net/weixin_42831477/article/details/82229436
	    (2)点击项目名称SpringMVCProject1 点击RJebel 进行热部署
		(3)在web目录下建立两个jsp文件
		index.jsp:
			<html>
  			<head>
    			<title>$Title$</title>
  			</head>
  			<body>
  				<a href="${pageContext.request.contextPath}/first.action">发送多个,</a>
  			</body>
			</html>
		result.jsp
			<html>
			<head>
    			<title>Title</title>
			</head>
			<body>
    			<h1>result  ${name}  </h1>
			</body>
			</html>
	7)执行
		点击rebel debug Tomcat 7.0
		如果在web-inf下的myxq文件下建立一个itlike.jsp文件
		使index.jsp能跳转到itlike.jsp有两种方式:
		(1)modelAndView.setViewName("/WEB-INF/myxq/itlike.jsp");
		(2)在springmvc.xml中配置
		<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <property name="prefix" value="/WEB-INF/myxq"></property>
                <property name="suffix" value=".jsp"></property>
        </bean>
        在控制器中 modelAndView.setViewName("itlike")
    8)执行转发的两种方式
    	@Controller
		public class MyController {

    		//设置数据
    		@RequestMapping("/first.action")
    		public ModelAndView show() {
        		//创建ModeANndView 用来从存放数据视图
        		ModelAndView modelAndView = new ModelAndView();
        		//请求过来后 跳转到另一个界面  往另一个
        		modelAndView.addObject("name", "myxq");
        		//设置视图jsp
        		modelAndView.setViewName("/result.jsp");
        		return modelAndView;
    		}
    		//不需要设置数据
    		@RequestMapping("/second.action")
    		public String show2() {
        		return "/result.jsp";
    		}
		}
	9)重定向
		@Controller
		public class MyController {

    		//设置数据
    		@RequestMapping("/first.action")
    		public ModelAndView show() {
        		//创建ModeANndView 用来从存放数据视图
        		ModelAndView modelAndView = new ModelAndView();
        		//请求过来后 跳转到另一个界面  往另一个
        		modelAndView.addObject("name", "myxq");
        		//设置视图jsp
        		modelAndView.setViewName("redirect:/result.jsp");
        		return modelAndView;
    		}
    		//不需要设置数据
    		@RequestMapping("/second.action")
    		public String show2() {
        		return "redirect:/result.jsp";
    		}
		}

在这里插入图片描述

二、SpringMVC Request接收参数

	1、创建web项目 如上 
	2、在项目下创建单独的source文件夹存放.xml文件
		右击source文件夹 mark resource as-> resourse root
	3、web.xml
		中使用/
	    <servlet-mapping>
        	<servlet-name>mySpringMVC</servlet-name>
        	<url-pattern>/</url-pattern>
    	</servlet-mapping>
	4、
		在index.jsp中输入参数
		 <a href="${pageContext.request.contextPath}/first?id=1&name=itlike">first.jsp</a>
 		 <a href="${pageContext.request.contextPath}/second?id=1&name=itlike">second.jsp</a>
 		 在控制器中接收
		@Controller
		public class MyController {
    		@RequestMapping("/first")
    		public String myform(HttpServletRequest request){
        		String id=request.getParameter("id");
        		String name=request.getParameter("name");
        		System.out.println(id);
       			 System.out.println(name);
        		return "/second.jsp";
    		}
    		//id 参数名称必须和前面传进来的参数名相同
    		@RequestMapping("/second")
    		public String myform2(Integer id,String name) {
        		System.out.println(id);
        		System.out.println(name);
        		return "/result.jsp";
    		}
    		//id 参数名称也可以和传入的参数不同 但必须用RequestParam
    		//required 传参要求 默认true
    		@RequestMapping("/second")
    		public String myform3(@RequestParam(value="id",required = 		false,defaultValue = "100") Integer idkey, String name) {
        		System.out.println(idkey);
        		System.out.println(name);
        		return "/result.jsp";
    		}
		}
	

三、javebean接收参数

	1、在com.itlike.domain包下创建一个javebean User
		里面有两属性 和getter setter toString
		private String user_name;
    	private String user_age;
    2、MyControler
    	//bean User类中的属性名称必须和index中传入的属性名称相同
    	@RequestMapping("/fouth")
   	 	public String myform4(User user) {
        	System.out.println(user);
        	return "/result.jsp";
    	}

四、数组接收参数

	1、纯数组
		1)MyController
		@RequestMapping("/five")
    	public String myform4(String name[]) {
        	System.out.println(Arrays.toString(name));
        	return "/result.jsp";
    	}
    	2)index.jsp
     	<form action="${pageContext.request.contextPath}/five">
      	user:<input type="text" name="user_name"><br>
	      age:<<input type="text" name="user_age"><<br>
	      <input type="submit" value="提交">
	    </form>
	2、封装
		1)MyController
			@RequestMapping("/six")
		    public String myform5(User user) {
		        System.out.println(user);
		        return "/result.jsp";
		    }
	    2)javabean User
	    	private String user_name;
		    private String user_age;
		    private   String hobby[];
		 3)jsp
			 <form action="${pageContext.request.contextPath}/six">
		      user:<input type="text" name="user_name"><br>
		      age:<<input type="text" name="user_age"><<br>
		      爱好:<input type="checkbox" name="hobby" value="篮球">篮球
		      <input type="checkbox" name="hobby" value="乒乓">乒乓
		      <input type="checkbox" name="hobby" value="足球">足球
		      <input type="submit" value="提交">
		    </form>
	3、包装类接收
		1)MyController
			 @RequestMapping("/seven")
			    public String myform7(User user) {
			        System.out.println(user);
			        return "/result.jsp";
			    }
		2)index.jsp
			<form action="${pageContext.request.contextPath}/seven">
		      user:<input type="text" name="user_name"><br>
		      age:<<input type="text" name="user_age"><<br>
		      爱好:<input type="checkbox" name="hobby" value="篮球">篮球
		      <input type="checkbox" name="hobby" value="乒乓">乒乓
		      <input type="checkbox" name="hobby" value="足球">足球<br>
		      ------宠物------<br>
		      宠物名称:<input type="text" name="dog.name"><br>
		      宠物颜色:<<input type="text" name="dog.color"><br>
		      <input type="submit" value="提交">
		    </form>
		 3)javabean
		 	Dog:
			    private  String name;
			    private String color;
			User:
				private String user_name;
			    private String user_age;
			    private   String hobby[];
			    private Dog dog;
	4、list接收
		1)MyController:
		 @RequestMapping("/eight")
		    public String myform8(User user) {
		        System.out.println(user);
		        return "/result.jsp";
		    }
		 2)index.jsp
			 <form action="${pageContext.request.contextPath}/eight">
		      user:<input type="text" name="user_name"><br>
		      age:<<input type="text" name="user_age"><<br>
		      爱好:<input type="checkbox" name="hobby" value="篮球">篮球
		      <input type="checkbox" name="hobby" value="乒乓">乒乓
		      <input type="checkbox" name="hobby" value="足球">足球<br>
		      ------宠物------<br>
		      宠物名称:<input type="text" name="dog.name"><br>
		      宠物颜色:<<input type="text" name="dog.color"><br>
		
		      宠物名称:<input type="text" name="dog[0].name"><br>
		      宠物颜色:<<input type="text" name="dog[0].color"><br>
		
		      宠物名称:<input type="text" name="dog[1].name"><br>
		      宠物颜色:<<input type="text" name="dog[1].color"><br>
		      <input type="submit" value="提交">
		    </form>
		 3)javabean
		    User:
		    	private String user_name;
			    private String user_age;
			    private   String hobby[];
			    private Dog dog;
			    private List<Dog> dogs;
			 Dog:
			 	private  String name;
    			private String color;
  	5、日期转换
  		1)Mycontroller2:
  		 	@RequestMapping("/convert")
		    public ModelAndView testconvert(String age, Date date) {
		        //创建ModeANndView 用来从存放数据视图
		        System.out.println(age);
		        System.out.println(date);
		        ModelAndView modelAndView = new ModelAndView();
		        modelAndView.setViewName("/result.jsp");
		        return modelAndView;
		    }
		2)convert.jsp
			<form action="${pageContext.request.contextPath}/convert">
	        年龄:<input type="text" name="age">
	        生日:<input type="text" name="date">
	        <input type="submit" value="提交">
	    	</form>
	    3)存在的问题:
	    	上面做和这种形式  日期输入格式智能是2020/10/01
	 6、转换器的使用
	 	1)定义转换器  
	 		public class DateConverter implements Converter<String, Date> {
			    @Override
			    public Date convert(String s){
			        if(s!=null){
			            SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
			            try{
			                return simpleDateFormat.parse(s);
			            }catch (ParseException e){
			                e.printStackTrace();
			            }
			        }
			        return null;
			    }
		2)在springmvc.xml中进行配置
			<bean id="dateConverter" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
	            <property name="converters">
	                <list>
	                    <bean class="com.itlike.web.converter.DateConverter"></bean>
	                </list>
	            </property>
        	</bean>
        	<!--注解驱动-->
        	<mvc:annotation-driven conversion-service="dateConverter"/>
    7、post请求乱码问题解决方案
    	在web.xml中配置过滤器
    	 <!-- 解决post乱码问题 -->
		    <filter>
		        <filter-name>encoding</filter-name>
		        <filter-class>org.springframework.web.filter.
		            CharacterEncodingFilter</filter-class>
		        <!-- 设置编码参是UTF8 -->
		        <init-param>
		            <param-name>encoding</param-name>
		            <param-value>UTF-8</param-value>
		        </init-param>
		    </filter>
		    <filter-mapping>
		        <filter-name>encoding</filter-name>
		        <url-pattern>/*</url-pattern>
		    </filter-mapping>

五、RequestMapping相关属性

	1、value :多个路径访问同一个方法
		1)MyController3:
		@RequestMapping(value={"testrequestmapping1","testrequestmapping2"})
	    public String testquest(){
	        return "/second.jsp";
	    }
	    2)index.jsp
	    <a href="${pageContext.request.contextPath}/testrequestmapping1">请求方式一</a>
    	<a href="${pageContext.request.contextPath}/testrequestmapping2">请求方式二</a>
    2、method
    	1)MyController3:
    	
		    //指定请求方式为get  默认都允许
		    @RequestMapping(value="testmethod",method = {RequestMethod.GET,RequestMethod.POST})
		    public String testmethod(){
		        System.out.println("testmethod...");
		        return "/second.jsp";
		    }
		 2)jsp:
			 <form action="${pageContext.request.contextPath}/testmethod" method="get">
	        	<input type="submit" value="提交">
	    	</form>
	3、param
		1)MyController
			//param的使用  要求name属性必须为itlike age不为1 否则报错
		    @RequestMapping(value="testparams",params = {"name=itlike","age!=1"})
		    public String testparams(){
		        System.out.println("testparams...");
		        return "/second.jsp";
		    }
		 2)jsp
		  <a href="${pageContext.request.contextPath}/testparam?name=itlike">请求方式三</a>
	4、headers:
		1)MyController
		  //headers的使用  要求主机必须为8080 必须从http://localhost:8080/requestmapping.jsp来的信息才能访问
    		@RequestMapping(value="testheaders",params = {"name=itlike","age!=1"},headers = {"Host=localhost:8080","Referer=http://localhost:8080/requestmapping.jsp"})
    		public String testheaders(){
		        System.out.println("testheaders...");
		        return "/second.jsp";
		    }
		2)jsp:
			<a href="${pageContext.request.contextPath}/testheaders?name=itlike">请求方式四</a>
	5、地址通配符
		?:匹配单个字符
		*:匹配多个字符:@RequestMapping("testant/*/ac")代表中间只能是一级
		**:匹配多重路径:@RequestMapping("testant/**/ac")代表中间可以是任意级目录
		1)jsp:
		//testant/ac 取决于@RequestMapping("testant/??")  
		<a href="${pageContext.request.contextPath}/testant/ac">请求方式五</a>
		2)MyController
		@RequestMapping("testant/??")
    	public String testant(){
        	System.out.println("testant...");
        	return "/second.jsp";
    	}
   
		

@PathVariable

	1、rest风格:
		资源定位及资源操作的风格
		不是协议,可以遵循,也可以不遵循
	2、REST风格请求
		REST 即 Representational State Transfer (资源)
		表现层状态转化
		用URL定位资源,用HTTP描述操作
		是目前最流行的一种互联网软件架构
		它结构清晰、符合标准、易于理解、扩展方便,所以正得
		到越来越多网站的采用
		使用POST, DELETE, PUT, GET 分别对应 CRUD
		Spring3.0 开始支持 REST 风格的请求
	3、传统的操作资源
		http://localhost:8080/get.action?id=10 查询
		get
		http://localhost:8080/add.action 新
		增 post
		http://localhost:8080/update.action 修
		改 post
		http://localhost:8080/delete.action?id=10
		删除 post
	4、restful操作资源
		http://localhost:8080/goods/1 查询GET
		http://localhost:8080/goods 新增POST
		http://localhost:8080/goods 更新PUT
		http://localhost:8080/goods/1 删除DELETE
	5、rest
   		1)MyController3
   			//可以获取浏览器URL rest/1
	   		@RequestMapping("rest/{id}")
		    public String testrest(@PathVariable Integer id){
		        System.out.println(id);
		        return "/second.jsp";
		    }
		  2)jsp
		  <a href="${pageContext.request.contextPath}/rest/1">请求方式rest</a>
	6、发送put与delete请求
		默认情况下form表单是bbu不支持put delete请求
		spring3.0添加了一个HiddenHttpMethodFilter
		可以将post转换为put delete请求
		1)在web.xml中配置过滤器
			 <!--解决put delete请求问题-->
		    <filter>
		        <filter-name>hiddenmethod</filter-name>
		        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
		    </filter>
		    <filter-mapping>
		        <filter-name>hiddenmethod</filter-name>
		        <url-pattern>/*</url-pattern>                      */
		    </filter-mapping>
		2)jsp
			<form action="${pageContext.request.contextPath}/testRestForm" method="post">
	        	<input type="hidden" name="_method" value="put">
	        	<input type="submit" >
	    	</form>
	    3)MyController
	     @RequestMapping(value = "testRestForm/{id}",method = RequestMethod.PUT)
	    public String testRestForm(@PathVariable Integer id){
	        System.out.println(id);
	        return "redirect:/localsecond";
	    }
	    @RequestMapping("localsecond")
	    public String localsecond(){
	        return "/second.jsp";
	    }
	7@RequestHeader:

七、@RequestHeader

	1、作用:获取请求头信息
	2、MyController
		 	@RequestMapping("testHeader")
		    public String testHeader(@RequestHeader("Host") String host,
		                             @RequestHeader("Referer") String referer,
		                             @RequestHeader("Cookie") String cookie){
		        System.out.println("testHeader");
		        System.out.println(host);
		        System.out.println(referer);
		        System.out.println(cookie);
		        return "/second.jsp";
		    }

八、@CookieValue

	1、在@RequestHeader中获取的cookie是一系列cookie的集合
	2、通过JSESSIONID获取单个cookie
	@RequestMapping("testHeader")
    public String testHeader(@RequestHeader("Host") String host,
                             @RequestHeader("Referer") String referer,
                             @RequestHeader("Cookie") String cookie,
                             @CookieValue("JSESSIONID") String sessionid){
        System.out.println("testHeader");
        System.out.println(host);
        System.out.println(referer);
        System.out.println(cookie);
        System.out.println(sessionid);
        return "/second.jsp";
    }

九、页面传值

	1、ModelAndView 传递和接收数据
		1)MyController
		    @RequestMapping("testModelAndView")
		    public ModelAndView testModelAndView(){
		        ModelAndView modelAndView=new ModelAndView();
		        //把数据写到request域中
		        modelAndView.addObject("name","itlike");
		        modelAndView.setViewName("result.jsp");
		        return modelAndView;
		    }
		  2)index.jsp:
		  	<a href="${pageContext.request.contextPath}/testModelAndView">测试testModelAndView</a>
		  3)result.jsp
		    <h1>result...${requestScope.name}</h1>
	2、model接收参数
		1)addAttribute(String attributeName,Object attributeValue)
			1)MyController
				@RequestMapping("testModel")
			    public String testModel(Model model){
			        //把数据写到request域
			        model.addAttribute("name","itlike001");
			        return "result.jsp";
			    }
			 2)index.jsp
			 	 <a href="${pageContext.request.contextPath}/testModel">测试testModel</a>
			3)result.jsp
				<h1>result...${requestScope.name}</h1>
		2)Map<String,Object>asMap();
			将当前的model转换成Map  
		3)Model addAttribute(Object attributeValue);
			1)MyController
				 //Model addAttribute(Object attributeValue)的使用
			    @RequestMapping("testModelAddAttribute")
			    public String testModelAddAttribute(Model model){
			        //把数据写到request域
			        model.addAttribute("name","itlike001");
			
			        Goods mygoods=new Goods();
			        mygoods.setName("goods1");
			        mygoods.setPrice("10");
			
			        model.addAttribute(mygoods);
			        //{name=itlike001,goods=Goods{name='goods1',price='10'}}
			        //key值为mygoods所在类名
			        System.out.println(model.asMap());
			
			        return "result.jsp";
			    }
			2)index.jsp
				  <a href="${pageContext.request.contextPath}/testModelAddAttribute">测试testModelAddAttribute</a>
			3)result.jsp		
			    //Model addAttribute(Object attributeValue)数据的获取
			    <h1>result...${goods.name}---${goods.price}</h1>
		4)Model addAllAttributes(Map<String,?>attributes)
			1)MyController
				//Model addAllAttributes(Map<String,?>attributes)
			    //将Map中的内容复制到当前的model中 如果当前model存在相同key 内容会被覆盖
			    @RequestMapping("testModelAddAllAttributes1")
			    public String testModelAddAllAttributes1(Model model){
			        HashMap<String,Object> hashMap=new HashMap<>();
			        hashMap.put("name","itlike002");
			        hashMap.put("hot",1000);
			        model.addAllAttributes(hashMap);
			        System.out.println(model.asMap());
			        return "result.jsp";
			    }
		   2)index.jsp
		   		<a href="${pageContext.request.contextPath}/testModelAddAllAttributes1">测试testModelAddAllAttributes1</a>
		5)Model addAllAttributes(Collection<?>attributeValues)
		    1)MyController
		    //Model addAllAttributes(Collection)
		    //将集合中类型作为key 将所提供的Collection z中的所有属性复制到这个Map中 如果有相同类型会存在覆盖现象
		    //运行结果 {string =myxq ,integer=100}
		    @RequestMapping("testModelAddAllAttributes2")
		    public String testModelAddAllAttributes2(Model model){
		        ArrayList<Object> arrayList=new ArrayList<>();
		        arrayList.add("myxq");
		        arrayList.add(100);
		        model.addAllAttributes(arrayList);
		        System.out.println(model.asMap());
		        return "result.jsp";
		    }
		   2)index.jsp
		   	<a href="${pageContext.request.contextPath}/testModelAddAllAttributes2">测试testModelAddAllAttributes2</a>
		6)Model mergeAttributes(Map<String,?>attributes)
			和Model addAttributes(Map<String,?>attributes)一样 只是它不会覆盖之前的内容
		7)boolean containsAttribute(String attributeName);
			判断model里有没有包含对应key值  有则返回true没有返回 false
			@RequestMapping("testModelContainsAttribute")
		    public String testModelContainsAttribute(Model model){
		        model.addAttribute("name","itlike");
		        Map map=new HashMap<>();
		        map.put("name","itlike110");
		        model.mergeAttributes(map);
		        System.out.println(model.containsAttribute("name"));
		        return "result.jsp";
		    }
	3、Map接收参数
		1)index.jsp
			<a href="${pageContext.request.contextPath}/testMap">测试testMap</a>
		2)MyController
			//Map接收参数
		    @RequestMapping("testMap")
		    public String testMap(Map map){
		        map.put("key1","value1");
		        map.put("key2","value2");
		        return "/result.jsp";
		    }
		 3)result.jsp
		 	<h1>result...${requestScope.key1}</h1>
	4、SessionAttributes注解
		1)再类上加注解
			@Controller
			//把model中key为name存d到session中
			@SessionAttributes("name")
			//把model中为String类型都写到session
			//@SessionAttributes(types=String.class)
			public class MyController {}
		2)MyController
			 @RequestMapping("testSession")
			    public String testSession(Model model){
			        //把数据存在request中‘
			        model.addAttribute("name","itkkk") ;
			        model.addAttribute("name2","bd");
			        return "/result2.jsp";
			    }
		3)index.jsp
			 <a href="${pageContext.request.contextPath}/testSession">测试testSession</a>
	5@SessionAttribute注解
		1)MyController
			//从Session中取数据 所以先得Session中有数据才行 否则报错
		    @RequestMapping("testSession2")
		    public String testSession2(@SessionAttribute("name") String name){
		        System.out.println(name);
		        return "/result2.jsp";
		    }
		  2)index.jsp
		  	<a href="${pageContext.request.contextPath}/testSession2">测试testSession2</a><br>

十、form标签与验证

	1、mvc-view-controller配置:
		当我们发送一个请求时,如果没有找到对应的mapping 则会到配置文件当中匹配mvc:view-controller
		可以从index.jsp跳转到result.jsp 无需借助Controller
		1)index.jsp
			<a href="${pageContext.request.contextPath}/testView">测试View</a>
		2)result.jsp
			 <h1>结果页---</h1>
		3)springmvc.xml
			<!--可以从index.jsp跳转到result.jsp 不需要借助MyController-->
        	<mvc:view-controller path="testView" view-name="result.jsp"/>
	2、mvc:annotation-driven:
		1)Controller
			@Controller
			public class MyController {
			    @RequestMapping("testController")
			    public String testController(){
			        return "/result.jsp";
			    }
			}
		2)index.jsp
			<a href="${pageContext.request.contextPath}/testView">测试View</a>
		    <a href="${pageContext.request.contextPath}/testController">测试Controller</a>
		3)result.jsp
			<h1>result--</h1>
		4)springmvc.xml
			 <!--可以从index.jsp跳转到result.jsp 不需要借助MyController-->
	        <mvc:view-controller path="testView" view-name="result.jsp"/>
	        <mvc:annotation-driven/>
	   如果springmvc不加<mvc:annotation-driven><a href="${pageContext.request.contextPath}/testController">测试Controller</a>将会时效 因为mvc:view-controller的使用回答导致Controller失效
	3、form标签
		1)index.jsp
			 <a href="${pageContext.request.contextPath}/update/1">测试update更新</a>
		2)MyController
			@RequestMapping("update/{id}")
		    public String testUpdate(@PathVariable Integer id, Model model){
		        System.out.println(id);
		        User user=new User();
		        user.setAge(10);
		        user.setName("LL");
		        model.addAttribute("user",user);
		        return "/result.jsp";
		    }
		3)result.jsp
			再html标签之前添加:
				<%@taglib uri="http://www.springframework.org/tags/form" prefix="fm"%>
			body标签中添加:
				<fm:form modelAttribute="user">
		        	<fm:input path="username"/>
		        	<fm:input path="age"/>
		    	</fm:form>
		    必须添加modelAttribute="user"  如果不想添加则再Controller的model.addAttribute("user",user);"user"改成"command" 因为form默认为command
	4、check-box标签的使用
		1)MyController
			  @RequestMapping("testCheckBox/{id}")
			    public String testCheckBox(@PathVariable Integer id, Model model){
			        System.out.println(id);
			        User user=new User();
			        user.setAge(10);
			        user.setUsername("LL");
			        user.setGender(0);
			        String[] hobby=new String[]{"篮球","足球"};
			        user.setHobby(hobby);
			        model.addAttribute("user",user);
			
			        ArrayList<Object> arrayList=new ArrayList<>();
			        arrayList.add("足球");
			        arrayList.add("篮球");
			        arrayList.add("乒乓求");
			
			        model.addAttribute("allhobby",arrayList);
			        return "/result.jsp";
			    }
		2)index.jsp
			<a href="${pageContext.request.contextPath}/testCheckBox/1">测试testCheckBox更新</a>
		3)result.jsp
			<fm:form modelAttribute="user">
		        <fm:input path="username"/>
		        <fm:input path="age"/>
		        性别:<fm:radiobutton path="gender" value="0" label="男"/>
		        <fm:radiobutton path="gender" value="1" label="女"/>
		        爱好:<fm:checkboxes path="hobby" items="${allhobby}"/>
		    </fm:form>
		 再上述基础上进行修改:
		 	1)index.jsp
		 		 <a href="${pageContext.request.contextPath}/testCheckBox/1">测试testCheckBox更新</a>
		 	2)Conteolller
		 		@RequestMapping("update2")
			    public String testCheckBox(User user){
			        System.out.println(user);
			        return "/result2.jsp";
			    }
			3)result.jsp
				<fm:form modelAttribute="user" action="${pageContext.request.contextPath}/pudate2">
		        <fm:input path="username"/>
		        <fm:input path="age"/>
		        性别:<fm:radiobutton path="gender" value="0" label="男"/>
		        <fm:radiobutton path="gender" value="1" label="女"/>
		        爱好:<fm:checkboxes path="hobby" items="${allhobby}"/>
		
		        <input type="submit" value="修改">
		    </fm:form>
	5、select标签使用
		1)index.jsp
			<a href="${pageContext.request.contextPath}/testSelect">测试testSelect</a>
		2)Controller
			 @RequestMapping("testSelect")
		    public String testSelect(@PathVariable Integer id, Model model){
		        ArrayList<Object> arrayList=new ArrayList<>();
		        arrayList.add("足球");
		        arrayList.add("篮球");
		        arrayList.add("乒乓求");
		        model.addAttribute("allhobby",arrayList);
		
		        ArrayList<Object> petList=new ArrayList<>();
		        Pet pet1=new Pet();
		        pet1.setId(1);
		        pet1.setName("狗");
		        Pet pet2=new Pet();
		        pet1.setId(1);
		        pet1.setName("猫");
		        Pet pet3=new Pet();
		        pet1.setId(1);
		        pet1.setName("老虎");
		        petList.add(pet1);
		        petList.add(pet2);
		        petList.add(pet3);
		        model.addAttribute("petList",petList);
		
		        System.out.println(id);
		        User user=new User();
		        user.setAge(10);
		        user.setUsername("LL");
		        user.setGender(0);
		        String[] hobby=new String[]{"篮球","足球"};
		        user.setHobby(hobby);
		        user.setPet(pet2);
		        model.addAttribute("user",user);
		        return "/result.jsp";
		    }
		3)result.jsp
			<fm:form modelAttribute="user" action="${pageContext.request.contextPath}/pudate2">
	        <fm:input path="username"/>
	        <fm:input path="age"/>
	        性别:<fm:radiobutton path="gender" value="0" label="男"/>
	        <fm:radiobutton path="gender" value="1" label="女"/>
	        爱好:<fm:checkboxes path="hobby" items="${allhobby}"/>
	        宠物:<fm:select path="pet.id" items="${petList}" itemValue="id" itemLabel="name"/>
	        <input type="submit" value="修改">
	    </fm:form>	 
	6、服务器表单校验
		

十一、JSON数据格式处理

1、静态资源访问
	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值