Java框架(十四)之springMVC的注解开发

一、注解入门

1.配置springMVC配置文件

<!-- 添加注解扫描 -->
<context:component-scan base-package="com.qf"></context:component-scan>
<!-- 添加注解映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
<!-- 注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsps/"></property>
<property name="suffix" value=".jsp"></property>
</bean>		

映射器和适配器的注解版

mvc:annotation-driven</mvc:annotation-driven>

2.配置web.xml文件

 <!-- springmvc的核心控制器
  	DispatcherServlet
   -->
   <servlet>
   		<servlet-name>springmvc</servlet-name>
   		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   		<!-- 指定springmvc的配置文件 
   			默认路径是:/WEB-INF/servlet的name-servlet.xml
   		-->
   		<init-param>
   			<param-name>contextConfigLocation</param-name>
   			<param-value>classpath:springmvc-servlet.xml</param-value>
   		</init-param>
   </servlet>
   <servlet-mapping>
   		<servlet-name>springmvc</servlet-name>
   		<url-pattern>/</url-pattern><!-- /*:jsp也会被拦截 -->
   </servlet-mapping>
   
   <!-- 处理post请求乱码 -->
   <filter>
	   	<filter-name>encodingFilter</filter-name>
	   	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	   	<init-param>
	   		<param-name>encoding</param-name>
	   		<param-value>utf-8</param-value>
	   	</init-param>
   </filter>
   <filter-mapping>
	   	<filter-name>encodingFilter</filter-name>
	   	<url-pattern>/*</url-pattern>
   </filter-mapping>

二、Controller

@Controller:用于标识是处理器类.表示把我的控制器对象交给spring来创建。

<!-- 添加注解扫描!!! -->
	<context:component-scan base-package="com.zxy.controller"></context:component-scan>

三、RequestMapping

@RequestMapping:请求到处理器功能方法的映射规则;
URL路径映射:@RequestMapping(value="/user")@RequestMapping("/user")

@RequestMapping("/useredit/{userid}")
    	public String useredit(@PathVariable String userid) throws Exception{
    		//方法中使用@PathVariable获取useried的值,		model.addAttribute("userid", userid);
    		return"/user/useredit";
    	}   useredit?id=1;
    实现restFul,所有的url都是一个资源的链接,有利于搜索引擎对网址收录。
    多个占位符:
    @RequestMapping("/useredit/{groupid}/{userid}")
    public String useredit(@PathVariable String groupid,@PathVariable String userid) throws Exception{
    		//方法中使用@PathVariable获取useried的值		model.addAttribute("groupid", groupid);
    		return"/user/useredit";
    	}

四、RequestParam

value:参数名字,即入参的请求参数名字,如value=“studentid”表示请求的参数区中的名字为studentid的参数的值将传入;
required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报400错误码;
defaultValue:默认值,表示如果请求中没有同名参数时的默认值

public String userlist(			@RequestParam(defaultValue="2",value="group",required=true) String groupid) {
}

形参名称为groupid,但是这里使用value="group"限定参数名为group,所以页面传递参数的名必须为group。这里通过required=true限定groupid参数为必需传递,如果不传递则报400错误,由于使用了defaultvalue=”2”默认值即使不传group参数它的值为”2”,所以页面不传递group也不会报错,如果去掉defaultvalue=”2”且定义required=true则如果页面不传递group则会报错。

五、Redirect

Controller方法返回结果重定向到一个url地址,如果方式:

return "redirect:/user/userlist.do";

注意:
• redirect:add.do 与 redirect:/user/add.do" 同一个类
在同一个类里面进行跳转。上面2个都可以实现跳转。但是有区别:
第一个是同一个根路径下面跳转。第二个是在项目路径下进行跳转。
• 不同的类进行跳转
不同的类进行跳转只能使用:redirect:/user/add.do进行跳转。即是从项目路径下来查询。
redirect方式相当于“response.sendRedirect()”,转发后浏览器的地址栏变为转发后的地址,因为转发即执行了一个新的request和response。
由于新发起一个request原来的参数在转发时就不能传递到下一个url,如果要传参数可以/user/userlist.do后边加参数,如下:
/user/userlist.action?groupid=2&……

六、Forward

controller方法执行后继续执行另一个controller方法。

return "forward:/user/userlist.action";

forward方式相当于“request.getRequestDispatcher().forward(request,response)”,转发后浏览器地址栏还是原来的地址。转发并没有执行新的request和response,而是和转发前的请求共用一个request和response。所以转发前请求的参数在转发后仍然可以读取到。

@RequestMapping("/c")
	public String c(String groupid,UserVo userVo)throws Exception{		
		System.out.println("...c...."+groupid+"...user..."+userVo.getUser());
		return "forward:/to/d.action";
	}	
	@RequestMapping("/d")
	public String d(String groupid,UserVo userVo)throws Exception{		
		System.out.println("...d...."+groupid+"...user..."+userVo.getUser());
		return "success";
}

注意:@ResponseBody (把方法的返回值转成json)
@RequestBody

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值