`

bboss mvc快速入门教程

阅读更多
基于bboss开发项目说明
要做简单的demo,请参考文档
http://yin-bp.iteye.com/blog/1026261

正儿八经的做项目,参考文档搭bboss平台开发环境

普通ui版平台:
http://yin-bp.iteye.com/blog/2390050

bootstrap版平台:

http://yin-bp.iteye.com/blog/2356672

自动代码生成工具使用,参考文档:
http://yin-bp.iteye.com/blog/2256948


bboss mvc快速入门教程
本文介绍内容:快速搭建使用bboss mvc框架的eclipse工程,然后编写并运行一个简单实例

1.首先准备好eclipse,并安装好gradle sts插件

2.从github下载demo gradle工程:
https://github.com/bbossgroups/bestpractice
或者通过svn下载,svn地址为:
https://github.com/bbossgroups/bestpractice/trunk

下载后可以通过gradle插件将工程导入eclipse

3.demo 开发环境搭建,生成eclise工程

假设下载的目录为:
d:/workspace/bestpractice

进入命令行模式
cd d:/workspace/bestpractice

将bestpractice通过gradle插件导入eclipse,其中的demoproject就是我们本文需要介绍的工程

这样你就搭建好一个完整的demoproject开发环境了,接下来我们需要开发我们的第一个mvc框架示例,我们可以通过eclipse jetty插件来运行和调试这个示例,调试之前首先要在eclipse中按照好jetty插件。
4.开发自己的第一个mvc例子

开发mvc例子的步骤:

1).新建控制器类web.BbossTest
d:/workspace/demoproject/src/web/BbossTest.java
BbossTest编写控制器方法testBboss:
package web;

import org.frameworkset.web.servlet.ModelAndView;

public class BbossTest {
	
	public String testBboss(ModelMap model){
                Map data = new HashMap();
                data.put("id","aaaaa");
                data.put("name","dudu0");
                model.addAttribute("data", data);
		return "path:view";
	}
}


为了简单起见,我们在控制器方法中只是做了个简单的页面跳转:path:view,这是一个地址别名,具体的配置见下一步。

2).控制器类写好后就可以写相应的配置文件,新建xml文件bboss-test.xml存放在以下目录:
d:/workspace/demoproject/WebRoot/WEB-INF/conf/bboss-test.xml,内容为

<?xml version="1.0" encoding='utf-8'?>
<!-- 
bboss-test.xml
描述:demo配置文件
-->
<properties>
    <property name = "/test/*.page" class="web.BbossTest"  path:view="/index1.jsp"/>
</properties>


这里需要说明的就是name = "/test/*.page",部分指定了控制器对应的url映射规则,*号对应控制器web.BbossTest中的方法名,class="web.BbossTest" 指定了控制器类,singlable="true" 部分标识了该控制器为单例模式,path:view="/index1.jsp"指定了别名path:view对应的实际jsp页面,控制器方法跳转时需要用到

配置文件写好后需要配置到web.xml的mvc dispatcher中的contextConfigLocation中,这样bboss mvc框架才会加载这个控制器:
<servlet>
		<servlet-name>mvcdispather</servlet-name>
		<servlet-class>org.frameworkset.web.servlet.DispatchServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<!--如果有多个目录需要加载,请用,号分隔-->
			<param-value/WEB-INF/conf/bboss-*.xml</param-value>
		</init-param>
		<load-on-startup>0</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>mvcdispather</servlet-name>
		<url-pattern>*.page</url-pattern>
	</servlet-mapping>
	


3).编写jsp页面index1.jsp,存放的地址为:
d:/workspace/demoproject/WebRoot/index1.jsp
内容为:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@ taglib uri="/WEB-INF/pager-taglib.tld" prefix="pg"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">

  </head>
  
  <body>
  ID:${data.id}<br/>
  ID:${data.name}
  </body>
</html>


4).这样你的例子就做好了,编译一下工程:
gradle :demoproject:war

这样就可以在将war包部署到tomcat即可:
d:/workspace/demoproject/build/libs/demoproject-4.10.8.war

5).启动tomcat,在浏览器重输入以下地址:
http://localhost:8080/demoproject/test/testBboss.page
即可看到你的例子的效果哦。

同时你也可以访问demo中内置的实例:
http://localhost:8080/demoproject/examples/index.page
http://localhost:8080/demoproject/file/fileupload.page

6).如果我们需要对demo进行调试,可以参考文档:

http://yin-bp.iteye.com/blog/2327708

到此,搭建bboss mvc demo开发工程过程和开发例子过程就介绍完了。
分享到:
评论
19 楼 yin_bp 2014-11-16  
idlqy 写道
很好!很强大!你那个官网备案备了好几年了,还没备好?

快了。。。
18 楼 idlqy 2014-11-14  
很好!很强大!你那个官网备案备了好几年了,还没备好?
17 楼 yin_bp 2014-09-26  
xueyingbing 写道
看了一下,感觉很好很强大,而且楼主是个牛人。我提个小建议,做个官网,把文档什么的都放上去,然后号召大家一起开发,这样项目的影响力会更大一些。

bboss官网域名为www.bbossgroups.com,目前正在做域名备案,备案后会开通,敬请关注。

多谢你的很好的建议,希望有更多的人加入bboss的开发团队。文档目前都是在iteye上发布,由于时间原因,暂时没有在bboss官网提供文档发布功能的计划。
16 楼 xueyingbing 2014-09-24  
看了一下,感觉很好很强大,而且楼主是个牛人。我提个小建议,做个官网,把文档什么的都放上去,然后号召大家一起开发,这样项目的影响力会更大一些。
15 楼 yin_bp 2012-11-27  
zhuojb 写道
我操作到第四步,启动tomcat的时候报错,请问这是什么问题?
报错内容如下:
[2012-11-27 11:15:47][ERROR][org.frameworkset.spi.assemble.ServiceProviderManager] 从文件[E:\tomcat7.0\bin/manager-provider.xml]装载管理服务失败,请检查文件是否存在,或者是否被正确定义。
2012-11-27 11:15:56 org.apache.cxf.transport.servlet.AbstractCXFServlet replaceDestinationFactory
信息: Replaced the http destination factory with servlet transport factory
[2012-11-27 11:15:56][ERROR][org.frameworkset.spi.assemble.ServiceProviderManager] 从文件[E:\tomcat7.0\bin/org/frameworkset/spi/ws/webserivce-modules.xml]装载管理服务失败,请检查文件是否存在,或者是否被正确定义。
[2012-11-27 11:15:56][ERROR][org.frameworkset.spi.remote.webservice.WSLoader] org.frameworkset.spi.assemble.AssembleException: 配置文件[org/frameworkset/spi/ws/webserivce-modules.xml]中没有指定属性[cxf.webservices.modules]!
[2012-11-27 11:15:56][WARN][org.frameworkset.spi.remote.webservice.WSLoader] org.frameworkset.spi.SPIException: 容器[org/frameworkset/spi/ws/webserivce-modules.xml]没有定义名称为[webapplicationcontext]的bean对象。

这个问题是bboss在搜索和加载默认配置的webservices服务,如果没有找到就会给出这个提示信息,可以不用关注。
14 楼 zhuojb 2012-11-27  
我操作到第四步,启动tomcat的时候报错,请问这是什么问题?
报错内容如下:
[2012-11-27 11:15:47][ERROR][org.frameworkset.spi.assemble.ServiceProviderManager] 从文件[E:\tomcat7.0\bin/manager-provider.xml]装载管理服务失败,请检查文件是否存在,或者是否被正确定义。
2012-11-27 11:15:56 org.apache.cxf.transport.servlet.AbstractCXFServlet replaceDestinationFactory
信息: Replaced the http destination factory with servlet transport factory
[2012-11-27 11:15:56][ERROR][org.frameworkset.spi.assemble.ServiceProviderManager] 从文件[E:\tomcat7.0\bin/org/frameworkset/spi/ws/webserivce-modules.xml]装载管理服务失败,请检查文件是否存在,或者是否被正确定义。
[2012-11-27 11:15:56][ERROR][org.frameworkset.spi.remote.webservice.WSLoader] org.frameworkset.spi.assemble.AssembleException: 配置文件[org/frameworkset/spi/ws/webserivce-modules.xml]中没有指定属性[cxf.webservices.modules]!
[2012-11-27 11:15:56][WARN][org.frameworkset.spi.remote.webservice.WSLoader] org.frameworkset.spi.SPIException: 容器[org/frameworkset/spi/ws/webserivce-modules.xml]没有定义名称为[webapplicationcontext]的bean对象。
13 楼 yin_bp 2012-11-26  
zhuojb 写道
怎么是java项目,不是web项目啊,连部署都部署不了???

是个java项目,在tomcat中的部署方法请参考文中的第4节和第5节:
4.这样你的例子就做好了,编译一下工程,下面我们来在tomcat中部署我们的例子
5.启动tomcat,在浏览器重输入以下地址
12 楼 zhuojb 2012-11-26  
怎么是java项目,不是web项目啊,连部署都部署不了???
11 楼 yin_bp 2012-10-19  
fxz_2008 写道
依然需要这么多配置,依然要这么多层....

文档中涉及到开发人员的配置只有mvc的一个配置文件啊,其他有些配置都是tomcat的,另外,bboss也支持注解,只是我不怎么推荐使用注解,在配置文件里面都是可以被bboss的监控模块监控的。

mvc本身就是三层体系结构,这个应该还是业界主流的体系结构,bboss的分层体系可以从下图看出来:


采用bboss只需要编写业务组件和控制器,无需编写dao组件(dao组件采用的是bboss持久层通用dao),然后通过bboss ioc把各个部分有机组合起来,结构非常清晰。

如有异议,可进一步探讨。
10 楼 fxz_2008 2012-10-19  
依然需要这么多配置,依然要这么多层....
9 楼 上官车月 2012-05-18  
OK成功解压
8 楼 yin_bp 2012-05-18  
上官车月 写道
不支持压缩算法,楼主 你采用的是什么压缩的哦

demoproject.zip包已经重新上传了,现在应该没有问题了
7 楼 yin_bp 2012-05-17  
上官车月 写道
不支持压缩算法,楼主 你采用的是什么压缩的哦

就是用winrar工具压缩的啊,试了一下,这个zip下下来后确实解不开,估计是我压的包有问题,我晚上回去再重新放一下。

另外你可以直接到github中下载最新的bboss版本:
https://github.com/bbossgroups/bbossgroups-3.5/zipball/master
下载下来后,解压,在解压的目录/bestpractice目录下包含了最新的demoproject工程,也可以用这个demoproject工程来演示本文中的功能。
6 楼 上官车月 2012-05-17  
不支持压缩算法,楼主 你采用的是什么压缩的哦
5 楼 yin_bp 2011-05-12  
最新版本正在紧张的开发和验证中,估计过不了多久就可以和大家见面了,呵呵,bbossgroups 3.2中相对3.1做了一些很好的改进,修复了一些缺陷(这些缺陷不会影响大家的正常功能使用,呵呵)
4 楼 raykcn 2011-05-12  
感谢您的耐心解答非常详细!经测试成功,试卷100分!期待bbossmvc越来越给力!
3 楼 yin_bp 2011-05-12  
部署完毕后可以直接在浏览器中输入以下地址就可以看看实际效果了,呵呵:
http://localhost:8080/bboss-mvc/query/loginName.htm

目前的版本(最新版本3.1)对restful功能的支持比较单一,3.1版本需要根据类级别和方法级别地址组合才能实现restful风格的功能。
正在开发中的新版本对restful功能做了改进,使用方式更加灵活,可以支持控制器方法级别的restful全地址映射关系。

即将发布的版本中restful风格的方法可以如下编写:
@Controller
public class LoginNameQuery {
	@HandlerMapping(value="/query/loginnamequery/{loginname}")
	public void loginnamequery(@PathVariable(value="loginname",decodeCharset="UTF-8") String loginname,HttpServletResponse response)
	{
		try {
			response.setContentType("text/html; charset=GBK");
			if(loginname == null || loginname.trim().equals(""))			
				response.getWriter().print("查询中的用户名为空,请重新输入用户名");
			
			if(loginname.equals("多多"))
			{
				response.getWriter().print("用户名["+loginname+"]存在。");
			}
			else
				response.getWriter().print("用户名["+loginname+"]不存在。");
			
			
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
	
	@HandlerMapping(value="/query/loginName.htm")
	public String loginName()
	{
		return "path:loginName";
	}

}
2 楼 yin_bp 2011-05-12  
我把你的需求稍微修改了一下,做了以下的实现,请看:
控制器实现:
package web;

import java.io.IOException;
import java.net.URLDecoder;

import javax.servlet.http.HttpServletResponse;

import org.frameworkset.util.annotations.HandlerMapping;
import org.frameworkset.util.annotations.PathVariable;

@HandlerMapping("/query")
public class LoginNameQuery {
	@HandlerMapping(value="/{loginname}")
	public void loginnamequery(@PathVariable(value="loginname") String loginname,HttpServletResponse response)
	{
		try {
			response.setContentType("text/html; charset=GBK");
			if(loginname == null || loginname.trim().equals(""))			
				response.getWriter().print("查询中的用户名为空,请重新输入用户名");
			
			loginname = URLDecoder.decode(loginname,"UTF-8");
			if(loginname.equals("duoduo"))
			{
				response.getWriter().print("用户名["+loginname+"]存在。");
			}
			else
				response.getWriter().print("用户名["+loginname+"]不存在。");
			
			
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
	
	@HandlerMapping(value="/loginName.htm")
	public String loginName()
	{
		return "path:loginName";
	}

}




jsp实现:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/pager-taglib.tld" prefix="pg"%>
<html>
	<head>
		<title>姓名查询</title>
		<pg:config enablecontextmenu="false"/>
		<script type="text/javascript">
			function doquery(){
			 
				if($("#loginName3").val() == null || $("#loginName3").val() == "")
				{
					alert("请输入要查询的姓名!")
					return false;
				}
			 	var resturl = "<%=request.getContextPath() %>/query/" + encodeURIComponent(encodeURIComponent($("#loginName3").val()));
				$("#queryresult").load(resturl);
				return false;
			}
		</script>
	</head>

	<body>
		    <table> 
		        <tr> 
		            <td>查询登录名:<input type="text" name="loginName3" id="loginName3"/> 
		            </td> 
		            
		            <td><input type="button" value="查询" onclick="doquery()"/> 
		            </td> 
		        </tr> 
		        <tr> 
		            <td>查询结果:
		            </td> 
		            <td id="queryresult"></td> 
		        </tr> 
		    </table>
	</body>
</html>



配置文件:
<?xml version="1.0" encoding='gb2312'?>
<!-- 
bboss-loginnamequery.xml
描述:restful映射配置文件
-->
<properties>
    <property name="loginNamequery" 
    	class="web.LoginNameQuery" 
    	singlable="true" 
    	path:loginName="/loginName.jsp"/>
</properties>



然后在web.xml文件mvc拦截器中增加restful地址映射规则/query/*:
<servlet>
		<servlet-name>mvcdispather</servlet-name>
		<servlet-class>org.frameworkset.web.servlet.DispatchServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/bboss-*.xml,
						/WEB-INF/conf/bboss-*.xml</param-value>
		</init-param>
		<load-on-startup>0</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>mvcdispather</servlet-name>
		<url-pattern>*.page</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>mvcdispather</servlet-name>
		<url-pattern>/query/*</url-pattern>
	</servlet-mapping>
1 楼 raykcn 2011-05-11  
求教restful问题:
我的增删改做完了,差查询功能,可是查询有问题 情况是这样的:
Controller:
@RequestMapping(填空1)   
public ModelAndView searchByName(填空2){ 
... 
}
jsp:
<form action="${ctx}/sycrub/${loginName3} 填空3" method="get"> 
    <table> 
        <tr> 
            <td>查询登录名:<input type="text" name="loginName3 填空4" /> 
            </td> 
            <td><input type="submit" value="查询" /> 
            </td> 
        </tr> 
    </table> 
</form>
目的是想提交查询,把loginName3这个值传入到Contorller的searchByName ()方法,来查询这个用户名的用户!
请楼主帮忙填空!感谢!

相关推荐

Global site tag (gtag.js) - Google Analytics