SpringMVC学习记录
2014-12-26 00:00
495 查看
摘要: 初学SpringMVC的笔记
1、浏览器发出请求,如url:localhost:8080/test/start.test
2、请求会给到DispatcherServlet(总的控制中心——前端控制器),由它对请求进行派发,前端控制器是需要写在配置文件web.xml中,即
由于限制了url的格式,如果请求是已.test结尾的。
3、前端控制器DispatcherServlet接收到请求,派发给我们自己的控制器,即具体的控制器,如StartController,如何派发给自己的控制器呢,就需要一个HandlerMapping,即建立了请求与控制器之间的映射,HandlerMapping需要配置在test-Servlet.xml文件中。
这里说一个比较简单的控制器,SimpleUrlHandlerMapping,配置代码如下:
4、转到哪个具体的控制器,就需要按自己的要求去选择了。
上面提到的,自己建立的控制器,实现的是简单的Controller接口,如下:
<bean id= "startController" class ="test.StartController"></ bean>
常用的,以及好用的控制器,在一般项目中经常使用到的。
用于直接跳转页面的控制器:
ParameterizableViewController,UrlFilenameViewController
配置如下:
(1)需要指定视图名,name ="viewName" value= "login"。
(2)不需要指定视图名,他是获取Url中的“.test”前面那一段。如“add_emp”
使用时机:有时候,把所有的jsp文件隐藏在WEB-INF中里面。
进阶,控制器,包括
AbstractController
命令控制器——AbstractCommandController
(3)这个控制器开始,可以自动封装表单参数成Object commandc对象,控制器中只需要。
//自动封装表单参数成command,再强制装换成 Emp对象。
Emp emp=(Emp)command;
//service.addEmp(emp);
System. out.println(emp);
在配置文件中,需要制定Command是一个什么样类型的类。
如此就可以了。
(4)说到这个控制器能够自动封装表单成为我们需要的Bean,表单中的类型为int或String类型,可以,如果是Date类型,就不可以。
整型正确转行,日期型不正确转化
属性编辑器的问题
如何提供自己的属性编辑器。
DataBind——数据绑定
给数据绑定对象注册一个日期类型的属性编辑器,需要重写初始化绑定期的方法
自定义为如下所示:
表单控制器——SimpleFormController
(5)onSubmit方法,当表单用post方法提交时,会转到这个方法。如果进入一个页面之前有,有数据需要初始化,需要用到referenceData方法。建造一个map模型。
jsp页面需要使用到jstl包。
test-servlet.xml配置文件需要配置如下:
(6)
5、视图解析器。
跳转到哪个页面,是根据这里设定的,
6、基于注解的MVC
加入包
当有多个配置文件时,可以在web.xml中配置如下:
看样子是知道了,虽然是在src/config里面建立配置文件,但是项目运行会把它放到上面的路径中。
下面的配置是重点!
在Controller中,添加注解,如
上面使用了两个注解。看到了吧
在servlet.xml中,首先,需要扫描包含控制器的包,找到这些注解。
详细讲 @RequestMapping ("/start" )
方法级别(一定要有),如上http://localhost:8080/@mvc/start.do
类级别,相当于根路径http://localhost:8080/@mvc/test/start.do
restfull,Url层面上的。
1、浏览器发出请求,如url:localhost:8080/test/start.test
2、请求会给到DispatcherServlet(总的控制中心——前端控制器),由它对请求进行派发,前端控制器是需要写在配置文件web.xml中,即
<servlet> <servlet-name> test</servlet-name > <servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class > <load-on-startup> 1</ load-on-startup> </servlet> <servlet-mapping> <servlet-name> test</servlet-name > <url-pattern> *.test</url-pattern > </servlet-mapping>
由于限制了url的格式,如果请求是已.test结尾的。
3、前端控制器DispatcherServlet接收到请求,派发给我们自己的控制器,即具体的控制器,如StartController,如何派发给自己的控制器呢,就需要一个HandlerMapping,即建立了请求与控制器之间的映射,HandlerMapping需要配置在test-Servlet.xml文件中。
这里说一个比较简单的控制器,SimpleUrlHandlerMapping,配置代码如下:
<!-- 基于Url的控制器,比较简单的控制器 --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" > <property name="mappings" > <props> <prop key="start.test" >startController</ prop> <prop key="add_emp.test" >addEmpController</ prop> <!-- UrlFilenameViewController --> <prop key="add.test" >addEmpSuccController</ prop> </props> </property> </bean>
4、转到哪个具体的控制器,就需要按自己的要求去选择了。
上面提到的,自己建立的控制器,实现的是简单的Controller接口,如下:
<bean id= "startController" class ="test.StartController"></ bean>
常用的,以及好用的控制器,在一般项目中经常使用到的。
用于直接跳转页面的控制器:
ParameterizableViewController,UrlFilenameViewController
配置如下:
(1)需要指定视图名,name ="viewName" value= "login"。
<!-- 参数化的ViewController,我们不需要自己建立,只需要直接使用就可以了 --> <bean id= "loginController" class="org.springframework.web.servlet.mvc.ParameterizableViewController" > <property name="viewName" value="login"/> </ bean>
(2)不需要指定视图名,他是获取Url中的“.test”前面那一段。如“add_emp”
<!-- 使用UrlFilenameViewController,就不需要配置视图名这个过程。 --> <bean id= "addEmpController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController" > </bean>
使用时机:有时候,把所有的jsp文件隐藏在WEB-INF中里面。
进阶,控制器,包括
AbstractController
命令控制器——AbstractCommandController
(3)这个控制器开始,可以自动封装表单参数成Object commandc对象,控制器中只需要。
//自动封装表单参数成command,再强制装换成 Emp对象。
Emp emp=(Emp)command;
//service.addEmp(emp);
System. out.println(emp);
在配置文件中,需要制定Command是一个什么样类型的类。
<!-- 指定command对象是一个什么样的类,此处为员工类test.Emp --> <bean id= "addEmpSuccController" class="test.EmpController"> <property name="commandClass" value="test.Emp"/> </bean>
如此就可以了。
(4)说到这个控制器能够自动封装表单成为我们需要的Bean,表单中的类型为int或String类型,可以,如果是Date类型,就不可以。
整型正确转行,日期型不正确转化
属性编辑器的问题
如何提供自己的属性编辑器。
DataBind——数据绑定
给数据绑定对象注册一个日期类型的属性编辑器,需要重写初始化绑定期的方法
@Override protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { // TODO Auto-generated method stub super.initBinder(request, binder); }
自定义为如下所示:
//注册了日期转换的编辑器 @Override protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { binder.registerCustomEditor(Date. class, new CustomDateEditor( new SimpleDateFormat("yyyy-MM-dd" ), true)); }
表单控制器——SimpleFormController
(5)onSubmit方法,当表单用post方法提交时,会转到这个方法。如果进入一个页面之前有,有数据需要初始化,需要用到referenceData方法。建造一个map模型。
jsp页面需要使用到jstl包。
@Override protected Map referenceData(HttpServletRequest request) throws Exception { Map<String, Object> model= new HashMap<String, Object>(); model.put( "deptList", new String[]{"sales", "manage"}); return model; } /** * onSubmit方法,是当表单提交时处理请求 * 3.0版本后少用。 * 如果使用command控制器,只要 Url符合要求,自动就会提交 * 如果使用Form控制器,只有表单是method="post"时,才会去执行onSubmit方法。 */ @Override protected ModelAndView onSubmit(Object command) throws Exception { Emp emp = (Emp) command; // service.addEmp(emp); System. out.println(emp); return new ModelAndView(getSuccessView() ); }
test-servlet.xml配置文件需要配置如下:
<bean id= "addEmpController" class ="test.EmpFormController"> <property name="commandClass" value="test.Emp" /> <property name="formView" value="add_emp" /> <property name="successView" value="success" /> </bean>
(6)
5、视图解析器。
<!--基于URL的视图解析器, 从逻辑视图名称到真正视图上面的映射 --> <bean 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>
跳转到哪个页面,是根据这里设定的,
6、基于注解的MVC
加入包
当有多个配置文件时,可以在web.xml中配置如下:
<servlet > <servlet-name >mvc</ servlet-name> < servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param > <param-name> contextConfigLocation</param-name ><!-- 上下文配置文件的名称不变 --> <param-value> /WEB-INF/classes/spring/*.xml </param-value> </init-param > <load-on-startup >1</ load-on-startup> </servlet >
看样子是知道了,虽然是在src/config里面建立配置文件,但是项目运行会把它放到上面的路径中。
下面的配置是重点!
<init-param > <param-name> contextConfigLocation</param-name ><!-- 上下文配置文件的名称不变 --> <param-value> /WEB-INF/classes/spring/*.xml </param-value> </init-param >
在Controller中,添加注解,如
@Controller @RequestMapping("/test" ) public class TestController { @RequestMapping("/start/{name}" ) public String start(@PathVariable String name){ System. out.println(name); return "start" ; } }
上面使用了两个注解。看到了吧
在servlet.xml中,首先,需要扫描包含控制器的包,找到这些注解。
<!-- 1、进行普遍扫描 --> <context:component-scan base-package="test.controller" />
<!-- 2、视图解析器,使用 jsp或者jstl 最适合使用这个类。基于Resources的解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name="prefix" value="/WEB-INF/page/"/> <property name="suffix" value=".jsp"/> </bean>
详细讲 @RequestMapping ("/start" )
方法级别(一定要有),如上http://localhost:8080/@mvc/start.do
类级别,相当于根路径http://localhost:8080/@mvc/test/start.do
restfull,Url层面上的。
相关文章推荐
- SpringMVC学习记录
- SpringMVC学习记录2
- SpringMVC学习记录(九)--RequestContextHolder分析
- springmvc学习记录-20170601
- SpringMvc学习记录
- springMVC学习记录
- SpringMVC学习记录--Validator验证分析
- SpringMVC学习记录4
- SpringMvc学习-一些乱七八糟的记录
- SpringMVC学习记录(七)--拦截器的使用
- SpringMVC学习记录3
- SpringMVC学习记录(五)--表单标签
- SpringMVC学习记录(四)--文件上传与下载
- SpringMVC学习记录5
- springmvc学习记录----springmvc的文件上传和下载
- SpringMVC学习记录1
- SpringMVC学习记录(三)--异常处理
- SpringMVC学习记录(七)--拦截器的使用
- springmvc学习记录(一)
- SpringMVC学习记录(六)--Validator验证