`

spring MVC要注意的地方

阅读更多

spring MVC要注意的地方:

控制器代码如下:

package com.mvc.jn.controller;

import java.util.Map;

import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@org.springframework.stereotype.Controller
public class HelloWorldController {

	// http://localhost:8088/springMVCannotations/hello2
	@RequestMapping(value = "/hello2", method = RequestMethod.GET)
	public String sayHello2(
			@RequestParam(value = "name", required = false) String username,
			Map<String, Object> map) {
		map.put("message1", username);
		System.out.println("my name:" + username);
		return "hello22";
	}

	// http://localhost:8088/springMVCannotations/hello3
	@RequestMapping(value = "/hello3", method = RequestMethod.GET)
	public ModelAndView sayHello3(
			@RequestParam(value = "name", required = false) String username) {
		System.out.println("my name:" + username);
		ModelAndView mav = new ModelAndView("hello33");
		mav.getModel().put("message1", username);
		return mav;
	}

	// http://localhost:8088/springMVCannotations/hello44?name=whuang
	@RequestMapping(value = "/hello44", method = RequestMethod.GET)
	// 与网上说的不一致,网上说方法名就是试图
	public Model hello4(
			@RequestParam(value = "name", required = false) String username,
			Model model) {
		System.out.println("my name:" + username);
		model.addAttribute("message1", username);
		return model;
	}

	@RequestMapping(value = "/hello555", method = RequestMethod.GET)
	public Model hello5(String username, Model model) {
		System.out.println("my name:" + username);
		model.addAttribute("message1", username);
		return model;
	}

}

 ViewResolver配置如下:

<!-- ViewResolver -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>

 问题1:调用控制器中的hello4 方法后会返回那个视图?

按照网上的说法,会返回“hello4”(方法名),如下图



 但是经过我反复测试,发现它返回的视图是“
hello44”,即@RequestMapping 指定的value。

 

问题2:访问方法hello5时,必须传参数username 吗?

答:不是必须的。

什么情况下是必须的呢?

当有注解@RequestParam(value = "username")时才是必须的,若不传该参数将报错.

url 是“http://localhost:8088/springMVCannotations/hello555?username=ccc”时,会自动设置username的值

 

问题3:spring MVC与hibernate4集成时报错:No Session found for current thread

详情请参阅我的另一篇博客:http://hw1287789687.iteye.com/blog/1949852

 

问题4:启动tomcat时报错:java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

原因是:pom.xml中缺少:

<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>3.2.3.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>3.2.3.RELEASE</version>
		</dependency>

 

 

问题5:spring MVC 使用bean接收参数时如何传参?

比如查询时,controller 把参数注入到bean中,

@RequestMapping(value = "/show")
	public String show(Model model,User user,UserView view,HttpSession session) throws CloneNotSupportedException {
		if(!ValueWidget.isNullOrEmpty(view.getPageFlag())&&view.getPageFlag().equals(Constant2.PAGEFLAG_NOT_QUERY)){
			System.out.println("不是查询");
			user=(User)session.getAttribute("user2");
			try {
				BeanUtils.copyProperties(view, user);
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			}
		}else{//查询
			System.out.println("是查询");
			session.setAttribute("user2", user);
		}
		PageAssistant.paging(user,true,view, userDao);
		
		model.addAttribute("view", view);
		model.addAttribute("currentTime", TimeHWUtil.getCurrentTimestamp().getTime());
		
		
		return "user/show";
	}

 方法show()的参数user会保存请求要素,那么在页面上是如何编写表单控件name的呢?

  <Li>                    
                        <label>用户名:</label><input type="text"  name="user.username" value="${view.username }"  />
                    </Li>
                    <Li>
                            <label>真实姓名:</label><input type="text" name="user.name" value="${view.name }" />
                    </Li>
                   

 上述代码是不对的,应该是:

  <Li>                    

                        <label>用户名:</label><input type="text"  name="username" value="${view.username }"  />

                    </Li>

                    <Li>

                            <label>真实姓名:</label><input type="text" name="name" value="${view.name }" />

                    </Li>

                   

注意:spring MVC 的依赖注入与struts2 是不同的.

spring MVC 的学习资料见附件spring MVC学习笔记.zip

 

Controller 中Action 参数
, User user, 和
@RequestParam(required = false) User user, 
是有区别的.
如果包含@RequestParam ,则无法自动注入对象的成员变量

 

  • 大小: 66.8 KB
  • 大小: 55.1 KB
1
3
分享到:
评论
3 楼 hw1287789687 2013-09-26  
参考:
http://haohaoxuexi.iteye.com/blog/1343761#comments
2 楼 arthur8 2013-09-25  
关于没有明确指定试图名称的时候,spring mvc会根据其请求URI生成对应的视图名,具体实现在DispatcherServlet.initRequestToViewNameTranslator(ApplicationContext)&DefaultRequestToViewNameTranslator.getViewName(HttpServletRequest)实现。
1 楼 hw1287789687 2013-09-25  
gotomao3 写道
楼主写的很好,感谢分享,最近我在  http://gotomao.com 网站也学习了这方面的东西,讲的很不错,而且都是免费的,也去看看吧~

嗯,好的

相关推荐

    spring4-mvc-gradle

    1. `src/main/java`:这是存放源代码的地方,包括Spring MVC的控制器类和其他业务逻辑。 2. `src/main/resources`:用于存储静态资源,如配置文件、国际化文件等。 3. `build.gradle`:Gradle构建脚本,定义了项目...

    spring mvc quartz 动态设置时间

    【Spring MVC + Quartz 动态设置时间】 在Java Web开发中,Spring MVC和Quartz库经常被用来构建灵活的任务调度系统。Quartz是一个强大的、开放源码的作业调度框架,可以用于创建、调度和执行重复任务。而Spring MVC...

    spring mvc log4j

    - 接着,在 Spring MVC 控制器、服务类或任何需要记录日志的地方,通过静态导入 `org.apache.log4j.Logger` 类并获取实例,然后调用相应的方法记录日志。 ```java import org.apache.log4j.Logger; public ...

    优质项目spring boot+mybatis+spring mvc+bootstrap开发停车位管理系统(调用百度地图API)

    优质项目spring boot+mybatis+spring mvc+bootstrap开发停车位管理系统(调用百度地图API) 项目描述 随着时代和科技的进步,人们的生活水平越来越高,私家车的数量不断上涨,随之产生了一些问题,其中就包括停车难...

    spring boot+mybatis+spring mvc+bootstrap开发停车位管理系统(调用百度地图API).zip

    随着时代和科技的进步,人们的生活水平越来越高,私家车的数量不断上涨,随之产生了一些问题,其中就包括停车难,很多地方人们根本找不到停车位,经常有司机为了找停车位转来转去,走了很多弯路,更重要的是浪费了...

    mybatis-spring整合jar包

    - 在Spring MVC的DispatcherServlet配置中,需要包含MyBatis-Spring的配置,确保Spring管理的数据访问层可以被Controller层调用。 - Controller层可以通过ModelAndView或Model对象,将查询结果传递到视图层进行...

    springMVC整合包

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在本压缩包中,你获得了进行 Spring MVC 整合所需的基础库文件,这...

    spring开发jar包

    在使用Spring 3.2.8时,需要注意可能存在的兼容性问题,以及与现代开发实践的差距。同时,升级到较新版本可以利用到更多的优化和新特性,比如Spring Boot的出现简化了Spring应用的初始化和配置过程。 在实际开发中...

    Spring MVC中上传文件实例

    SpringMVC(注解)上传文件需要注意的几个地方: 1、form的enctype=”multipart/form-data”,这个是上传文件必须的 2、applicationContext.xml配置: 代码如下: &lt;!– SpringMVC上传文件时,需要配置Multipart...

    struts2.3+spring4.3+hibernate5.4.rar

    不过,需要注意的是,随着Spring Boot和Spring MVC的兴起,现代Java Web开发中,这种传统的MVC架构组合逐渐被更现代化的Spring Boot所取代,因为Spring Boot集成了更多功能,简化了配置,提高了开发效率。

    Spring入门十大问题

    - **MVC-step-by-step sample**:一个逐步介绍Spring MVC实现过程的示例项目,适合初学者跟随学习。 - **AppFuse**:一个基于Spring、Hibernate、Struts等技术的开源项目模板,提供了一种快速搭建Web应用的方法。 ...

    spring-framework-4.2.2.RELEASE

    需要注意的是,由于文档内容是通过OCR扫描识别获得的,某些地方可能会有错别字或者识别错误,这需要读者根据上下文以及自身对Spring Framework的理解来合理推断并纠正。 总的来说,Spring Framework 4.2.2.RELEASE...

    (毕业设计)-基于Springboot开发停车位管理系统(调用百度地图API)设计与实现(源码).zip

    (毕业设计)-基于spring boot+mybatis+spring mvc+bootstrap开发停车位管理系统(调用百度地图API)设计与实现(源码) 项目描述 随着时代和科技的进步,人们的生活水平越来越高,私家车的数量不断上涨,随之产生了...

    Struts2整合Spring、JPA

    Struts2整合Spring和JPA是企业级Java应用开发中常见的技术组合,它们分别负责不同的职责:Struts2作为一款成熟的MVC框架,主要用于处理Web层的请求与响应;Spring作为一个全面的轻量级框架,提供了依赖注入(DI)和...

    spring类库可以用

    5. **MVC框架**:Spring MVC是Spring提供的Web应用框架,用于构建RESTful风格的Web应用。它包括模型、视图和控制器组件,提供了一种清晰的分离关注点的方式,使得Web应用的开发更加高效。 6. **Spring Boot**:随着...

    22. Spring Boot 拦截器HandlerInterceptor【从零开始学Spring Boot】

    需要注意的是,Spring Boot 2.x推荐使用`WebMvcConfigurer`而不是`WebMvcConfigurerAdapter`,因为后者在Spring Framework 5.0中已被废弃。 在实际项目中,我们可以根据需要添加多个拦截器,并调整它们的执行顺序。...

    mybatis3+spring4+struts2.3整合jar

    此外,Spring还提供了Web MVC框架,可以与Struts 2一起工作。 - **整合Spring与Struts 2**:Spring可以作为Struts 2的Action执行器,提供更强大的依赖注入能力,以及事务管理和安全控制。 - 在Struts 2的配置文件...

Global site tag (gtag.js) - Google Analytics