SpringMVC注解及实现页面跳转详解
- 格式:pdf
- 大小:98.69 KB
- 文档页数:9
SpringMVC实现简单跳转⽅法(专题)简单跳转专题个⼈建议重新练习⼀遍搭建的过程,如果感觉⿇烦你可以直接复制上⼀个⼯程,但是需要修改pom.xml中的⼀点信息<groupId>com.hanpang.springmvc</groupId><artifactId>springmvc-demo01</artifactId><version>0.0.1-SNAPSHOT</version>1.核⼼配置类和加载类package com.hanpang.config;import ponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.EnableWebMvc;@Configuration@EnableWebMvc@ComponentScan(basePackages="com.hanpang.**.web")public class WebConfig {}package com.hanpang.config;import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[] {WebConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {return null;}@Overrideprotected String[] getServletMappings() {return new String[] {"/"};}}2.JavaWeb阶段的跳转⽅式请注意SpringMVC的⽅法中的形参,框架给我们完成了实例化的操作package com.hanpang.web;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;@Controller//告知其是⼀个控制器public class Demo01Controller {@RequestMapping(path="/test01")public ModelAndView 传统⽅式跳转_请求转发(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { System.out.println("默认对形参的进⾏了实例化操作");request.getRequestDispatcher("/WEB-INF/jsp/demo01.jsp").forward(request, response);return null;}@RequestMapping(path="/test02")public ModelAndView 传统⽅式跳转_重定向(HttpServletRequest request,HttpServletResponse response) throws IOException {System.out.println("默认对形参的进⾏了实例化操作");response.sendRedirect(request.getContextPath()+"/view/result01.jsp");return null;}}NOTE: 这种⽅式我们⼏乎不再使⽤了,只是只是简单的演⽰和回顾⼀下,⾄少我们可以使⽤这种⽅式获取Servlet API 3.Controller跳转到JSP的⽅式演⽰在⽰例最后的时候,我们会加⼊JSP的视图解析器,开始阶段我们还是按照传统的⽅式,有⼀个循序渐进的过程package com.hanpang.web;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;@Controller//告知其是⼀个控制器public class Demo01Controller {@RequestMapping(path="/test03")public ModelAndView 默认情况下是请求转发(){ModelAndView mav = new ModelAndView();mav.setViewName("/WEB-INF/jsp/demo01.jsp");return mav;}@RequestMapping(path="/test04")public ModelAndView 设置重定向的⽅式(){ModelAndView mav = new ModelAndView();mav.setViewName("redirect:/view/result01.jsp");//或者//mav.setViewName(UrlBasedViewResolver.REDIRECT_URL_PREFIX+"/view/result01.jsp");return mav;}}感觉跟Java Web阶段的⽅式差不多,只是重定向的时候设置了⼀个简单的前缀4.Controller跳转到Controller的⽅式演⽰类似于从⼀个Servlet调到另⼀个Servletpackage com.hanpang.web;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;@Controller//告知其是⼀个控制器public class Demo01Controller {@RequestMapping(path="/test05")public ModelAndView 直接设置映射路径即可(){ModelAndView mav = new ModelAndView();mav.setViewName("/test03");return mav;}@RequestMapping(path="/test06")public ModelAndView 设置重定向(){ModelAndView mav = new ModelAndView();mav.setViewName("redirect:/test04");return mav;}}5.加⼊JSP的视图解析器上⾯的演⽰过程中,我们发现ModelAndView中setViewName是⽤来完成跳转的,这⾥⾯传递的数据是字符串,但是处理⽅式不太⼀样,当跳转的路径有前缀redirect:的时候,那么处理⽅式不⼀样.还有,如果我们有多个类似/WEB-INF/jsp/demo01.jsp形式的字符串的时候,我们发现公共的部分很多,SpringMVC给我们提供了⼀个专门处理 Controller请求转发JSP页⾯的类.请注意我的描述: 如果发现你传递的字符串没有设置任何前缀标识,那么默认情况下使⽤配置JSP视图解析器处理,并且完成请求转发的操作注解:配置核⼼配置类package com.hanpang.config;import org.springframework.context.annotation.Bean;import ponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.ViewResolver;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.view.InternalResourceViewResolver;import org.springframework.web.servlet.view.JstlView;@Configuration@EnableWebMvc@ComponentScan(basePackages="com.hanpang.**.web")public class WebConfig {@Bean//实例化public ViewResolver viewResolver() {InternalResourceViewResolver jspViewResolver = new InternalResourceViewResolver();jspViewResolver.setViewClass(JstlView.class);//springmvc⽀持jstl标签jspViewResolver.setPrefix("/WEB-INF/");jspViewResolver.setSuffix(".jsp");return jspViewResolver;}}**NOTE:**请注意⽅法上的注解@Bean⽅法等价于XML中的代码如下<bean id="jspResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/"/><property name="suffix" value=".jsp"/><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/></bean>改进Controller跳转JSP代码该视图解析器只能针对于JSP的请求转发,对重定向⽆效,请注意代码的注释内容@RequestMapping(path="/test03")public ModelAndView 默认情况下是请求转发(){ModelAndView mav = new ModelAndView();//mav.setViewName("/WEB-INF/jsp/demo01.jsp");//改进后:默认情况下,会使⽤JSP视图解析器处理,// prefix+"jsp/demo01"+suffix => /WEB-INF/jsp/demo01.jspmav.setViewName("jsp/demo01");//发现字符串没有前缀修饰return mav;}@RequestMapping(path="/test04")public ModelAndView 设置重定向的⽅式(){ModelAndView mav = new ModelAndView();//解析器对重定向⽆效mav.setViewName("redirect:/view/result01.jsp");return mav;}改进Controller跳转Controller代码@RequestMapping(path="/test05")public ModelAndView 直接设置映射路径即可(){ModelAndView mav = new ModelAndView();mav.setViewName("/test03");return mav;}当配置完JSP视图解析器后,对上述的代码再次进⾏测试,查看访问结果有惊喜符合我们之前说的"/test03"是⼀个字符串,默认情况下会使⽤JSP视图解析器进⾏处理,那么如何改进呢?可以设置前缀"forward:",改进代码如下:@RequestMapping(path="/test05")public ModelAndView 直接设置映射路径即可(){ModelAndView mav = new ModelAndView();mav.setViewName("forward:/test03");//或者//mav.setViewName(UrlBasedViewResolver.FORWARD_URL_PREFIX+"/test03");return mav;}当发现字符串使⽤forward:修饰后,处理情况改变为从Controller请求转换到另⼀个Controller,⽽如果做到重定向的话,代码如下:@RequestMapping(path="/test06")public ModelAndView 设置重定向(){ModelAndView mav = new ModelAndView();mav.setViewName("redirect:/test04");return mav;}6.InternalResourceViewResolver 附录InternalResourceViewResolver:它是URLBasedViewResolver的⼦类,所以URLBasedViewResolver⽀持的特性它都⽀持。
restcontroller注解中的值概述及解释说明引言是一篇文章的开端,它旨在介绍和概述即将探讨的主题。
在本文中,我们将首先进行概述,简要介绍将要讨论的主题——RestController注解中的值。
接着会介绍文章的结构,概括列出各部分内容的目标和安排。
最后,我们会明确文章撰写的目的,也就是为什么要深入研究这个特定主题及其重要性。
文章结构是为了帮助读者更好地理解整体内容,在本文中包括RestContoller 注解、RestContoller注解中的值以及与之相关联的资源路径映射规则等部分。
每一个小节都将深入讲解与该主题相关的知识点,并力求提供清晰易懂的说明。
而撰写此篇长文的目的在于帮助读者深入理解RestController注解中值得设置、用法及实际应用技巧,并通过详细讲解带领读者逐步掌握这方面知识。
期望借此文引发读者对于Spring框架和RESTful服务开发有更进一步了解和兴趣。
2. RestController注解RestContoller注解是Spring框架中的一个核心注解之一,用来标识一个类是处理HTTP请求的控制器。
通过使用@RestController注解,我们可以将一个普通的Java类转换为RESTful风格的Web服务控制器。
2.1 什么是RestController注解@RestController注解是@Controller和@ResponseBody注解的组合,表示该类处理HTTP请求并将返回值直接作为HTTP响应体返回给客户端。
简单来说,@RestController相当于@Controller + @ResponseBody。
2.2 使用RestController注解的好处使用@RestController注解的好处之一是使代码更加简洁明了。
通过@RestController,我们不再需要在每个方法上面都添加@ResponseBody注解来指定返回结果需要序列化为JSON或XML格式。
Spring MVC解析,Spring Web批注1.概述在本教程中,我们将从org.springframework.web.bind.annotation包中探索Spring Web注释。
2. @RequestMapping简单地说,@RequestMapping 标记请求处理方法里面@Controller班; 可以使用以下命令进行配置:∙路径或其别名,名称和值:方法映射到的URL∙方法:兼容的HTTP方法∙参数:根据HTTP参数的存在,不存在或值过滤请求∙标头:根据HTTP标头的存在,不存在或值过滤请求∙消耗:方法可以在HTTP请求正文中消耗的媒体类型产生:该方法可以在HTTP响应正文中产生的媒体类型这是一个简短的示例:1 2 3 4 5 6 7 8 @Controllerclass VehicleController {@RequestMapping(value = "/vehicles/home", method = RequestMethod.GET) String home() {return "home";}}如果我们在类级别应用此注释,则可以为@Controller类中的所有处理程序方法提供默认设置。
唯一的例外是Spring不会用方法级别设置覆盖的URL,而是附加两个路径部分。
例如,以下配置与上述配置具有相同的效果:1 2 3 4 5 6 7 @Controller@RequestMapping(value = "/vehicles", method = RequestMethod.GET) class VehicleController {@RequestMapping("/home")String home() {return "home";8 9 } }此外,@GetMapping,@PostMapping,@PutMapping,@DeleteMapping 和@PatchMapping是@RequestMapping的不同变体,其HTTP方法已分别设置为GET,POST,PUT,DELETE和PATCH。
Spring MVC第一讲:SpringMVC 页面跳转实例,通过请求访问start.jsp 页面1.1 加包1.2 web.xml<servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.Di spatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>abc1.3 建springMVC-servlet.xml(注:spring默认要求建立在WEB-INF目录下,并且名称为servlet-name_servlet.xml<beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-inst ance"xmlns:p="/schema/p"xmlns:context="/sch ema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.0.xsd/schema/context/schema/context/sprin g-context-3.0.xsd"><context:component-scanbase-package=".controllers" /><beanclass="org.springframework.web.servlet.view.InternalRes ourceViewResolver"><property name="prefix"value="/WEB-INF/page/"/><property name="suffix" value=".jsp"/></bean></beans>1.4 StartController.javapackage .controllers;import org.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class StartController {@RequestMapping(value="/start")public String start(){System.out.println("start method invoked...");return "start";}}1.5 新建WEB-INF/page/start.jsp1.6 访问:http://localhost:8080/springMVC_001/start.do 总结:本例子搭建一个简单的spingmvc实例,通过本例学习springMVC最简单的流程及搭建元素。
SpringMVC框架知识点详解官⽅的下载⽹址是:⼀、Spring MVC简介1.1Spring MVC⼯作流程映射器:主要是根据浏览器上输⼊的url来映射所有满⾜要求的Handle(控制器类)适配器:主要是决定调⽤哪个Handler来实现具体的业务逻辑1.2Spring MVC VS Struts21)springmvc的⼊⼝是⼀个servlet,即前端控制器;struts2⼊⼝是⼀个filter过虑器,即前端过滤器,2)springmvc是基于⽅法开发(控制器类是单例的,不可能维护实体变量),传递参数是通过⽅法形参,可以设计为单例;struts2是基于类开发(维护⼀个实体变量),传递参数是通过类的属性,只能设计为多例3)springmvc通过参数解析器是将request对象内容进⾏解析成⽅法形参,将响应数据和页⾯封装成ModelAndView对象,最后⼜将模型数据通过request对象传输到页⾯;struts采⽤值栈存储请求和响应的数据,通过OGNL存取数据4)springmvc开发运⾏速度快于struts2⼆、Spring MVC⼯程搭建(xml)2.1导⼊springioc,springweb , springmvc相关的jar包2.2在/WEB-INF/ web.xml⽂件配置SpringMVC的前端控制器DispatcherServlet(前端控制器)<!-- 注册springmvc核⼼控制器 --><servlet><!-- servlet-name名字随便写 --><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 通知DispatcherServlet去指定的⽬录下加载springmvc.xml配置⽂件classpath:是在⼯程的src路径下寻找如果不配置init-param的话,控制器会⾃动寻找/WEB-INF/<servlet-name>-servlet.xml⽂件--><init-param><!-- 值是固定的,相当于键值对 --><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>*.action</url-pattern>//拦截请求</servlet-mapping>注:在默认情况下:springmvc框架的配置⽂件必须叫<servlet-name>-servlet.xml且必须放在/WEB-INF/⽬录下,我们可以在web.xml⽂件中,为DispatcherServlet配置⼀个初始化参数,让它去我们指定的⽬录下加载springmvc.xml配置⽂件2.3配置springmvc.xml注:该配置⽂件的命名规则遵循web.xml⽂件中核⼼控制器配置。
Spring JPetStore学习小结(1)发表于3/28/2005 由site admin※业务层主要的类和接口位于org.springframework.samples.jpetstore.domain.logic包中。
业务层其实很简单,主要是一个PetStoreFacade接口,该接口在JPetStore 中只有一个唯一的实现类PetStoreImpl,它提供了很多供Web层调用的方法,而绝大多数方法都只是简单的调用了数据访问层的Dao类所提供的方法。
domain.logic包中还有两个供Web层访问的validator,AccountValidator和OrderValidator,它们实现自spring的Validator接口,由于使用了spring提供的helper class ValidationUtils,因此看起来也十分简洁。
通过在servlet配置文件中为AccountFormController和AccountFormController指定validator属性,从而为Account和Order提供了验证功能。
不过在这里,这些Validator无疑是依赖于spring框架的。
<bean name=\‖/shop/newAccount.do\‖class=\‖org.springframework.samples.jpetstore.web.spring.AccountFormCont roller\‖><property name=\‖petStore\‖><ref bean=\‖petStore\‖/></property><property name=\‖validator\‖><ref bean=\‖accountValidator\‖/></property> <property name=\‖successView\‖><value>index</value></property></bean><bean id=\‖secure_editAccount\‖class=\‖org.springframework.samples.jpetstore.web.spring.AccountFormCont roller\‖><property name=\‖petStore\‖><ref bean=\‖petStore\‖/></property><property name=\‖validator\‖><ref bean=\‖accountValidator\‖/></property> <property name=\‖successView\‖><value>index</value></property></bean>另外,还有一个AOP advice,SendOrderConfirmationEmailAdvice,用于在完成一条order的数据库插入之后,向用户发送一封确认邮件,相应的配置位于applicationContext.xml中。
以SpringMVC注解的形式从Controller跳到另一个Controller 实现登入页面的跳转使用springmvc注解的形式实现(登录成功跳到一个Controller,登录失败跳到一个报错信息页面)一:登入功能的Controller层@Controller //注入:@RequestMapping("/admin/login.do") //请求路径://注:使用@Autowired就不用生成get set方法@Autowiredprivate IAdminServletadminServlet;/*** 跳转登录页** @param adminname* @param password* @return 登录页* @throws IOException*/public String login(String adminname,String password){Admin admin=new Admin(adminname, password); //新建一个对象List<Admin>adminslisList=adminServlet.getNameByPwd(admin);//通过用户名将对象放入集合中if (adminslisList.size()!=0) {//将对象保存到session中super.getSession().setAttribute("admin", adminslisList.get(0));("登录成功"); //打印日志//使用关键字redirect重定向if (ShiroUtils.isAuthenticated()) { //获取当前用户,判断是否已登入 return "redirect:/merchant/main"; //返回请求路径,跳转页面 }else {System.out.println("登录失败");//打印出错误信息super.getRequest().setAttribute("ErrorMsg", "用户名或者密码错误!");return"login/login"; //返回登入页面二:登录成功之后要重定向的Controller类@Controller@RequestMapping("/merchant/main")public class Select_MerchantAction extends BaseAction {@Autowiredprivate IMerchantServletmerchantServlet;//查询全部的@RequestMapping(params = "method=cc")public String selectAll(){List<Merchant>listMerchants=merchantServlet.getByname(null);//将数据保存到Request中super.getRequest().setAttribute("listMerchants", listMerchants);//转发到登入后主页面return "/common/main";三:主页面的代码在页面遍历保存在request中的数据//账号、密码、手机号、地址<c:forEach items="${requestScope.listMerchants}" var="Merchant"> <tr><td>${Merchant.merchantTypeName}</td><td>${Merchant.areaName}</td><td>${Merchant.merchantName}</td><td>${Merchant.merchantPhone}</td><td>${Merchant.merchantAddress}</td> </tr></c:forEach>}}。
SpringMVC之ModelAndView的⽤法(转)(⼀)使⽤ModelAndView类⽤来存储处理完后的结果数据,以及显⽰该数据的视图。
从名字上看ModelAndView中的Model代表模型,View代表视图,这个名字就很好地解释了该类的作⽤。
业务处理器调⽤模型层处理完⽤户请求后,把结果数据存储在该类的model属性中,把要返回的视图信息存储在该类的view属性中,然后让该ModelAndView返回该Spring MVC框架。
框架通过调⽤配置⽂件中定义的视图解析器,对该对象进⾏解析,最后把结果数据显⽰在指定的页⾯上。
具体作⽤:1、返回指定页⾯ModelAndView构造⽅法可以指定返回的页⾯名称,也可以通过setViewName()⽅法跳转到指定的页⾯ ,2、返回所需数值使⽤addObject()设置需要返回的值,addObject()有⼏个不同参数的⽅法,可以默认和指定返回对象的名字。
1、【其源码】:熟悉⼀个类的⽤法,最好从其源码⼊⼿。
public class ModelAndView {/** View instance or view name String */private Object view //该属性⽤来存储返回的视图信息/** Model Map */private ModelMap model;//<span style="color: rgb(0, 130, 0); font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18px;">该属性⽤来存储处理后的结果数据</span> /*** Indicates whether or not this instance has been cleared with a call to {@link #clear()}.*/private boolean cleared = false;/*** Default constructor for bean-style usage: populating bean* properties instead of passing in constructor arguments.* @see #setView(View)* @see #setViewName(String)*/public ModelAndView() {}/*** Convenient constructor when there is no model data to expose.* Can also be used in conjunction with <code>addObject</code>.* @param viewName name of the View to render, to be resolved* by the DispatcherServlet's ViewResolver* @see #addObject*/public ModelAndView(String viewName) {this.view = viewName;}/*** Convenient constructor when there is no model data to expose.* Can also be used in conjunction with <code>addObject</code>.* @param view View object to render* @see #addObject*/public ModelAndView(View view) {this.view = view;}/*** Creates new ModelAndView given a view name and a model.* @param viewName name of the View to render, to be resolved* by the DispatcherServlet's ViewResolver* @param model Map of model names (Strings) to model objects* (Objects). Model entries may not be <code>null</code>, but the* model Map may be <code>null</code> if there is no model data.*/public ModelAndView(String viewName, Map<String, ?> model) {this.view = viewName;if (model != null) {getModelMap().addAllAttributes(model);}}/*** Creates new ModelAndView given a View object and a model.* <emphasis>Note: the supplied model data is copied into the internal* storage of this class. You should not consider to modify the supplied* Map after supplying it to this class</emphasis>* @param view View object to render* @param model Map of model names (Strings) to model objects* (Objects). Model entries may not be <code>null</code>, but the* model Map may be <code>null</code> if there is no model data.*/public ModelAndView(View view, Map<String, ?> model) {this.view = view;if (model != null) {getModelMap().addAllAttributes(model);}}/*** Convenient constructor to take a single model object.* @param viewName name of the View to render, to be resolved* by the DispatcherServlet's ViewResolver* @param modelName name of the single entry in the model* @param modelObject the single model object*/public ModelAndView(String viewName, String modelName, Object modelObject) { this.view = viewName;addObject(modelName, modelObject);}/*** Convenient constructor to take a single model object.* @param view View object to render* @param modelName name of the single entry in the model* @param modelObject the single model object*/public ModelAndView(View view, String modelName, Object modelObject) { this.view = view;addObject(modelName, modelObject);}/*** Set a view name for this ModelAndView, to be resolved by the* DispatcherServlet via a ViewResolver. Will override any* pre-existing view name or View.*/public void setViewName(String viewName) {this.view = viewName;}/*** Return the view name to be resolved by the DispatcherServlet* via a ViewResolver, or <code>null</code> if we are using a View object.*/public String getViewName() {return (this.view instanceof String ? (String) this.view : null);}/*** Set a View object for this ModelAndView. Will override any* pre-existing view name or View.*/public void setView(View view) {this.view = view;}/*** Return the View object, or <code>null</code> if we are using a view name* to be resolved by the DispatcherServlet via a ViewResolver.*/public View getView() {return (this.view instanceof View ? (View) this.view : null);}/*** Indicate whether or not this <code>ModelAndView</code> has a view, either* as a view name or as a direct {@link View} instance.*/public boolean hasView() {return (this.view != null);}/*** Return whether we use a view reference, i.e. <code>true</code>* if the view has been specified via a name to be resolved by the* DispatcherServlet via a ViewResolver.*/public boolean isReference() {return (this.view instanceof String);}/*** Return the model map. May return <code>null</code>.* Called by DispatcherServlet for evaluation of the model.*/protected Map<String, Object> getModelInternal() {return this.model;/*** Return the underlying <code>ModelMap</code> instance (never <code>null</code>). */public ModelMap getModelMap() {if (this.model == null) {this.model = new ModelMap();}return this.model;}/*** Return the model map. Never returns <code>null</code>.* To be called by application code for modifying the model.*/public Map<String, Object> getModel() {return getModelMap();}/*** Add an attribute to the model.* @param attributeName name of the object to add to the model* @param attributeValue object to add to the model (never <code>null</code>)* @see ModelMap#addAttribute(String, Object)* @see #getModelMap()*/public ModelAndView addObject(String attributeName, Object attributeValue) {getModelMap().addAttribute(attributeName, attributeValue);return this;}/*** Add an attribute to the model using parameter name generation.* @param attributeValue the object to add to the model (never <code>null</code>)* @see ModelMap#addAttribute(Object)* @see #getModelMap()*/public ModelAndView addObject(Object attributeValue) {getModelMap().addAttribute(attributeValue);return this;}/*** Add all attributes contained in the provided Map to the model.* @param modelMap a Map of attributeName -> attributeValue pairs* @see ModelMap#addAllAttributes(Map)* @see #getModelMap()*/public ModelAndView addAllObjects(Map<String, ?> modelMap) {getModelMap().addAllAttributes(modelMap);return this;}/*** Clear the state of this ModelAndView object.* The object will be empty afterwards.* <p>Can be used to suppress rendering of a given ModelAndView object* in the <code>postHandle</code> method of a HandlerInterceptor.* @see #isEmpty()* @see HandlerInterceptor#postHandle*/public void clear() {this.view = null;this.model = null;this.cleared = true;}/*** Return whether this ModelAndView object is empty,* i.e. whether it does not hold any view and does not contain a model.*/public boolean isEmpty() {return (this.view == null && CollectionUtils.isEmpty(this.model));}/*** Return whether this ModelAndView object is empty as a result of a call to {@link #clear} * i.e. whether it does not hold any view and does not contain a model.* <p>Returns <code>false</code> if any additional state was added to the instance* <strong>after</strong> the call to {@link #clear}.* @see #clear()*/public boolean wasCleared() {return (this.cleared && isEmpty());}* Return diagnostic information about this model and view.*/@Overridepublic String toString() {StringBuilder sb = new StringBuilder("ModelAndView: ");if (isReference()) {sb.append("reference to view with name '").append(this.view).append("'");}else {sb.append("materialized View is [").append(this.view).append(']');}sb.append("; model is ").append(this.model);return sb.toString();}在源码中有7个构造函数,如何⽤?是⼀个重点。
SpringMVC常⽤注解常⽤注解1. RequestParam注解1. 作⽤:把请求中的指定名称的参数传递给控制器中的形参赋值 (作⽤于形参列表)2. 属性value:请求参数中的名称required:请求参数中是否必须提供此参数,默认值是true,必须提供@RequestMapping("/useRequestParam")public String useRequestParam(@RequestParam("name")String username,@RequestParam(value="age",required=false)Integer age){System.out.println(username+","+age);return "success";}2. RequestBody注解1. 作⽤:⽤于获取请求体的内容(注意:get⽅法不可以)2. 属性required:是否必须有请求体,默认值是true<form action="springmvc/useRequestBody" method="post">⽤户名称:<input type="text" name="username" ><br/>⽤户密码:<input type="password" name="password" ><br/>⽤户年龄:<input type="text" name="age" ><br/><input type="submit" value="保存"></form>@RequestMapping("/useRequestBody")public String useRequestBody(@RequestBody(required=false) String body){System.out.println(body);return "success";}3. PathVariable注解1. 作⽤:拥有绑定url中的占位符的。
springMVC⼏种页⾯跳转⽅式⼩结前⾯已经了解了Controller的⼏种配置⽅式今天主要写⼀下响应界⾯跳转的⼏种⽅式1.在注解的⽅式中1.1通过HttpServletResponse的API直接输出(不需要配置渲染器)controller类的主要代码@Controllerpublic class RequestController{@RequestMapping("/resp")public void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {resp.getWriter().println("hello HttpServletResponse");}web.xml配置<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_1.xsd"version="3.1"><servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>dispatcher-servlet.xml主要代码<beans xmlns="/schema/beans"xmlns:context="/schema/context"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.0.xsd/schema/context/schema/context/spring-context-3.0.xsd"><!--作⽤是扫描指定包下所有的包含注解的类--><context:component-scan base-package="com.jsu.mvc"/></beans>1.2 使⽤HttpServletResponse 重定向到另⼀个视图(其他不变 )@RequestMapping("/resp")public void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {resp.sendRedirect("index.jsp");}}1.3 使⽤HttpServletRequest 转发(默认访问/下的index.jsp页⾯不受渲染器的影响)@RequestMapping("/resp")public void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {req.setAttribute("message","it's forword ");req.getRequestDispatcher("index.jsp").forward(req,resp);}1.4直接返回jsp页⾯的名称(⽆渲染器)其他的配置不变@RequestMapping("/nice")public String hello1(){//转发⽅式1return "home.jsp";//转发⽅式2return "forward:index.jsp";//重定向⽅式return "redirect:index.jsp";}1.5当有渲染器指定@RequestMapping("/nice")public String hello1(){//转发⽅式1return "home";//转发⽅式2return "forward:index";//重定向⽅式 hello指的是requsrmappingreturn "redirect:hello";}2 使⽤view2.1 使⽤modelandview需要视图解析器能指定跳转页⾯public class HelloController implements Controller {@Overridepublic ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception { ModelAndView mv = new ModelAndView();//封装要显⽰到视图的数据mv.addObject("msg","hello myfirst mvc");//视图名mv.setViewName("hello");return mv;}}[servlet-name]-servlet.xml<!--配置渲染器--><!--配置hellocontroller中页⾯的位置--><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /><bean id="viewResolver"class="org.springframework.web.servlet.view.UrlBasedViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/><!--结果视图的前缀--><property name="prefix" value="/WEB-INF/jsp/"/><!--结果视图的后缀--><property name="suffix" value=".jsp"/></bean><bean name="/hello.do" class="com.jsu.mvc.HelloController"></bean>2.2 使⽤modelview不需要视图解析器不能指定跳转页⾯//通过modelmap⽅式@RequestMapping("/modelmap")public String modelHello(String name,ModelMap map){map.addAttribute("name",name);System.out.println(name);return "index.jsp";}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
Java页面跳转的代码一、概述在Java开发中,实现页面跳转是非常常见的操作。
通过页面跳转,可以在不同的页面之间进行切换和传递数据,提供丰富的用户交互体验。
本文将详细介绍Java 页面跳转的代码实现,包括使用原生Java代码实现跳转和使用框架实现跳转。
二、使用原生Java代码实现页面跳转使用原生Java代码实现页面跳转主要依靠HttpServletResponse对象的sendRedirect方法。
具体步骤如下:1. 获取HttpServletResponse对象在Java Web应用中,可以通过HttpServlet的doGet或doPost方法中的HttpServletRequest对象的getResponse方法获取HttpServletResponse对象。
2. 调用sendRedirect方法通过HttpServletResponse对象调用sendRedirect方法,并传入目标页面的URL作为参数。
下面是一个简单的示例代码:@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获取HttpServletResponse对象HttpServletResponse httpResponse = response;// 调用sendRedirect方法跳转到目标页面httpResponse.sendRedirect("目标页面URL");}三、使用框架实现页面跳转在Java开发中,使用框架可以更加方便地实现页面跳转。
以下介绍两个常用的Java框架:Spring MVC和Struts2。
1. Spring MVCSpring MVC是一个基于Java的应用程序框架,用于开发Web应用程序。
springMVC详解以及注解说明基于注释(Annotation)的配置有越来越流行的趋势,Spring 2.5 顺应这种趋势,提供了完全基于注释配置Bean、装配Bean 的功能,您可以使用基于注释的Spring IoC 替换原来基于XML 的配置。
本文通过实例详细讲述了Spring 2.5 基于注释IoC 功能的使用。
概述注释配置相对于XML 配置具有很多的优势:∙ 它可以充分利用Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。
如使用JPA 注释配置ORM 映射时,我们就不需要指定PO 的属性名、类型等信息,如果关系表字段和PO 属性名、类型都一致,您甚至无需编写任务属性映射信息——因为这些信息都可以通过Java 反射机制获取。
∙ 注释和Java 代码位于一个文件中,而XML 配置采用独立的配置文件,大多数配置信息在程序开发完成后都不会调整,如果配置信息和Java 代码放在一起,有助于增强程序的内聚性。
而采用独立的XML 配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。
因此在很多情况下,注释配置比XML 配置更受欢迎,注释配置有进一步流行的趋势。
Spring 2.5 的一大增强就是引入了很多注释类,现在您已经可以使用注释配置完成大部分XML 配置的功能。
在这篇文章里,我们将向您讲述使用注释进行Bean 定义和依赖注入的内容。
Spring2.5的注释Spring 2.5 提供了AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor 和RequiredAnnotationBeanPostProcessor这四个主要的关于Annotation 的BeanPostProcessor。
SpringMVC视图解析与配置(六)视图解析SpringMVC如何解析视图1. 不论控制器返回⼀个String, ModelAndView, View都会转换为 ModelAndView对象, 由视图解析器解析视图, 然后, 进⾏页⾯的跳转.视图和视图解析器1. 请求处理⽅法执⾏完成后, 最终返回⼀个ModelAndView对象. 对于那些返回String, View或Model/Map等类型的处理⽅法, SpringMVC也会在内部将它们装配成⼀个ModelAndView对象, 它包含了逻辑名和模型对象的视图.2. SpringMVC借助视图解析器(ViewResolver)得到最终的视图对象, 最终的视图可以是JSP, 也可能是Excel, JFreeChart等各种表现形式的视图.3. 对于最终究竟采取何种视图对象对模型数据进⾏渲染, 处理器并不关⼼, 处理器⼯作重点聚焦在⽣产模型数据的⼯作上, 从⽽实现MVC的充分解耦.视图1. 视图的作⽤是处理模型数据, 实现页⾯跳转(转发, 重定向)2. 为了实现视图模型和具体实现技术的解耦, Spring 在org.springframework.web.servlet包中定义了⼀个⾼度抽象的View接⼝3. 视图对象由视图解析器负责实例化. 由于视图是⽆状态的, 所以他们不会有线程安全的问题.4. 常⽤的视图实现类视图解析器1. SpringMVC为逻辑视图名的解析提供了不同的策略, 可以在SpringMVC上下⽂中配置⼀种或多种解析策略, 并指定他们之间的先后顺序.每⼀种映射策略对应⼀个具体的视图解析器实现类.2. 视图解析器的作⽤⽐较单⼀: 将逻辑视图解析为⼀个具体的视图对象.3. 所有的视图解析器都必须实现ViewResolver接⼝4. 常见的视图解析器实现类可以选择⼀种视图解析器或混⽤多种视图解析器.每个视图解析器都实现了Ordered接⼝并开放出⼀个order属性, 可以通过order属性指定解析器的优先顺序, order越⼩优先级越⾼.SpringMVC会按视图解析器顺序的优先顺序对逻辑视图名进⾏解析, 直到解析成功并返回视图对象, 否则抛出ServletException异常.转发与重定向1. ⼀般情况下, 控制器⽅法返回字符串类型的值会被当成逻辑视图名处理.2. 若返回的字符串中带有forward:或redirect:前缀时, Spring会进⾏特殊处理.将forward:和redirect:当成指⽰符, 其后的字符串作为URL来处理.例如redirect:success.jsp 会完成⼀个到success.jsp的重定向操作.forward:success.jsp 会完成⼀个到success.jsp的转发操作.配置问题SpringMVC指定配置1. 指定配置⽂件位置和名称在web.xml中的<init-param>标签配置.contextConfigLocation是上下⽂配置路径, ⽤来设置SpringMVC配置⽂件的位置及名称.classpath: 前缀后写的是类路径<init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springMVC.xml</param-value></init-param>2. 设置servlet的加载时间默认是在第⼀次访问时加载.在<servlet>中使⽤<load-on-startup>标签, 会将servlet的加载时间提前到项⽬启动时.该标签中可以写整数, 但写负整数和0没效果.值越⼩, 优先级越⾼.<load-on-startup>1</load-on-startup>编码过滤器1. 在前端页⾯写⼊中⽂, 传到后端后可能出现乱码问题, 所以需要使⽤编码过滤器来解决2. 编码过滤器必须在web.xml中第⼀个配置.核⼼类是CharacterEncodingFilter要在<filter>的<init-param>中配置encoding属性<filter><filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>综合配置web.xml必须先配置编码过滤器<filter><filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>配置HiddenHttpMethodFilter过滤器<filter><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter-mapping><filter-name>HiddenHttpMethodFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>配置前端控制器, 并指定配置⽂件路径conf/springMVC.xml<servlet><servlet-name>springDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><!-- 这个springMVC.xml应该创建在resources⽬录下 --><param-value>classpath:springMVC.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>SpringMVC配置⽂件中整合thymeleaf模板引擎1. 除了要导⼊Spring, SpringMVC必须的依赖, 还需导⼊<dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.9.RELEASE</version></dependency>2. 在springMVC.xml中加⼊如下配置<!-- templateResolver的characterEncoding和viewResolver的都要设置成UTF-8中⽂才不会乱码 --><bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"> <property name="prefix" value="/templates/"></property><property name="suffix" value=".html"></property><property name="characterEncoding" value="UTF-8"></property><property name="order" value="1"></property><property name="templateMode" value="HTML5"></property><!-- 这⾥要设置成false, 否则看不到实时的页⾯数据 --><property name="cacheable" value="false"></property></bean><bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine"><property name="templateResolver" ref="templateResolver"></property></bean><bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver"> <property name="templateEngine" ref="templateEngine"></property><property name="characterEncoding" value="UTF-8"></property></bean>3. 这样就能使⽤thymeleaf了.。
详解springmvc常⽤5种注解⼀、组件型注解:1、@Component 在类定义之前添加@Component注解,他会被spring容器识别,并转为bean。
2、@Repository 对Dao实现类进⾏注解 (特殊的@Component)3、@Service ⽤于对业务逻辑层进⾏注解, (特殊的@Component)4、@Controller ⽤于控制层注解, (特殊的@Component)以上四种注解都是注解在类上的,被注解的类将被spring初始话为⼀个bean,然后统⼀管理。
⼆、请求和参数型注解:1、@RequestMapping:⽤于处理请求地址映射,可以作⽤于类和⽅法上。
●value:定义request请求的映射地址●method:定义地request址请求的⽅式,包括【GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE.】默认接受get请求,如果请求⽅式和定义的⽅式不⼀样则请求⽆法成功。
●params:定义request请求中必须包含的参数值。
●headers:定义request请求中必须包含某些指定的请求头,如:RequestMapping(value = "/something", headers = "content-type=text/*")说明请求中必须要包含"text/html", "text/plain"这中类型的Content-type头,才是⼀个匹配的请求。
●consumes:定义请求提交内容的类型。
●produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回@RequestMapping(value="/requestTest.do",params = {"name=sdf"},headers = {"Accept-Encoding=gzip, deflate, br"},method = RequestMethod.GET) public String getIndex(){System.out.println("请求成功");return "index";}上⾯代码表⽰请求的⽅式为GET请求,请求参数必须包含name=sdf这⼀参数,然后请求头中必须有 Accept-Encoding=gzip, deflate, br这个类型头。
web.xml的配置web.xml应该是整个项目最重要的配置文件了,不过servlet3.0中已经支持注解配置方式了。
在servlet3.0以前每个servlet必须要在web.xml中配置servlet及其映射关系。
但是在spring框架中就不用了,因为Spring中是依赖注入(Dependency Injection)的也叫控制反转(Inversion of Control)。
但是也要配置一个重要的servlet,就是前端控制器(DispatcherServlet)。
配置方式与普通的servlet基本相似。
配置内容如下:<!-- 配置前端控制器--><servlet><servlet-name>spring</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><!-- ContextconfigLocation配置springmvc加载的配置文件适配器、处理映射器等--><param-name>contextConfigLocation</param-name><param-value>WEB-INF/classes/spring/springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>spring</servlet-name><!-- 1、.action访问以.action结尾的由DispatcherServlet进行解析2、/,所有访问都由DispatcherServlet进行解析--><url-pattern>/</url-pattern></servlet-mapping>这里需要注意,springmvc.xml是spring配置文件,将在后面讨论。
springmvc框架常⽤注解详解使⽤注解来构造IoC容器通过@controller标注即可将class定义为⼀个controller类。
为使spring能找到定义为controller的bean,需要在applicationContext.xml配置⽂件中注册<context:component-scan base-package="com.maya"/>。
在base-package指明⼀个包。
如果某个类的头上带有特定的注解【@Component/@Repository/@Service/@Controller】,就会将这个对象作为Bean注册进Spring容器。
<!-- 激活组件扫描功能,⾃动扫描通过注解配置的组件 --><context:component-scan base-package="com.om.*"/>1:@Component@Component是所有受Spring 管理组件的通⽤形式,@Component注解可以放在类的头上,@Component不推荐使⽤。
2:@Controller@Controller对应表现层的Bean,也就是Action。
注:实际上,使⽤@component,也可以起到@Controller同样的作⽤。
使⽤@Controller注解标识UserController之后,就表⽰要把UserController交给Spring容器管理,在Spring容器中会存在⼀个名字为"UserController"的action,这个名字是根据UserController类名来取的。
注意:如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名⾸字母⼩写,如果指定value【@Controller(value="UserController")】或者【@Controller("UserController")】,则使⽤value作为bean的名字。
SpringMVC中@RequestBody和@ResponseBody注解的使⽤@RequestBody@RequestBody注解可以获取请求体,控制器⽅法的形参如果使⽤@RequestBody注解进⾏标识,当前请求的请求体就会为该注解所标识的形参赋值。
controller如下:package lala.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class HttpController {@RequestMapping("/testRequestBody")public String testRequestBody(@RequestBody String requestBody) {System.out.println("requestBody:" + requestBody);return "success";}}index.html如下:<!DOCTYPE html><html lang="en" xmlns:th=""><head><meta charset="UTF-8"><title>⾸页</title></head><body><h1>⾸页</h1><form th:action="@{/testRequestBody}" method="post">⽤户名:<input type="text" name="username"><br>密码:<input type="password" name="password"><br><input type="submit" value="测试@RequestBody"></form></body></html>RequestEntityRequestEntity是封装请求报⽂的⼀种类型,需要在控制器⽅法的形参中设置该类型的形参,当前请求的请求报⽂就会赋值给该形参,可以通过getHeaders()获取请求头信息,通过getBody()获取请求体信息。
Spring MVC第一讲:SpringMVC页面跳转实例,通过请求访问start.jsp页面1.1加包1.2web.xml<servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.Dispatche rServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>abc1.3建springMVC-servlet.xml(注:spring默认要求建立在WEB-INF目录下,并且名称为servlet-name_servlet.xml<beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance" xmlns:p="/schema/p"xmlns:context="/schema/conte xt"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.0.x sd/schema/context/schema/context/spring-context-3.0.xsd"><context:component-scanbase-package=".controllers"/><beanclass="org.springframework.web.servlet.view.InternalResourceViewR esolver"><property name="prefix"value="/WEB-INF/page/"/><property name="suffix"value=".jsp"/></bean></beans>1.4StartController.javapackage .controllers;import org.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class StartController{@RequestMapping(value="/start")public String start(){System.out.println("start method invoked...");return"start";}}1.5新建WEB-INF/page/start.jsp1.6访问:http://localhost:8080/springMVC_001/start.do总结:本例子搭建一个简单的spingmvc实例,通过本例学习springMVC最简单的流程及搭建元素。
第二讲灵活指定springmvc映射文件及路径更多情况下,对于第一讲中的springMVC-servlet.xml文件,我们并不想去放在WEB-INF,或者说我们可能在一个项目中并不是只有这一个文件,所以本节我们来讲述如何灵活配置此文件及文件名。
2.1修改web.xml<servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath*:/com/wdl/cn/config/mvc/*.xml </param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>2.2将WEB-INF下面的springMVC-servlet.xml移动到.config.mvc包下并将其修改名称为springMVC-first.xml2.3测试原来的路径:http://localhost:8080/springMVC_002/start.do总结:本讲主要学习了如何灵活配置springMVC配置文件。
下节将重点讲述@RequestMapping的使用。
第三讲springMVC_003@RequestMapping的使用3.1@RequestMapping使用位置a.使用于方法,此方法则可以被请求访问;b.使用于类,则可以将请求分(又叫分路径,分模块)包处理3.2将controller类上加@RequestMapping,修改StartController.javapackage .controllers;import org.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping(value="/test")public class StartController{@RequestMapping(value="/start")public String start(){System.out.println("start method invoked...");return"start";}}3.3访问:http://localhost:8080/springMVC_003/test/start.do,由此可见,可以通过在类上加@RequestMapping将请求分路径。
3.4@RequestMapping参数详解a.value表示访问的路径b.method表示请求的方式GET|POSTstep1:修改StartController.javaimport org.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@Controller@RequestMapping(value="/test")public class StartController{@RequestMapping(value="/start",method=RequestMethod.GET)public String start(){System.out.println("start method invoked...");return"start";}@RequestMapping(value="/start",method=RequestMethod.POST)public String start2(){System.out.println("start2method invoked...");return"start";}}step2:修改start.jsp模拟POST请求3.5访问http://localhost:8080/springMVC_003/test/start.do,接着转到start.jsp页面,接着点击页面的中按钮,发送POST请求,则可以看出不同的请求方式可以调用不同的方法。
3.6参数传递(常用参数传递,restful风格参数传递)a.httpservletreqeust方式参数传递step1:修改StartController.javapackage .controllers;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@Controller@RequestMapping(value="/test")public class StartController{@RequestMapping(value="/start",method=RequestMethod.GET)public String start(HttpServletRequest request){System.out.println("start method invoked...");String name=request.getParameter("name");int age=Integer.parseInt(request.getParameter("age"));System.out.println("name="+name+"age="+age);return"start";}@RequestMapping(value="/start",method=RequestMethod.POST)public String start2(){System.out.println("start2method invoked...");return"start";}}step2:访问:http://localhost:8080/springMVC_003/test/start.do?name=zhangsan&a ge=45b.restfull风格参数传递step1:修改StartController.javapackage .controllers;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@Controller@RequestMapping(value="/test")public class StartController{@RequestMapping(value="/start/{name}/{age}",method=RequestMethod.GET)public String start(@PathVariable("name")String name,@PathVariable("age")int age){System.out.println("start method invoked...");System.out.println("name="+name+"age="+age);return"start";}@RequestMapping(value="/start",method=RequestMethod.POST)public String start2(){System.out.println("start2method invoked...");return"start";}}step2:访问时,将参数值加入请求路径http://localhost:8080/springMVC_003/test/start/zhangsan/45.do总结:本讲主要讲述请求参数传递,主要掌握HttpServletRequest方式与restfull 风格参数传递,下讲主要讲述form表单提交第四讲form表单提交使用struts2后,我们习惯将form表单的数据封装成一个对象,这也是面向对象编程的一个思维,本节讲述form表单提交。