首页 > 代码库 > spring mvc 第一天【注解实现springmvc的基本配置】
spring mvc 第一天【注解实现springmvc的基本配置】
创建pojo,添加标识类的注解@Controller,亦可添加该Handler的命名空间:设置类的@RequestMapping(value="http://www.mamicode.com/hr")
该类中的方法(Handler)的标识使用@RequestMapping来配置 。可以设置该Handler的请求路径,和允许接收请求类型信息等;
该Handler返回String类型的逻辑视图名称。对应view视图信息。
1 @Controller 2 @RequestMapping 3 public class MyController { 4 @RequestMapping(value="http://www.mamicode.com/first.do",method=RequestMethod.POST) 5 public String doFirst(UserInfo info,Model model) { 6 System.out.println("uname"+info.getUname()+"\t"+info.getBooklist().get(0).getBookname()); 7 model.addAttribute("uname", info.getUname()); 8 return "index"; 9 } 10 }
使用注解配置Handler访问路径的通配符信息。更加便捷的访问Handler:
1 @RequestMapping(value="http://www.mamicode.com/*third.do")// *代表0个或者多个字符,以third结尾就行 2 public String doThird() { 3 return "index"; 4 } 5 6 @RequestMapping(value="http://www.mamicode.com/fourth*.do")// *代表0个或者多个字符,以fourth开始就行 7 public String doFourth() { 8 System.out.println("fourth==============="); 9 return "index"; 10 } 11 12 @RequestMapping(value="http://www.mamicode.com/**/fiveth.do")// **在hr和fiveth中间需要多级路径,或者没有路径均可访问 13 public String doFiveth() { 14 return "index"; 15 } 16 17 @RequestMapping(value="http://www.mamicode.com/*/sixth*.do")// *在hr和sixth中间,必须书写一级路径,而且必须是一级 18 public String doSixth() { 19 System.out.println("sixth==============="); 20 return "index"; 21 }
配置注解一定要在配置文件中开启扫描器。
<context:component-scan base-package="cn.happy"></context:component-scan>
配置对应逻辑试图名称的视图解析器。
这里使用的是InternalResourceViewResolver (访问站内资源)
1 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 2 <property name="prefix" value="http://www.mamicode.com/WEB-INF/jsp/"></property> 3 <property name="suffix" value="http://www.mamicode.com/.jsp"></property> 4 </bean>
上面的配置信息显示出在Controller中返回的视图皆为
/WEB-INF/jsp/*.jsp 其他的则访问不到,该写法有些死板,后面会说到全文通用的配法。
这里使用的是org.springframework.web.servlet.view.BeanNameViewResolver 配置视图解析器(第二种方案)
org.springframework.web.servlet.view.RedirectView (支持访问站外资源)
1 <!-- 视图解析题 --> 2 <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"></bean> 3 4 <!-- 外部 --> 5 <bean id="baidu" class="org.springframework.web.servlet.view.RedirectView"> 6 <property name="url" value="http://wwww.baidu.com"></property> 7 </bean> 8 9 <!-- 内部 --> 10 <bean id="internal" class="org.springframework.web.servlet.view.JstlView"> 11 <property name="url" value="http://www.mamicode.com/WEB-INF/jsp/index.jsp"></property> 12 </bean> 13 <!-- 外部 --> 14 <bean id="baidu" class="org.springframework.web.servlet.view.XmlViewResolver"> 15 <property name="location" value="http://www.mamicode.com/classpath:MyView.xml"></property> 16 </bean>
比较复杂的视图解析器的配置:
1 注册处理映射器 2 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 3 <property name="mappings"> 4 <props> 5 <prop key="/happy.do">firstController</prop> 6 </props> 7 </property> 8 </bean> 9 10 注册处理映射器 11 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 12 <property name="urlMap"> 13 <map> 14 <entry key="/hello.do" value="http://www.mamicode.com/firstController"></entry> 15 </map> 16 </property> 17 </bean> 18 注册方法名解析器 19 <bean id="MymethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver"> 20 <property name="mappings"> 21 <props> 22 <prop key="/first.do">doFirst</prop> 23 <prop key="/second.do">doSecond</prop> 24 </props> 25 </property> 26 </bean> 27 <bean id="MymethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"> 28 <property name="paramName" value="http://www.mamicode.com/actionName"></property> 29 </bean>
配置编码信息方式页面传递的信息出现乱码
CharacterEncodingFilter 通过配置forceEncoding属性为true设置request和response的编码格式皆为utf-8
1 <!--编码过滤器 --> 2 <filter> 3 <filter-name>CharacterEncoding</filter-name> 4 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 5 <init-param> 6 <param-name>encoding</param-name> 7 <param-value>utf-8</param-value> 8 </init-param> 9 <init-param> 10 <param-name>forceEncoding</param-name> 11 <param-value>true</param-value> 12 </init-param> 13 </filter> 14 15 <filter-mapping> 16 <filter-name>CharacterEncoding</filter-name> 17 <url-pattern>/*</url-pattern> 18 </filter-mapping>
配置springmvc核心过滤器 对所有相关.do的请求进行拦截
1 <servlet> 2 <servlet-name>springmvc</servlet-name> 3 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 4 <init-param> 5 <param-name>contextConfigLocation</param-name> 6 <param-value>classpath:applicationContext.xml</param-value> 7 </init-param> 8 <load-on-startup>1</load-on-startup> 9 </servlet> 10 <servlet-mapping> 11 <servlet-name>springmvc</servlet-name> 12 <url-pattern>*.do</url-pattern> 13 </servlet-mapping>
在这里如果拦截的信息配置成为了 :“/*” ,最好配置称为"/"
DispatcherServlet会将向动态页面请求,即向jsp页面的跳转请求也当做是一个普通的Controller请求。中央调度器会调用处理器映射器为其查找相应的处理器。当然是找不到的。jsp页面会报404错误 结论:/*会拦截动态资源
配置该节点解决无法访问静态资源的问题:
<mvc:default-servlet-handler/>
或者是配置这一种:
<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
这一种:
spring mvc 第一天【注解实现springmvc的基本配置】