- 浏览: 1748138 次
- 性别:
- 来自: 大连
博客专栏
-
Spring数据库访问系列...
浏览量:172832
-
Android学习笔记
浏览量:366569
-
iBatis开发详解
浏览量:188315
-
Objective-C学习...
浏览量:98761
最新评论
-
iLidy:
引用[/c
Hibernate持久化对象的生命周期详解 -
fengzigogo:
您好,有这个项目架构的源码下载地址吗?
一种Java Web应用开发框架的构建(基于Struts2+Spring+FreeMarker)之一 -
spring_springmvc:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
用Maven构建Java Web开发环境(Jetty容器)之二 -
springdata_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Spring 3之MVC & Security简单整合开发(二) -
赵庆辉:
看帖回复是美德,楼主讲的很清晰明了,看了豁然开朗.
Java String对象的经典问题(new String())
Spring的MVC模块是一种简洁的Web应用框架,实现了MVC模式来处理HTTP请求和响应。相比于Struts系列,SpringMVC的MVC更加明显,将控制器和视图的定义完全分离,它们不需要在一个命名空间下了。它有Spring的全部优点,bean的配置更加舒服。而Spring 3的注解配置使得代码编写更加优雅。本例结合Spring MVC和Security框架进行小小整合,仅做功能说明,不详细探究其原理。
首先是建立项目,做一个简单的消息发布功能,代码结构如下,使用Maven可以很好的管理依赖:
采用了分层结构,但是没有使用到数据库操作,仅仅做个简短的说明,数据库操作用在后面Security框架验证用户时。下面来看看依赖关系,这样能对Spring的层次结构了解更加清晰:
先来看最基本的web部署描述文件web.xml,将用到的配置写好,Spring 3使用DispatcherServlet派发请求,而Security框架串接过滤器的机制来进行安全处理。配置很简单,如下即可,web请求使用.htm形式:
下面是Servlet的配置文件,因为我们使用了注解,这里仅需对视图文件进行一下说明即可,而又配合后面的Security框架,在这里对Security框架的方法拦截注解也声明了一下,这里说明一点,要拦截Controller的方法,必须将Security的声明和Servlet放在一个文件内,否则拦截是没有作用的:
其中对org.ourpioneer.board.web包进行组件扫描,就会发现我们注解声明的控制器了,下面是对视图解析的说明,我们把视图文件写在/WEB-INF/jsp/下,后缀名为.jsp的文件就是视图文件,为什么把前缀和后缀都声明好了?因为程序里面我们直接写文件名就可以了,非常灵活,它不关心是不是和请求路径是相同的。下面是对Controller方法拦截的Security框架的配置。
配置好Servlet相关内容,剩下就是Service内容了,这个很简单了,声明一个bean就是了,为了配合Security框架连接数据库验证用户身份,这里也配置一个数据源,使用Spring自己的数据源实现:
配置好后,我们来看看程序代码,首先看看定义的领域对象Message,很简单的bean:
下面是Service,我们使用了实现和接口相分离的原则,方面后续在WebService中公开等,可能用不到,但这是一个良好的设计原则。接口内定义四个方法声明:
下面是Service的实现类,就用List放置Message即可,这里我们对Service的方法也进行了安全拦截,这是更细粒度的拦截,后面会详细介绍,现在可以不管:
下面就该进入控制器部分了,我们一个一个来看:
对该类进行控制器注解声明,说明是Spring MVC中的控制器,下面是请求映射声明,处理/messageList.htm的请求,Service的注入采用自动装配,连set方法都不用了,下面是对处理方法,可以看出,这是一个简单的POJO,连方法名都是我们自定义的,只需声明HTTP请求方法,就能找到方法了,而Model是传递数据给页面的对象,把获取到的message列表放进去就行了,来看返回值,一个字符串,什么意思?就是JSP页面的名字,是不是很简单,MVC表现的淋漓尽致,这就会找到页面了。
下面是发布消息的类:
GET方式是请求到这个页面,而POST方式是发布消息,最后是重定向,再到messageList.htm,就是这么简单的配置。要注意的是方法实现,先看页面请求方法setupForm(Model model),参数上面已经解释了,是传递给页面的数据对象,里面放置了一个Message对象,做什么用的?肯定页面使用了,不过这是一个空对象,那么自然想到要和表单属性进行绑定,等会看看页面就一清二楚了。下面是onSubmit方法,里面的参数都是我自己定义的,只要记住BindingResult要和数据对象参数Message写在一起,后面的参数写想用的就行,那么我想用HttpServletRequest对象,就写上去。真的很灵活。方法实现很简单,就不多说了。
最后是删除功能了,更简单了:
只是权限设置为有管理员权限的才能删除,这里先不用。来看方法参数,我们必须要一个请求参数,是messageId,删除消息的标识符。下面就是操作了,很简单。
最后来看一下页面:
列表页面有Security框架标签的使用,仅做MVC时可以先注释起来。这里使用了JSTL标签来遍历message列表,都很简单。
下面是发布消息的页面:
前面说的数据绑定,这里就很容易看明白了吧。没有什么可以多解释的。
准备都做好后就是运行了,我们启动Jetty,来看看效果。关于Jetty的配置请参考作者之前对Maven和Jetty整合的文章,描述很详细。
因为我结合了Security框架,所以看到了我登录的身份列表,下面就是发布消息了,这就很简单了:
下一篇将结合Security框架进行简单安全的说明,是基于本例的。欢迎交流,希望对使用者有用。
M2E插件可以直接绘图。使用注解了只能在程序中判断了吧
欢迎交流,共同进步。
request.getSession().getServletContext()
权限名称是加入了security的标签库来显示的,请确保标签库文件在类路径下。
发现问题了
原来是web.xml里没有加入springSecurityFilterChain
权限名称是加入了security的标签库来显示的,请确保标签库文件在类路径下。
文章中的代码都是完整的,可以直接使用,源码要等这个系列全部写完后附上。
ACL这次没有涉及到,最终源码会随后续文章发布。
首先是建立项目,做一个简单的消息发布功能,代码结构如下,使用Maven可以很好的管理依赖:
采用了分层结构,但是没有使用到数据库操作,仅仅做个简短的说明,数据库操作用在后面Security框架验证用户时。下面来看看依赖关系,这样能对Spring的层次结构了解更加清晰:
先来看最基本的web部署描述文件web.xml,将用到的配置写好,Spring 3使用DispatcherServlet派发请求,而Security框架串接过滤器的机制来进行安全处理。配置很简单,如下即可,web请求使用.htm形式:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <context-param> <param-value> /WEB-INF/board-service.xml /WEB-INF/board-security.xml </param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>board</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>board</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> </web-app>
下面是Servlet的配置文件,因为我们使用了注解,这里仅需对视图文件进行一下说明即可,而又配合后面的Security框架,在这里对Security框架的方法拦截注解也声明了一下,这里说明一点,要拦截Controller的方法,必须将Security的声明和Servlet放在一个文件内,否则拦截是没有作用的:
<?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:security="http://www.springframework.org/schema/security" 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 http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"> <context:component-scan base-package="org.ourpioneer.board.web" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <security:global-method-security jsr250-annotations="enabled" secured-annotations="enabled" /> </beans>
其中对org.ourpioneer.board.web包进行组件扫描,就会发现我们注解声明的控制器了,下面是对视图解析的说明,我们把视图文件写在/WEB-INF/jsp/下,后缀名为.jsp的文件就是视图文件,为什么把前缀和后缀都声明好了?因为程序里面我们直接写文件名就可以了,非常灵活,它不关心是不是和请求路径是相同的。下面是对Controller方法拦截的Security框架的配置。
配置好Servlet相关内容,剩下就是Service内容了,这个很简单了,声明一个bean就是了,为了配合Security框架连接数据库验证用户身份,这里也配置一个数据源,使用Spring自己的数据源实现:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/board" /> <property name="username" value="root" /> <property name="password" value="123" /> </bean> <bean id="messageBoardService" class="org.ourpioneer.board.service.MessageBoardServiceImpl" />
配置好后,我们来看看程序代码,首先看看定义的领域对象Message,很简单的bean:
package org.ourpioneer.board.domain; public class Message { private Long id; private String author; private String title; private String body; //省略了getter和setter方法 }
下面是Service,我们使用了实现和接口相分离的原则,方面后续在WebService中公开等,可能用不到,但这是一个良好的设计原则。接口内定义四个方法声明:
package org.ourpioneer.board.service; import java.util.List; import org.ourpioneer.board.domain.Message; public interface MessageBoardService { public List<Message> listMessages(); public void postMessage(Message message); public void deleteMeesage(Message message); public Message findMessageById(Long messageId); }
下面是Service的实现类,就用List放置Message即可,这里我们对Service的方法也进行了安全拦截,这是更细粒度的拦截,后面会详细介绍,现在可以不管:
package org.ourpioneer.board.service; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.ourpioneer.board.domain.Message; import org.springframework.security.access.annotation.Secured; public class MessageBoardServiceImpl implements MessageBoardService { private Map<Long, Message> messages = new LinkedHashMap<Long, Message>(); //@Secured( { "ROLE_ADMIN", "IP_LOCAL_HOST" }) public synchronized void deleteMeesage(Message message) { messages.remove(message.getId()); } //@Secured( { "ROLE_USER", "ROLE_GUEST" }) public Message findMessageById(Long messageId) { return messages.get(messageId); } //@Secured( { "ROLE_USER", "ROLE_GUEST" }) public List<Message> listMessages() { return new ArrayList<Message>(messages.values()); } //@Secured( { "ROLE_USER" }) public synchronized void postMessage(Message message) { message.setId(System.currentTimeMillis()); messages.put(message.getId(), message); } }
下面就该进入控制器部分了,我们一个一个来看:
package org.ourpioneer.board.web; import java.util.List; import org.ourpioneer.board.domain.Message; import org.ourpioneer.board.service.MessageBoardService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.annotation.Secured; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/messageList.htm") public class MessageListController { @Autowired private MessageBoardService messageBoardService; @RequestMapping(method = RequestMethod.GET) //@Secured( { "ROLE_USER" }) public String generateList(Model model) { List<Message> messages = java.util.Collections.emptyList(); messages = messageBoardService.listMessages(); model.addAttribute("messages", messages); return "messageList"; } }
对该类进行控制器注解声明,说明是Spring MVC中的控制器,下面是请求映射声明,处理/messageList.htm的请求,Service的注入采用自动装配,连set方法都不用了,下面是对处理方法,可以看出,这是一个简单的POJO,连方法名都是我们自定义的,只需声明HTTP请求方法,就能找到方法了,而Model是传递数据给页面的对象,把获取到的message列表放进去就行了,来看返回值,一个字符串,什么意思?就是JSP页面的名字,是不是很简单,MVC表现的淋漓尽致,这就会找到页面了。
下面是发布消息的类:
package org.ourpioneer.board.web; import javax.servlet.http.HttpServletRequest; import org.ourpioneer.board.domain.Message; import org.ourpioneer.board.service.MessageBoardService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.annotation.Secured; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/messagePost.htm") public class MessagePostController { @Autowired private MessageBoardService messageBoardService; @RequestMapping(method = RequestMethod.GET) //@Secured( { "ROLE_USER" }) public String setupForm(Model model) { Message message = new Message(); model.addAttribute("message", message); return "messagePost"; } @RequestMapping(method = RequestMethod.POST) //@Secured( { "ROLE_USER" }) public String onSubmit(@ModelAttribute("message") Message message, BindingResult result, HttpServletRequest request) { message.setAuthor(request.getRemoteUser()); if (result.hasErrors()) { return "messagePost"; } else { messageBoardService.postMessage(message); return "redirect:messageList.htm"; } } }
GET方式是请求到这个页面,而POST方式是发布消息,最后是重定向,再到messageList.htm,就是这么简单的配置。要注意的是方法实现,先看页面请求方法setupForm(Model model),参数上面已经解释了,是传递给页面的数据对象,里面放置了一个Message对象,做什么用的?肯定页面使用了,不过这是一个空对象,那么自然想到要和表单属性进行绑定,等会看看页面就一清二楚了。下面是onSubmit方法,里面的参数都是我自己定义的,只要记住BindingResult要和数据对象参数Message写在一起,后面的参数写想用的就行,那么我想用HttpServletRequest对象,就写上去。真的很灵活。方法实现很简单,就不多说了。
最后是删除功能了,更简单了:
package org.ourpioneer.board.web; import org.ourpioneer.board.domain.Message; import org.ourpioneer.board.service.MessageBoardService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.annotation.Secured; import org.springframework.stereotype.Controller; 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; @Controller @RequestMapping("/messageDelete.htm") public class MessageDeleteController { @Autowired private MessageBoardService messageBoardService; @RequestMapping(method = RequestMethod.GET) //@Secured( { "ROLE_ADMIN" }) public String messageDelete( @RequestParam(required = true, value = "messageId") Long messageId, Model model) { Message message = messageBoardService.findMessageById(messageId); messageBoardService.deleteMeesage(message); model.addAttribute("messages", messageBoardService.listMessages()); return "redirect:messageList.htm"; } }
只是权限设置为有管理员权限的才能删除,这里先不用。来看方法参数,我们必须要一个请求参数,是messageId,删除消息的标识符。下面就是操作了,很简单。
最后来看一下页面:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@taglib prefix="security" uri="http://www.springframework.org/security/tags"%> <html> <head> <title>Message List</title> </head> <body> <h2>Welcome! <security:authentication property="name" /></h2> <security:authentication property="authorities" var="authorities" /> <ul> <c:forEach items="${authorities}" var="authority"> <li>${authority.authority}</li> </c:forEach> </ul> <hr /> <c:forEach items="${messages}" var="message"> <table> <security:authorize ifAllGranted="ROLE_ADMIN,ROLE_USER"> <tr> <td>Author</td> <td>${message.author}</td> </tr> </security:authorize> <tr> <td>Title</td> <td>${message.title}</td> </tr> <tr> <td>Body</td> <td>${message.body}</td> </tr> <tr> <td colspan="2"><a href="messageDelete.htm?messageId=${message.id}">Delete</a></td> </tr> </table> <hr /> </c:forEach> <a href="messagePost.htm">Post</a> <a href="<c:url value="/j_spring_security_logout" />">Logout</a> </body> </html>
列表页面有Security框架标签的使用,仅做MVC时可以先注释起来。这里使用了JSTL标签来遍历message列表,都很简单。
下面是发布消息的页面:
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <html> <head> <title>Message Post</title> </head> <body> <form:form method="POST" modelAttribute="message"> <table> <tr> <td>Title</td> <td><form:input path="title" /></td> </tr> <tr> <td>Body</td> <td><form:textarea path="body" /></td> </tr> <tr> <td colspan="2"><input type="submit" value="Post" /></td> </tr> </table> </form:form> </body> </html>
前面说的数据绑定,这里就很容易看明白了吧。没有什么可以多解释的。
准备都做好后就是运行了,我们启动Jetty,来看看效果。关于Jetty的配置请参考作者之前对Maven和Jetty整合的文章,描述很详细。
因为我结合了Security框架,所以看到了我登录的身份列表,下面就是发布消息了,这就很简单了:
下一篇将结合Security框架进行简单安全的说明,是基于本例的。欢迎交流,希望对使用者有用。
评论
23 楼
herofighter2008
2014-07-01
你好,在么?pom.xml文件有问题啊,能发一份正确的么?qq381885230,求加,谢谢
22 楼
herofighter2008
2014-06-27
你好,在吗?可以把这个demo的源码给我发下吗?我qq381885230,求加
21 楼
leiguorui
2013-09-30
20 楼
xusheng87
2013-08-28
楼主,你那个pom文件应该也贴上去。
19 楼
wangkai0681080
2012-12-23
学习了,收益匪浅 ~同在大连~
18 楼
sarin
2011-07-21
soltex 写道
你好,请问一下依赖的图是用什么工具画的话 ?
还有个问题 :
如果使用 @PathVariable来进行注释,如果对于多个参数的话,其中有几个参数为Empty,请问怎么进行处理呢 ?
谢谢。。
还有个问题 :
如果使用 @PathVariable来进行注释,如果对于多个参数的话,其中有几个参数为Empty,请问怎么进行处理呢 ?
谢谢。。
M2E插件可以直接绘图。使用注解了只能在程序中判断了吧
17 楼
soltex
2011-07-20
你好,请问一下依赖的图是用什么工具画的话 ?
还有个问题 :
如果使用 @PathVariable来进行注释,如果对于多个参数的话,其中有几个参数为Empty,请问怎么进行处理呢 ?
谢谢。。
还有个问题 :
如果使用 @PathVariable来进行注释,如果对于多个参数的话,其中有几个参数为Empty,请问怎么进行处理呢 ?
谢谢。。
16 楼
sarin
2011-02-25
Dynamicsheart 写道
写的很清晰,易懂。因项目需要,小弟最近再看Spring Security,可能是时间比较仓促吧,感觉这个Security 这个安全框架的知识点比较多,而且网上相关的资源比较少,有些介绍性的帖子也只是停留在概念性的层面,对其内部原理探究的文章非常少,可以话希望能跟楼主更多的交流!
欢迎交流,共同进步。
15 楼
Dynamicsheart
2011-02-24
写的很清晰,易懂。因项目需要,小弟最近再看Spring Security,可能是时间比较仓促吧,感觉这个Security 这个安全框架的知识点比较多,而且网上相关的资源比较少,有些介绍性的帖子也只是停留在概念性的层面,对其内部原理探究的文章非常少,可以话希望能跟楼主更多的交流!
14 楼
sarin
2010-12-30
bolo 写道
我想问个问题springmvc里面,如何方便的得到ServletContext呢?struts2有个ServletActionContext.getServletContext(),通过这个方法我可以得到ServletContext,再调用getRealPath就可以得到应用所在的绝对路径,但是springmvc中如何实现呢?
request.getSession().getServletContext()
13 楼
bolo
2010-12-30
我想问个问题springmvc里面,如何方便的得到ServletContext呢?struts2有个ServletActionContext.getServletContext(),通过这个方法我可以得到ServletContext,再调用getRealPath就可以得到应用所在的绝对路径,但是springmvc中如何实现呢?
12 楼
liukai
2010-12-20
sarin 写道
liukai 写道
楼主你好
我照着你的代码写了个DEMO
可是为什么我运行后没有显示我的权限名称
只显示了welcome
我反复检查了N次 依然找不出原因.
请问这个问题是如何造成的?
我照着你的代码写了个DEMO
可是为什么我运行后没有显示我的权限名称
只显示了welcome
我反复检查了N次 依然找不出原因.
请问这个问题是如何造成的?
权限名称是加入了security的标签库来显示的,请确保标签库文件在类路径下。
发现问题了
原来是web.xml里没有加入springSecurityFilterChain
11 楼
sarin
2010-12-17
liukai 写道
楼主你好
我照着你的代码写了个DEMO
可是为什么我运行后没有显示我的权限名称
只显示了welcome
我反复检查了N次 依然找不出原因.
请问这个问题是如何造成的?
我照着你的代码写了个DEMO
可是为什么我运行后没有显示我的权限名称
只显示了welcome
我反复检查了N次 依然找不出原因.
请问这个问题是如何造成的?
权限名称是加入了security的标签库来显示的,请确保标签库文件在类路径下。
10 楼
liukai
2010-12-17
楼主你好
我照着你的代码写了个DEMO
可是为什么我运行后没有显示我的权限名称
只显示了welcome
我反复检查了N次 依然找不出原因.
请问这个问题是如何造成的?
我照着你的代码写了个DEMO
可是为什么我运行后没有显示我的权限名称
只显示了welcome
我反复检查了N次 依然找不出原因.
请问这个问题是如何造成的?
9 楼
tomcat4
2010-12-13
其实Spring3的RequestHanlding的注解(我也很喜欢),又重新回到了原始JSP FORM中的action=XXX,说明基于配置的MVC有利有弊,而且很多时候是配置繁琐的弊>配置带来的“所谓的可维护性”的利!
8 楼
yaofeng911
2010-12-10
感谢! 如果再加上REST就完美了。。。。
7 楼
kingjiang09
2010-12-02
6 楼
sarin
2010-12-01
liliugen 写道
给demo才是王道,容易让初学者上手
文章中的代码都是完整的,可以直接使用,源码要等这个系列全部写完后附上。
5 楼
liliugen
2010-12-01
给demo才是王道,容易让初学者上手
4 楼
sarin
2010-12-01
guofengcn 写道
发布下源代码吧!
ACL这次没有涉及到,最终源码会随后续文章发布。
发表评论
-
iBatis操作DDL和映射继承
2012-09-09 21:46 9192本文系iBatis开发详解系列文章之iBatis操作D ... -
iBatis查询复杂集合
2012-09-04 20:23 15631本文系iBatis开发详解系列文章之在iBatis查询 ... -
iBatis中使用XML
2012-08-29 19:57 7629本文系iBatis开发详解系列文章之在iBatis中使 ... -
iBatis执行非查询语句(CRUD,函数和过程)
2012-08-26 21:40 9256CRUD操作中除了查询操作,其他都统一称为更新操作,因 ... -
Spring数据库访问之iBatis(二)
2012-06-10 13:56 5699接上文,我们继续来研究Spring和iBatis的整合 ... -
Spring数据库访问之iBatis(一)
2012-01-02 18:45 15863为了丰富博客专栏【Spring数据库访问系列】的内容, ... -
我的视频教程《中小企业OA系统》
2011-07-29 22:27 7687经过5个月的制作,和华章合作的《中小企业OA系统》Ja ... -
iBatis分页(基于Struts2和Freemarker)
2011-05-02 10:05 13032之前介绍过基于Hibernate分页的原理和设计,这里 ... -
Spring数据库访问之ORM(三)
2011-03-02 20:35 17549本文接上一篇继续研究。 之前我们使用的是Hib ... -
Spring数据库访问之ORM(二)
2011-02-16 13:19 23309本文接上一篇继续来研究Spring的ORM模块。 ... -
Spring数据库访问之ORM(一)
2011-01-27 10:54 30715Spring数据库访问中另外一大模块就是ORM,ORM ... -
Spring数据库访问之异常处理
2011-01-19 10:29 27430使用JDBC API时,很 ... -
Spring数据库访问(HSQL)(四)
2011-01-16 21:49 14451本文接上一篇继续研究Spring的JDBC模板。 ... -
Spring数据库访问(HSQL)(三)
2011-01-13 10:07 13380本文接上一篇继续研究JDBC模板。 之前说的都 ... -
Spring数据库访问(HSQL)(二)
2011-01-11 11:27 10695上一篇我们介绍了 ... -
Spring数据库访问(HSQL)(一)
2011-01-09 23:34 13741本部分主要介绍Spring的JDBC模板,JDBC模板 ... -
Spring 3之MVC & Security简单整合开发(三)
2010-12-03 19:04 21983本文接上一篇继续深入研究Security框架。 ... -
Spring 3之MVC & Security简单整合开发(二)
2010-12-01 20:29 59958本文接上一篇继续 ... -
iBatis查询select详解
2010-08-07 12:19 40461<select>是iBatis已经映射的语 ... -
iBatis查询API
2010-07-31 13:04 17626先说点基础的内容 ...
相关推荐
用STS(Spring Tool Suite)开发的,spring mvc + spring security 实现的最简单的登录系统,无数据库。
此项目为springmvc、Mybatis、EHcache、maven、Spring security3、activiti5工作流的整合 是一个基于数据库的权限管理demo项目、使用mysql数据库 项目运行前需要构建maven私服 而且有些jar包私服中肯定没有,需要...
jinshuaitec信息存储项目.Spring Boot 整合Spring MVC,Spring,Mybatis,使用Spring Security做登录验证,希望可以整合微信公众号一起开发
直接从网上荡下DWZ的dwz4j企业级Java Web快速开发框架(Mybatis + SpringMVC) + jUI整合应用使用的话,里面的一些内容比较冗余,另外里面缺少权限和security,以及对postgre的数据库使用demo,而最近项目中需要开发...
Spring Boot简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的、产品级别的Spring应用。 Spring Boot为Spring平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用只...
spring mvc + spring security 整合开发 sarin.iteye.com的源代码
SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您从零基础开始,逐步掌握SSM的核心技术和最佳实践,助您在Java Web开发领域更上一...
第一个 Struts 程式 在 Struts 中整合 Spring 第一个 JSF 程式 在 JSF 中整合 Spring <br> 其它 Spring 提供了简化且一致的方式,让您在使用一些 API 或服务时更加简单。 远程...
8.1 用Spring MVC开发简单的Web应用 280 8.1.1 问题 280 8.1.2 解决方案 281 8.1.3 工作原理 283 8.2 用@RequestMapping映射请求 293 8.2.1 问题 293 8.2.2 解决方案 294 8.2.3 工作原理 294 8.3 ...
最新的 Spring Web Flow 2.0 则明确声明是基于 Spring Web MVC 的一个扩展。 • 提供了处理 Ajax 事件的能力 Ajax 事件的处理与 Web Flow 事件的处理相一致,在处理完成后, flow 即可刷新客户端相关 界面代码。 • ...
8.1 用Spring MVC开发简单的Web应用 280 8.1.1 问题 280 8.1.2 解决方案 281 8.1.3 工作原理 283 8.2 用@RequestMapping映射请求 293 8.2.1 问题 293 8.2.2 解决方案 294 8.2.3 工作原理 294 8.3 ...
该项目涵盖了从前端页面设计到后端服务开发的全过程,整合了众多流行技术与工具,如Thymeleaf、Spring Data JPA、Spring Security和MySQL等。项目特点包括:用户友好的界面:采用响应式设计,确保在不同设备上都能...
3.熟悉Spring MVC、Spring Boot、Spring Data、Spring Security的使用,了解Spring的Ioc与Aop思想; 4.拥有基于Spring整合常用框架并进行项目开发的经验,如:Mybatis、Hibernate、Redis、SpringData 5.熟悉基于...
AlbedoBoot是在Spring Boot基础上构建的一个Java基础开发平台上,以Spring MVC为模型视图控制器,MyBatis为数据访问层,SpringSecurity为权限授权层,Ehcahe对常用数据进行缓存,是JavaEE界的最佳整合。 AlbedoBoot...
jun_spring 项目项目说明基于Spring家族的360度整合,基本覆盖开发用九成以上的场景,即开即用,主要是详尽的了解项目里面的每个stater跟lib组件及功能,为个人及项目实际开发提供助力,帮组项目快速开发,本项目是...
开拓与转载整理不易,逐步随意。尊重他人的劳动成果,转载请注明地址。Spring-Boot-Redis-Session Spring Boot整合Redis,详情请查看... 网页Web使用Tomcat和Spring MVC进行全栈Web开发模板Thymeleaf Thymeleaf模板引擎
1.建立一个Spring开发环境 依赖注入:请参阅Kong店编码阶段的视频 Oracle DB集成 MyBatis整合 2. Spring MVC配置 3.基本的网站帖子管理 4.使用REST方法和Ajax进行注释处理 5. AOP和交易 6.文件上传处理 7.使用...
【后端技术】技术 说明Spring Boot2 MVC框架 开发的一站式解决方案Spring Security5 认证和授权框架MyBatisPlus3.3.1 基于 MyBatis 框架的快速研发框架MyBatisCode工具 生成 MyBatis 相关代码Jackson 提供了处理 ...
代码中运用了多种Spring Boot的核心组件,如Spring Security进行权限控制,Spring MVC构建RESTful API,以及MyBatis或JPA进行数据持久化操作,确保了系统的健壮性与可维护性。 除了基本的购物流程外,该项目还融入...
企业级WEB系统框架开发平台 ...Spring2.56、Security2.04权限管理、Struts2、Ibatis2、Flex4.6等这几款主流框架进行整合,并对其进行简单的介绍。 并包括框架的核心数据库。 需要和学习的朋友可以联系我