MyException - 我的异常网
当前位置:我的异常网» VC/MFC » springMvc使用跟经验总结(长沙师说网络科技有限公

springMvc使用跟经验总结(长沙师说网络科技有限公司)

www.MyException.Cn  网友分享于:2015-08-21  浏览:0次
springMvc使用和经验总结(长沙师说网络科技有限公司)

springMvc

先分析下代码,快速学习,先要把配置文件写好,

给上2个类具体看看

package com.shishuo.studio.action;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.shishuo.studio.constant.SystemConstant;
import com.shishuo.studio.entity.Category;
import com.shishuo.studio.entity.vo.CourseVo;
import com.shishuo.studio.entity.vo.PageVo;
import com.shishuo.studio.exception.CategoryNotFoundException;
import com.shishuo.studio.exception.notfound.StorageNotFoundException;
import com.shishuo.studio.service.CategoryService;
import com.shishuo.studio.service.UserService;

/**
 * @author Herbert
 * 
 */
@Controller
@RequestMapping("/category")
public class CategoryAction extends BaseAction {

	protected final Logger logger = Logger.getLogger(this.getClass());

	@Autowired
	protected CategoryService categoryService;

	@Autowired
	protected UserService userService;

	/**
	 * 首页
	 * 
	 * @param modelMap
	 * @return
	 */
	@RequestMapping(value = "/{categoryId}.htm", method = RequestMethod.GET)
	public String category(@PathVariable long categoryId, ModelMap modelMap,
			@RequestParam(value = "p", defaultValue = "1") int p) {
		try {
			// 获得数据
			Category category = categoryService.getCategoryById(categoryId);
			// 获取当前目录下的所有课程
			PageVo<CourseVo> coursePageVo = courseService
					.getCoursePageByIdForUser(categoryId, p, 24);
			// 增加属性
			modelMap.addAttribute("category", category);
			modelMap.put("coursePageVo", coursePageVo);
			return "category";
		} catch (CategoryNotFoundException e) {
			return SystemConstant.PAGE_404;
		} catch (StorageNotFoundException e) {
			// TODO Auto-generated catch block
			return SystemConstant.PAGE_404;
		}

	}
}

package com.shishuo.studio.action;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.shishuo.studio.action.auth.AuthBaseAction;

@Controller
@RequestMapping("/about")
public class AboutAction extends AuthBaseAction {

	/**
	 * 跳转到关于我们页面
	 * 
	 * @param modelMap
	 * @param request
	 * @return
	 */
	@RequestMapping(value = "/about.htm", method = RequestMethod.GET)
	public String about(ModelMap modelMap, HttpServletRequest request) {
		return "/about/about";
	}

	/**
	 * 跳转到服务协议页面
	 * 
	 * @param modelMap
	 * @param request
	 * @return
	 */
	@RequestMapping(value = "/service.htm", method = RequestMethod.GET)
	public String service(ModelMap modelMap, HttpServletRequest request) {
		return "/about/service";
	}

	/**
	 * 跳转到投诉举报页面
	 * 
	 * @param modelMap
	 * @param request
	 * @return
	 */
	@RequestMapping(value = "/complain.htm", method = RequestMethod.GET)
	public String complain(ModelMap modelMap, HttpServletRequest request) {
		return "/about/complain";
	}

	/**
	 * 跳转到版权声明页面
	 * 
	 * @param modelMap
	 * @param request
	 * @return
	 */
	@RequestMapping(value = "/copyright.htm", method = RequestMethod.GET)
	public String copyright(ModelMap modelMap, HttpServletRequest request) {
		return "/about/copyright";
	}

	/**
	 * 跳转到联系我们页面
	 * 
	 * @param modelMap
	 * @param request
	 * @return
	 */
	@RequestMapping(value = "/connect.htm", method = RequestMethod.GET)
	public String connect(ModelMap modelMap, HttpServletRequest request) {
		return "/about/connect";
	}

}

return "system/comment/comment";后面不需要东西

return "redirect:/admin/comment/page.htm";一般当我改变一个状态的时候 我需要还是显示在当前页面 就需要再进入Action 相当于再到数据库访问一次把 我改变的数据同个pageVo 显示到页面


spring的注解学习
@RequestParam("description") String description,
@PathVariable
请求路径上有个id的变量值,可以通过@PathVariable来获取  @RequestMapping(value = "/page/{id}", method = RequestMethod.GET) 
@autowired 自动配置 不需要写getter() setter()方法
@Deprecated  过时
@Repository 用在接口前面的类 比如ibits接口类的最前面
@ResponseBody当控制器返回页面不是字符串的时候 比如返回一个json对象用这个注解
@Controller控制器 加在控制器类的最前面
@RequestMapping("/admin/file")
放在类前面是这个路径下
@RequestMapping(value = "/index.htm", method = RequestMethod.GET)如果这个注解放在方法的前面 表示上面那个路径的基础下然后再是这个路劲
@RequestParam(value = "fileId", defaultValue = "1")当url传入参数的时候就可以拿到值
比如@RequestMapping(value = "/update.htm", method = RequestMethod.GET)
public String update(
@RequestParam(value = "fileId", defaultValue = "1") long fileId,
ModelMap modelMap) throws Exception {}


相关配置文件如下
<?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:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	         http://www.springframework.org/schema/beans/spring-beans.xsd     
	         http://www.springframework.org/schema/tx   
	         http://www.springframework.org/schema/tx/spring-tx.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.xsd   
	         http://www.springframework.org/schema/context     
	         http://www.springframework.org/schema/context/spring-context.xsd
	         http://www.springframework.org/schema/task 
	         http://www.springframework.org/schema/task/spring-task.xsd">


	<!-- 自动扫描的包名 -->
	<context:component-scan base-package="com.shishuo.studio"></context:component-scan>


	<mvc:annotation-driven />

	<task:annotation-driven />
	<tx:annotation-driven />

	<bean
		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
	<bean
		class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/**" />
			<bean class="com.shishuo.studio.filter.GlobalInterceptor"></bean>
		</mvc:interceptor>
		<mvc:interceptor>
			<mvc:mapping path="/auth/**" />
			<bean class="com.shishuo.studio.filter.AuthInterceptor"></bean>
		</mvc:interceptor>
		<mvc:interceptor>
			<mvc:mapping path="/auth/studio/**" />
			<bean class="com.shishuo.studio.filter.StudioInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>
	<!-- 在XML配置文件中加入外部属性文件,当然也可以指定外部文件的编码 -->
	<bean id="propertyConfigurer" class="com.shishuo.studio.util.PropertyUtils">
		<property name="locations">
			<list>
				<value>classpath:shishuo.studio.properties</value> <!-- 指定外部文件的编码 -->
			</list>
		</property>
	</bean>
	<!-- FreeMarker的配置 -->
	<bean id="freeMarkerConfigurer"
		class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<property name="templateLoaderPath" value="/WEB-INF/ftl" /><!-- 
			指定路径 -->
		<property name="defaultEncoding" value="UTF-8" /><!-- 指定编码格式 -->
		<property name="freemarkerSettings">
			<props>
				<prop key="template_update_delay">10</prop>
				<prop key="defaultEncoding">UTF-8</prop>
				<prop key="url_escaping_charset">UTF-8</prop>
				<prop key="locale">zh_CN</prop>
				<prop key="boolean_format">true,false</prop>
				<prop key="time_format">HH:mm:ss</prop>
				<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
				<prop key="date_format">yyyy-MM-dd</prop>
				<prop key="number_format">#.##</prop>
				<prop key="whitespace_stripping">true</prop>
				<prop key="classic_compatible">true</prop>
			</props>
		</property>
	</bean>
	<!-- 配置 FreeMarker视图解析器 -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"></property>
		<property name="cache" value="false" />
		<property name="prefix" value="/" />
		<property name="suffix" value=".ftl" /><!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 -->
		<property name="contentType" value="text/html;charset=utf-8" />
		<property name="exposeRequestAttributes" value="true" />
		<property name="exposeSessionAttributes" value="true" />
		<property name="exposeSpringMacroHelpers" value="true" />
	</bean>
</beans>



@Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。它的作用和在xml文件中使用bean节点配置组件时一样的。
@Component  Component是Spring管理组件的通用形式,而@repository,@Service,@Controller是它的细化。分别表示更加具体的用例(分别对应持久化层,服务层和表现层)


B、按照Class路径扫描
XML风格的配置方式,我们会在配置文件中配置大量的bean,这样但项目足够大时,那么这个配置文件将过于庞大而不便管理。而应用@注释的配置方式,我们在类中用@Component等注释类,并让容器按照Classpath自动扫描管理它们。要实现以上功能我们需要这样定义。
<?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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <context:component-scan base-package="org.example" />
</beans>
在使用组件扫描时,AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor也将隐式包含进来,也就是说它支持@Autowired等,不需要我们如用<context:annotation-config/>再做声明了。。
自动扫描包名的配置 <context:component-scan base-package="com.shishuo"></context>


当我们用spring mvc 前端控制器的时候需要配置


<!-- spring mvc 基于注解在方法上 控制映射 配置 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
</bean>


<!-- 在XML配置文件中加入外部属性文件,当然也可以指定外部文件的编码 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:shishuocms.properties</value> <!-- 指定外部文件的编码 -->
</list>
</property>
</bean>


<!-- 配置 FreeMarker视图解析器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"></property>
<property name="cache" value="false" />
<property name="prefix" value="/" />
<property name="suffix" value=".ftl" /><!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 -->
<property name="contentType" value="text/html;charset=utf-8" />
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
<property name="exposeSpringMacroHelpers" value="true" />
</bean>


<!--创建数据映射器,数据映射器必须为接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="annotationClass" value="org.springframework.stereotype.Repository" />
<property name="basePackage" value="com.shishuo.cms.dao" />
</bean>
spring mvc 拦截器


拦截器在application.xml配置


<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.shishuo.cms.filter.GlobalInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>


怎么使用RequestMapping的参数 主要有RequestParam Pathvariable(这个注解是获取url里面的参数)


5.1.1、常见应用场景
1、日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。
2、权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面;
3、性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);
4、通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现。
5、OpenSessionInView:如Hibernate,在进入处理器打开Session,在完成后关闭Session。
…………本质也是AOP(面向切面编程),也就是说符合横切关注点的所有功能都可以放入拦截器实现。


MySQL server version for the right syntax to use near  where userId=28  at line 1
这个错误是在写修改语句的时候 where 前面多加了一个逗号 
syntax error 是语法错误
 
Could not resolve view with name 'auth/teacher/skill/update' in servlet with是自己没有加@Responsebody 用spring mvc 的时候返回是json 一定要记得写@Responsebody


当需要上传一个form里面包含 文件 或者视屏的时候 一定要记得在form表单后面添加 enctype="multipart/form-data" enctype="multipart/form-data"


 @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
分类: spring 2012-09-21 16:22 11494人阅读 评论(4) 收藏 举报
目录(?)[+]
引言:
接上一篇文章,对@RequestMapping进行地址映射讲解之后,该篇主要讲解request 数据到handler method 参数数据的绑定所用到的注解和什么情形下使用;




简介:
handler method 参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:(主要讲解常用类型)


A、处理requet uri 部分(这里指uri template中variable,不含queryString部分)的注解:   @PathVariable;
B、处理request header部分的注解:   @RequestHeader, @CookieValue;
C、处理request body部分的注解:@RequestParam,  @RequestBody;


D、处理attribute类型是注解: @SessionAttributes, @ModelAttribute;



版权声明:本文为博主原创文章,未经博主允许不得转载。

文章评论

程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
一个程序员的时间管理
一个程序员的时间管理
程序员都该阅读的书
程序员都该阅读的书
 程序员的样子
程序员的样子
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员的鄙视链
程序员的鄙视链
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
总结2014中国互联网十大段子
总结2014中国互联网十大段子
每天工作4小时的程序员
每天工作4小时的程序员
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
Java程序员必看电影
Java程序员必看电影
编程语言是女人
编程语言是女人
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员应该关注的一些事儿
程序员应该关注的一些事儿
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
10个调试和排错的小建议
10个调试和排错的小建议
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
代码女神横空出世
代码女神横空出世
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
如何成为一名黑客
如何成为一名黑客
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
那些争议最大的编程观点
那些争议最大的编程观点
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
我是如何打败拖延症的
我是如何打败拖延症的
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
鲜为人知的编程真相
鲜为人知的编程真相
老程序员的下场
老程序员的下场
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员必看的十大电影
程序员必看的十大电影
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
中美印日四国程序员比较
中美印日四国程序员比较
程序员和编码员之间的区别
程序员和编码员之间的区别
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有