`
jinnianshilongnian
  • 浏览: 21438491 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2405861
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:2998369
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5631961
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:257722
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1593407
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:249046
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5848148
Group-logo
跟我学Nginx+Lua开...
浏览量:698321
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:780719
社区版块
存档分类
最新评论

扩展SpringMVC以支持更精准的数据绑定1

 
阅读更多

最新版请点击查看FormModelMethodArgumentResolver.java 

 

问题描述:

springMVC 数据绑定 多个对象 如何准确绑定?

<form>

    <input name="student.name" value="Kate" />

    <input name="student.type" value="自费" />

    <input name="teacher.name" value="Gavin" />

    <input name="teacher.level" value="2" />

</form>
@RequestMapping("/school.do")

public String school(Student student, Teacher teacher) {

     return "school";

}

如果还是想刚才的jsp那些写表单,是不能封装参数的,必须把“student.”和“teacher.”去掉,但是这样封装就不能准确封装了。

 

这个问题最近老是有人问,所以写一个扩展很容易解决这个问题,springmvc和spring一样,预留的扩展点足够多。

 

我们都知道struts2默认就是这种方案,这是因为struts2采用了OGNL,并通过栈(根对象)进行操作的,而且栈中默认有action实例,所以很自然的没有这种问题。

springmvc不同,没有根对象的概念,而且本身很难来解决这个问题,因此大家在使用时最好避免这种方式或者使用类似于struts1的FormBean组合对象来解决。

 

解决方案:

扩展spring的HandlerMethodArgumentResolver以支持自定义的数据绑定方式。

 

1、请下载附件的代码,放到工程中;

2、在RequestMappingHandlerAdapter添加自定义HandlerMethodArgumentResolver Bean;

     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
        <!--线程安全的访问session-->
         <property name="synchronizeOnSession" value="true"/> 
         <property name="customArgumentResolvers">
            <list>
               <bean class="cn.javass.spring.mvc.method.annotation.RequestJsonParamMethodArgumentResolver"/>
               <bean class="cn.javass.spring.mvc.method.annotation.FormModelMethodArgumentResolver"/>
            </list>
         </property>
     </bean>  

 //customArgumentResolvers用于注入自定义的参数解析器,此处我们注了FormModelMethodArgumentResolver;FormModelMethodArgumentResolver我直接修改的org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor;

 

3、使用方式

 public String user(@FormModel("student") Student student, @FormModel("teacher") Teacher teacher) 

 

4、测试控制器

package cn.javass.chapter6.web.controller.formmodel;

import java.util.Arrays;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import cn.javass.chapter6.model.UserModel;
import cn.javass.spring.mvc.bind.annotation.FormModel;
import cn.javass.spring.mvc.util.MapWapper;


@Controller
@RequestMapping("/formmodel")  
public class FormModelController {

    //ok   http://localhost:9080/springmvc-chapter6/formmodel/user?user.username=zhang&user.password=123
    @RequestMapping("/user/{user.realname}")  
    public String user(@FormModel("user") UserModel user) {
        System.out.println(user);
        return "redirect:/success";        
    }
    
    //ok   http://localhost:9080/springmvc-chapter6/formmodel/array1?array[0]=zhang&array[1]=li
    @RequestMapping("/array1")  
    public String array1(@FormModel("array") String[] array) {
        System.out.println(Arrays.toString(array));
        return "redirect:/success";        
    }
    
    //ok   http://localhost:9080/springmvc-chapter6/formmodel/array2?array[0].username=zhang&array[0].password=123&array[1].username=li
    @RequestMapping("/array2")  
    public String array2(@FormModel("array") UserModel[] array) {
        System.out.println(Arrays.toString(array));
        return "redirect:/success";        
    }
    
    
    //ok   http://localhost:9080/springmvc-chapter6/formmodel/list1?list[0]=123&list[1]=234
    @RequestMapping("/list1")  
    public String list1(@FormModel("list") List<Integer> list) {
        System.out.println(list);
        return "redirect:/success";        
    }
    
    //ok   http://localhost:9080/springmvc-chapter6/formmodel/list2?list[0].username=zhang&list[1].username=li
    @RequestMapping("/list2")  
    public String list2(@FormModel("list") List<UserModel> list) {
        System.out.println(list);
        return "redirect:/success";        
    }
    
    //ok   http://localhost:9080/springmvc-chapter6/formmodel/map1?map['0']=123&map["1"]=234
    @RequestMapping("/map1")  
    public String map1(@FormModel("map") MapWapper<String, Integer> map) {
        System.out.println(map);
        return "redirect:/success";        
    }
  //ok   http://localhost:9080/springmvc-chapter6/formmodel/map2?map['0'].password=123&map['0'].username=123&map["1"].username=234
    @RequestMapping("/map2")  
    public String map2(@FormModel("map") MapWapper<Integer, UserModel> map) {
        System.out.println(map);
        return "redirect:/success";        
    }
}

 

具体使用可以下载之前springmvc第六章源代码http://jinnianshilongnian.iteye.com/blog/1683388 

将附件中的FormModel.rar解压放到src下进行测试。

 

 

支持的spring版本:

springmvc 3.1.x,暂不支持3.0。为什么不支持呢?springmvc 3.1 和 3.0 从架构上发生了变化,而且springmvc3.1更容易扩展。

 

支持绑定的数据:

模型、集合、数组、MapWapper(Map的一个包装器,通过getInnerMap获取真实Map)

 

 

缺点:

spring自定义的参数解析器会放在默认解析器之后,不能指定order,因此如果我们@FormModel("map") Map map,此map会变成Model(请参考http://jinnianshilongnian.iteye.com/blog/1698916 第六部分、Model Map ModelMap),希望未来的版本支持自定义顺序来解决这个问题;此处我们使用MapWapper解决,可以通过MapWapper.getInnerMap()拿到我们需要的Map

 

其他方案:

[SpringMVC]修改源码使之能够更加智能的自动装配request请求参数.(不建议修改源代码解决)

@rainsoft 也给出了类似的方案, http://www.iteye.com/topic/1124433#2357830

 

如果你使用的是mvc:annotation-driven,请这样配置

 <mvc:annotation-driven>
     <mvc:argument-resolvers>
            <bean class="com.sishuok.es.common.web.bind.method.annotation.FormModelMethodArgumentResolver"/>
        </mvc:argument-resolvers>
 </mvc:annotation-driven>

  

 

 

欢迎大家反馈问题,我会及时修正。

 

 

下一个扩展: 绑定请求参数(JSON字符串,如 deptIds=[{"deptId":4,"isPrimary":true}] ) 到 模型对象。

 

 

17
2
分享到:
评论
33 楼 jinnianshilongnian 2013-08-03  
landy8530 写道
你好,发现一个小小的bug哦。(不知道有没有错)在代码
//ok   http://localhost:9080/springmvc-chapter6/formmodel/user?user.username=zhang&user.password=123  
    @RequestMapping("/user/{user.realname}")    
    public String user(@FormModel("user") UserModel user) {  
        System.out.println(user);  
        return "redirect:/success";          
    }  
      

中,{user.realname}部分应该去掉吧。不然会报404错误哦!

嗯,得去掉
32 楼 jinnianshilongnian 2013-08-03  
landy8530 写道
你好,你在formModel中定义的FormModelMethodArgumentResolver这个类中的MockHttpServletRequest是spring-test包中的呢。如果我maven坐标写成
<dependency>  
    <groupId>org.springframework</groupId>  
    <artifactId>spring-test</artifactId>  
    <version>3.1.0.RELEASE</version>  
    <scope>test</scope>  
</dependency> 

真正运行时就报错了呢。说找不到这个类了。

因为使用了这里边的MockRequest 所以需要加上
31 楼 landy8530 2013-08-02  
你好,发现一个小小的bug哦。(不知道有没有错)在代码
//ok   http://localhost:9080/springmvc-chapter6/formmodel/user?user.username=zhang&user.password=123  
    @RequestMapping("/user/{user.realname}")    
    public String user(@FormModel("user") UserModel user) {  
        System.out.println(user);  
        return "redirect:/success";          
    }  
      

中,{user.realname}部分应该去掉吧。不然会报404错误哦!
30 楼 landy8530 2013-08-02  
你好,你在formModel中定义的FormModelMethodArgumentResolver这个类中的MockHttpServletRequest是spring-test包中的呢。如果我maven坐标写成
<dependency>  
    <groupId>org.springframework</groupId>  
    <artifactId>spring-test</artifactId>  
    <version>3.1.0.RELEASE</version>  
    <scope>test</scope>  
</dependency> 

真正运行时就报错了呢。说找不到这个类了。
29 楼 jinnianshilongnian 2013-08-02  
mrvoce 写道
 //ok   http://localhost:9080/springmvc-chapter6/formmodel/list2?list[0].username=zhang&list[1].username=li  
    @RequestMapping("/list2")   

作者您好,看到您的文章后觉得这里是否有问题,我测试了下您的FormModelMethodArgumentResolver类,觉得
 for(Object key : servletRequest.getParameterMap().keySet()) {
}
//。。。。。
target.add(component);

这里是否有问题呢,例如您上面的url测试时正确的,那么list[0].username=abc&list[0].其他字段=111&list[1].username=bcd&list[1].其他字段=222
下标为0的list,如果我写N个参数那么您的扩展类将会add N个对应的model实例,所以这里是否有一点点bug。

会的,如果用户恶意添加很多个,很可能造成内存溢出(此处没考虑限定集合增加的量 后期加上)
28 楼 mrvoce 2013-08-02  
 //ok   http://localhost:9080/springmvc-chapter6/formmodel/list2?list[0].username=zhang&list[1].username=li  
    @RequestMapping("/list2")   

作者您好,看到您的文章后觉得这里是否有问题,我测试了下您的FormModelMethodArgumentResolver类,觉得
 for(Object key : servletRequest.getParameterMap().keySet()) {
}
//。。。。。
target.add(component);

这里是否有问题呢,例如您上面的url测试时正确的,那么list[0].username=abc&list[0].其他字段=111&list[1].username=bcd&list[1].其他字段=222
下标为0的list,如果我写N个参数那么您的扩展类将会add N个对应的model实例,所以这里是否有一点点bug。
27 楼 jinnianshilongnian 2013-06-26  
huangyunbin 写道
jinnianshilongnian 写道

估计你是用了mvc:annotation-driven,这样的话需要这样配:

<mvc:annotation-driven>
     <mvc:argument-resolvers>
            <bean class="com.sishuok.es.common.web.bind.method.annotation.FormModelMethodArgumentResolver"/>
        </mvc:argument-resolvers>
</mvc:annotation-driven>


谢谢,我这样修改后ok了。
不过为什么 <mvc:annotation-driven>情况下要这么做呢。我网上看到说<mvc:annotation-driven>和RequestMappingHandlerAdapter其实是一样的,所以只会读取<mvc:annotation-driven>,忽略掉了RequestMappingHandlerAdapter。但是我试验的结果是:只要RequestMappingHandlerAdapter写在<mvc:annotation-driven>的前面就可以了。
我的这个配置是ok的:

  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
        <!--线程安全的访问session-->
         <property name="synchronizeOnSession" value="true"/> 
         <property name="customArgumentResolvers">
            <list>
               <bean class="com.dianxin.secure.controller.annotation.FormModelMethodArgumentResolver"/>
            </list>
         </property>
     </bean>  
	<mvc:annotation-driven/> 


求解释,为什么这样也可以,具体的原理是什么?<mvc:annotation-driven>和RequestMappingHandlerAdapter的关系是什么?

注册顺序的问题(如果注册了就不会再注册),实现问题  一般情况就是二者选一 没必要纠结
26 楼 huangyunbin 2013-06-26  
jinnianshilongnian 写道

估计你是用了mvc:annotation-driven,这样的话需要这样配:

<mvc:annotation-driven>
     <mvc:argument-resolvers>
            <bean class="com.sishuok.es.common.web.bind.method.annotation.FormModelMethodArgumentResolver"/>
        </mvc:argument-resolvers>
</mvc:annotation-driven>


谢谢,我这样修改后ok了。
不过为什么 <mvc:annotation-driven>情况下要这么做呢。我网上看到说<mvc:annotation-driven>和RequestMappingHandlerAdapter其实是一样的,所以只会读取<mvc:annotation-driven>,忽略掉了RequestMappingHandlerAdapter。但是我试验的结果是:只要RequestMappingHandlerAdapter写在<mvc:annotation-driven>的前面就可以了。
我的这个配置是ok的:

  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
        <!--线程安全的访问session-->
         <property name="synchronizeOnSession" value="true"/> 
         <property name="customArgumentResolvers">
            <list>
               <bean class="com.dianxin.secure.controller.annotation.FormModelMethodArgumentResolver"/>
            </list>
         </property>
     </bean>  
	<mvc:annotation-driven/> 


求解释,为什么这样也可以,具体的原理是什么?<mvc:annotation-driven>和RequestMappingHandlerAdapter的关系是什么?
25 楼 jinnianshilongnian 2013-06-26  
huangyunbin 写道
我用你的@FormModel没有成功。我debug的时候FormModelMethodArgumentResolver的supportsParameter和resolveArgument方法都没有进入。
我用的是spring的3.14.
不知道是什么原因。。。。

估计你是用了mvc:annotation-driven,这样的话需要这样配:

<mvc:annotation-driven>
     <mvc:argument-resolvers>
            <bean class="com.sishuok.es.common.web.bind.method.annotation.FormModelMethodArgumentResolver"/>
        </mvc:argument-resolvers>
</mvc:annotation-driven>
24 楼 huangyunbin 2013-06-26  
我用你的@FormModel没有成功。我debug的时候FormModelMethodArgumentResolver的supportsParameter和resolveArgument方法都没有进入。
我用的是spring的3.14.
不知道是什么原因。。。。
23 楼 jinnianshilongnian 2013-06-17  
shenqidekobe 写道
其他都还好,很不错,但是头像得换一个,这头像太贱太猥琐了

换了个。你看看行不
22 楼 jinnianshilongnian 2013-06-17  
shenqidekobe 写道
其他都还好,很不错,但是头像得换一个,这头像太贱太猥琐了

额,
21 楼 shenqidekobe 2013-06-17  
其他都还好,很不错,但是头像得换一个,这头像太贱太猥琐了
20 楼 searchjack 2013-06-05  
这真是极好的 。
19 楼 yangpeihai 2013-01-29  
jinnianshilongnian 写道
yangpeihai 写道
tao哥,请教个问题,我的controller方法如下
public String save(HttpServletRequest request,HttpServletResponse response, ModelMap modelMap,@FormModel("user") User u,@RequestJsonParam("user") User u1){
//略
}


jsp如下
<form action="/WebRoot/studentController.do?method=save" method="post">
		<table>
			<tr>
				<td>id:</td>
				<td><input type='text' name="user.id" />
				</td>
			</tr>
			<tr>
				<td>username:</td>
				<td><input type='text' name="user.username" />
				</td>
			</tr>
			<tr>
				<td>password:</td>
				<td> 
				  <input type='password' name="user.password" value=""/>
				</td>
			</tr>
			<tr>
				<td colspan="2"><input type="submit" value="Save Changes" /></td>
			</tr>
		</table> 
	</form> 


现在提交表单,id、username、passowd都没有封装到user对象里面,但是我把user.去掉,就可以正确把值封装到user对象,指点一下是怎么回事,多谢


你配置如下了吗? 或者把配置发我站内信
     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
        <!--线程安全的访问session-->
         <property name="synchronizeOnSession" value="true"/> 
         <property name="customArgumentResolvers">
            <list>
               <bean class="cn.javass.spring.mvc.method.annotation.RequestJsonParamMethodArgumentResolver"/>
               <bean class="cn.javass.spring.mvc.method.annotation.FormModelMethodArgumentResolver"/>
            </list>
         </property>
     </bean> 


是的,我配置如下,感觉应该没问题,启动没有报错
     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
        <!--线程安全的访问session-->
         <property name="synchronizeOnSession" value="true"/> 
         <property name="customArgumentResolvers">
            <list>
               <bean class="cn.javass.spring.mvc.method.annotation.RequestJsonParamMethodArgumentResolver"/>
               <bean class="cn.javass.spring.mvc.method.annotation.FormModelMethodArgumentResolver"/>
            </list>
         </property>
     </bean>  
18 楼 yangpeihai 2013-01-29  
yangpeihai 写道
tao哥,请教个问题,我的controller方法如下
public String save(HttpServletRequest request,HttpServletResponse response, ModelMap modelMap,@FormModel("user") User u,@RequestJsonParam("user") User u1){
//略
}


jsp如下
<form action="/WebRoot/studentController.do?method=save" method="post">
		<table>
			<tr>
				<td>id:</td>
				<td><input type='text' name="user.id" />
				</td>
			</tr>
			<tr>
				<td>username:</td>
				<td><input type='text' name="user.username" />
				</td>
			</tr>
			<tr>
				<td>password:</td>
				<td> 
				  <input type='password' name="user.password" value=""/>
				</td>
			</tr>
			<tr>
				<td colspan="2"><input type="submit" value="Save Changes" /></td>
			</tr>
		</table> 
	</form> 


现在提交表单,id、username、passowd都没有封装到user对象里面,但是我把user.去掉,就可以正确把值封装到user对象,指点一下是怎么回事,多谢


对啦,我的spring是3.1.4版本
17 楼 jinnianshilongnian 2013-01-29  
yangpeihai 写道
tao哥,请教个问题,我的controller方法如下
public String save(HttpServletRequest request,HttpServletResponse response, ModelMap modelMap,@FormModel("user") User u,@RequestJsonParam("user") User u1){
//略
}


jsp如下
<form action="/WebRoot/studentController.do?method=save" method="post">
		<table>
			<tr>
				<td>id:</td>
				<td><input type='text' name="user.id" />
				</td>
			</tr>
			<tr>
				<td>username:</td>
				<td><input type='text' name="user.username" />
				</td>
			</tr>
			<tr>
				<td>password:</td>
				<td> 
				  <input type='password' name="user.password" value=""/>
				</td>
			</tr>
			<tr>
				<td colspan="2"><input type="submit" value="Save Changes" /></td>
			</tr>
		</table> 
	</form> 


现在提交表单,id、username、passowd都没有封装到user对象里面,但是我把user.去掉,就可以正确把值封装到user对象,指点一下是怎么回事,多谢


你配置如下了吗? 或者把配置发我站内信
     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
        <!--线程安全的访问session-->
         <property name="synchronizeOnSession" value="true"/> 
         <property name="customArgumentResolvers">
            <list>
               <bean class="cn.javass.spring.mvc.method.annotation.RequestJsonParamMethodArgumentResolver"/>
               <bean class="cn.javass.spring.mvc.method.annotation.FormModelMethodArgumentResolver"/>
            </list>
         </property>
     </bean> 
16 楼 yangpeihai 2013-01-29  
tao哥,请教个问题,我的controller方法如下
public String save(HttpServletRequest request,HttpServletResponse response, ModelMap modelMap,@FormModel("user") User u,@RequestJsonParam("user") User u1){
//略
}


jsp如下
<form action="/WebRoot/studentController.do?method=save" method="post">
		<table>
			<tr>
				<td>id:</td>
				<td><input type='text' name="user.id" />
				</td>
			</tr>
			<tr>
				<td>username:</td>
				<td><input type='text' name="user.username" />
				</td>
			</tr>
			<tr>
				<td>password:</td>
				<td> 
				  <input type='password' name="user.password" value=""/>
				</td>
			</tr>
			<tr>
				<td colspan="2"><input type="submit" value="Save Changes" /></td>
			</tr>
		</table> 
	</form> 


现在提交表单,id、username、passowd都没有封装到user对象里面,但是我把user.去掉,就可以正确把值封装到user对象,指点一下是怎么回事,多谢
15 楼 jinnianshilongnian 2012-11-25  
在世界的中心呼喚愛 写道
lz是怎么学习spring和hibernate?
我工作9个月了,spring和hibernate就是公司项目里面用到的,就会用,具体原理有些知道,有些不知道。
感觉学的很浅,也不知道怎么强化。特别hibernate,有些怕,现在大部分操作我都是用ibatis完成。
有本李刚的ssh书,现在敲一敲看一看。但是和公司用到的都不一样。
特别mvc框架,公司不用struts,用spring注解,url请求映射到ctr层的类名,
@Controller 
@RequestMapping("/formmodel")   
和这个很像,就是在xml里面配置下,在url请求的时候写/formmodel后面跟方法,参数

现在大部分时间都在处理业务问题,框架都标准化,无论哪个系统,基本都是那套框架使用,就是copy,copy。
但是还是感觉学的浅,很多异常没有办法自己处理。
想请教lz是怎么学习的。

看官方文档,看源码,多实践。 没有捷径
14 楼 在世界的中心呼喚愛 2012-11-24  
在世界的中心呼喚愛 写道
lz是怎么学习spring和hibernate?
我工作9个月了,spring和hibernate就是公司项目里面用到的,就会用,具体原理有些知道,有些不知道。
感觉学的很浅,也不知道怎么强化。特别hibernate,有些怕,现在大部分操作我都是用ibatis完成。
有本李刚的ssh书,现在敲一敲看一看。但是和公司用到的都不一样。
特别mvc框架,公司不用struts,用spring注解,url请求映射到ctr层的类名,
@Controller 
@RequestMapping("/formmodel")   
和这个很像,就是在xml里面配置下,在url请求的时候写/formmodel后面跟方法,参数

现在大部分时间都在处理业务问题,框架都标准化,无论哪个系统,基本都是那套框架使用,就是copy,copy。
但是还是感觉学的浅,很多异常没有办法自己处理。
想请教lz是怎么学习的。

框架异常。。

相关推荐

    spring杂谈 作者zhang KaiTao

    1.22 扩展SpringMVC以支持更精准的数据绑定1 1.23 扩展SpringMVC以支持绑定JSON格式的请求参数 1.24 扩展SpringMVC以支持绑定JSON格式的请求参数 1.25 在应用层通过spring特性解决数据库读写分离 1.26 context:...

    SpringMVC大威天龙.docx

    SpringMVC是Spring提供的一个强大而灵活的Web框架 借助于注解 SpringMVC提供了几乎是POJO的开发模式 使得控制器的...4. 功能强大的数据验证 格式化 绑定机制 5. 约定大于配置的契约式编程支持 基于注解的零配置支持等等

    Web框架编程-SpringMVC框架编程

    Spring MVC(Model-View-Controller)是一个基于Java的MVC...7. 数据绑定(Data Binding) 8. 校验器(Validator) 这些资源描述了Spring MVC框架中不同组件的职责和作用,协同工作以构建可靠和可扩展的Web应用程序。

    spring mvc 3.2 参考文档

    Spring的数据绑定是高度灵活的: 例如,它把类型不匹配当做验证错误,这样就可以算作应用程序错误,而不是系统错误。因此你不需要简单的重复拷贝您的业务对象的属性,表单对象中的非类型化的字符串只是处理无效的...

    公交线路站点管理系统(springboot+ssm+mysql+vue).zip

    在前端方面,使用了Vue.js作为主要的前端框架,Vue.js具有双向数据绑定、组件化开发等特点,能够提升开发效率和代码复用性,同时也使得页面响应更加迅速。 而在后端方面,选用了Spring Boot和SSM框架。Spring Boot...

    污水处理系统(springboot+ssm+vue+mysql8.x).zip

    Vue.js具有双向数据绑定、组件化开发等特点,能够提升开发效率和页面响应速度。 在后端方面,系统采用了Spring Boot和SSM框架。Spring Boot能够快速搭建后端服务,并且集成了大量的开箱即用的功能,简化了开发流程...

    weixin114明星应援系统设计与实现+ssm(源码+部署说明+演示视频+源码介绍+lw).rar

    SpringMVC:作为Web层框架,处理请求分发和数据绑定,简化了Controller层的开发。 MyBatis:作为持久层框架,实现与数据库的交互操作,提供了灵活的SQL编写方式。 MySQL:作为后端数据库,存储系统所需的各种数据...

    Spring MVC 员工管理系统

    和众多其它Web框架一样,它基于MVC设计理念,此外,由于它采用了松散耦合可插拔组件结构,具有比其它MVC框架更多的扩展性和灵活性。 Spring MVC框架围绕DispatcherServlet这个核心展开,DispatcherServlet的作用是...

    (第十一天)初识SpringMVC SSM框架的学习与应用-Java EE企业级应用开发学习记录

    请求处理流程: 我们将详细解释Spring MVC中的请求处理流程,包括请求映射、参数绑定、数据验证和响应生成。这有助于您理解整个请求生命周期。 配置与注解: 我们将演示如何配置Spring MVC,包括XML配置和注解驱动...

    Java毕业设计-基于ssm框架开发的校园美食交流系统+vue-毕业论文(附源代码).rar

    Vue的响应式数据绑定机制,使得前端界面能够实时响应后端数据的变化,提升了用户体验。同时,Vue的路由管理功能也帮助我们实现了页面的灵活跳转与权限控制。 该系统不仅具有基本的美食分享与点评功能,还提供了个性...

    weixin基于微信小程序的科创微应用平台设计与实现+ssm(源码+SSM+小程序+vue).zip

    前端采用Vue.js框架,实现了用户界面的快速渲染和数据绑定。通过组件化的方式,使得页面结构更加清晰,便于维护和扩展。 使用微信小程序作为载体,方便用户在移动端进行访问和使用。同时,微信小程序具有良好的跨...

    Thymeleaf中文参考手册_3.0.5版

    Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP .1.Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的...

    thymeleaf_3.0.5_中文参考手册

    简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 ... Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。

    thymeleaf_中文参考手册

    简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 ...3.Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。

    毕设之weixin马拉松报名系统微信小程序+ssm--(源码+部署说明+SSM+微信小程序+vue).zip

    通过组件化的方式,实现页面的动态渲染和数据绑定。 功能介绍: 1. 用户注册与登录:用户可以通过微信授权登录,也可以自行注册账号。 2. 马拉松赛事浏览:用户可以查看各个马拉松赛事的详细信息,如比赛时间、地点...

    基于SSM的王道考研购物网站.zip

    此外,还支持全文检索功能,帮助用户更精确地查找商品。购物车与结算:用户可以将心仪的商品加入购物车,实时查看购物车内的商品数量和总价。在确认无误后,用户可以选择支付方式完成结算。订单管理:用户可以查看...

    基于SSM+vue人事管理信息系统+jsp(源码+部署说明+演示视频+源码介绍).zip

    前端使用Vue.js框架,实现了响应式布局和动态数据绑定,提高了用户界面的交互性和易用性。 后端采用SSM框架,实现了业务逻辑和数据访问的分离,提高了代码的可读性和可维护性。 数据库使用MySQL,提供了可靠的数据...

    Java毕业设计-基于ssm框架开发的医院住院管理系统+vue-毕业论文(附源代码).rar

    前端部分采用了Vue.js框架,Vue以其轻量级、响应式的数据绑定和组件化的开发方式,为前端开发者带来了高效的开发体验。通过Vue,系统实现了友好的用户界面和流畅的用户交互,为用户提供了良好的使用体验。 该毕业...

Global site tag (gtag.js) - Google Analytics