- /**
- * 此次应用涉及的几个小知识点为:
- * 1.MongoDB的插入和更新操作
- * 2.Struts2的最基本使用
- * 3.单例设计模式的简单使用
- * 4.JQuery form验证表单插件的使用
- */
- /**
- * MongoDBWebTest
- * 注册
- */
- package com.labci.mongodb.web.action;
- import java.util.Iterator;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import net.sf.json.JSONArray;
- import org.apache.struts2.interceptor.ServletRequestAware;
- import com.labci.mongodb.web.util.GenderEnum;
- import com.labci.mongodb.web.util.JSONToMapUtil;
- import com.labci.mongodb.web.util.MongoDBUtil;
- import com.labci.mongodb.web.util.NumbericUtil;
- import com.mongodb.BasicDBObject;
- import com.mongodb.DBCollection;
- import com.mongodb.DBCursor;
- import com.mongodb.DBObject;
- import com.opensymphony.xwork2.ActionSupport;
- /**
- * @author Bill Tu(tujiyue/iwtxokhtd)
- * Jun 11, 2011[10:27:12 PM]
- *
- */
- public class RegisterAction extends ActionSupport implements ServletRequestAware{
- /**
- *
- */
- private static final long serialVersionUID = -6732943120575582727L;
- private HttpServletRequest request;
- private static final String USER="user";
- @Override
- public String execute() throws Exception {
- String username=request.getParameter("username");
- String password=request.getParameter("password");
- String ageStr=request.getParameter("age");
- String birth=request.getParameter("birth");
- int age=getAge(ageStr);
- String gender=request.getParameter("gender");
- if(gender.equals("0")){
- gender=GenderEnum.MALE.getGenderValue();
- }else{
- gender=GenderEnum.FEMALE.getGenderValue();
- }
- String idCardNo=request.getParameter("idCardNo");
- String email=request.getParameter("email");
- String telNo=request.getParameter("telephoneNo");
- String phoneNo=request.getParameter("phoneNo");
- String education=request.getParameter("education");
- String []interests=request.getParameterValues("interests");
- String desc=request.getParameter("desc");
- //用户表
- DBCollection userCollection=MongoDBUtil.getCollection(USER);
- if(null!=username && !"".equals(username)){
- DBObject queryByName=new BasicDBObject();
- queryByName.put("username", username);
- DBCursor findByName=userCollection.find(queryByName);
- Iterator<DBObject> iter=findByName.iterator();
- if(!iter.hasNext()){
- DBObject user=new BasicDBObject();
- user.put("username", username);
- user.put("password", password);
- user.put("age", age);
- user.put("birth", birth);
- user.put("gender", gender);
- user.put("idCardNo", idCardNo);
- user.put("email", email);
- user.put("telephoneNo", telNo);
- user.put("phoneNo", phoneNo);
- user.put("education", education);
- int len=interests.length;
- if(null!=interests && len>0){
- Object []interestsArray=new Object[len];
- for(int i=0;i<len;i++){
- interestsArray[i]=interests[i];
- }
- user.put("interests", interestsArray);
- }
- user.put("desc", desc);
- userCollection.save(user);
- request.getSession().setAttribute("username", username);
- DBObject findByUsername=userCollection.findOne(queryByName);
- if(null!=findByUsername){
- Map<String,Object> userMap=JSONToMapUtil.parseToMap(findByUsername.toString());
- JSONArray interestsArray=JSONArray.fromObject(userMap.get("interests"));
- request.setAttribute("interest", interestsArray.toArray());
- request.setAttribute("userMap", userMap);
- }
- }
- }
- return SUCCESS;
- }
- private int getAge(String ageStr){
- int age=18;//默认为18岁,成年人
- if(NumbericUtil.isInteger(ageStr)){
- age=Integer.parseInt(ageStr);
- age=age<1?1:age>100?100:age;
- }
- return age;
- }
- public void setServletRequest(HttpServletRequest arg0) {
- this.request=arg0;
- }
- }
- /**
- * MongoDBWebTest
- * 去更新页面
- */
- package com.labci.mongodb.web.action;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import net.sf.json.JSONArray;
- import org.apache.struts2.interceptor.ServletRequestAware;
- import com.labci.mongodb.web.util.JSONToMapUtil;
- import com.labci.mongodb.web.util.MongoDBUtil;
- import com.mongodb.BasicDBObject;
- import com.mongodb.DBCollection;
- import com.mongodb.DBObject;
- import com.opensymphony.xwork2.ActionSupport;
- /**
- * @author Bill Tu(tujiyue/iwtxokhtd)
- * Jun 11, 2011[10:27:12 PM]
- *
- */
- public class ToUpdateAction extends ActionSupport implements ServletRequestAware{
- /**
- *
- */
- private static final long serialVersionUID = -6732943120575582727L;
- private HttpServletRequest request;
- private static final String USER="user";
- @Override
- public String execute() throws Exception {
- String username=(String) request.getSession().getAttribute("username");
- if(null!=username && !"".equals(username)){
- DBCollection userCollection=MongoDBUtil.getCollectionNotByAuth(USER);
- DBObject queryByName=new BasicDBObject();
- queryByName.put("username", username);
- DBObject findByUsername=userCollection.findOne(queryByName);
- if(null!=findByUsername){
- Map<String,Object> userMap=JSONToMapUtil.parseToMap(findByUsername.toString());
- JSONArray interestsArray=JSONArray.fromObject(userMap.get("interests"));
- request.setAttribute("interest", interestsArray.toArray());
- request.setAttribute("userMap", userMap);
- }
- }
- return SUCCESS;
- }
- public void setServletRequest(HttpServletRequest arg0) {
- this.request=arg0;
- }
- }
- /**
- * MongoDBWebTest
- * 更新操作
- */
- package com.labci.mongodb.web.action;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import net.sf.json.JSONArray;
- import org.apache.struts2.interceptor.ServletRequestAware;
- import com.labci.mongodb.web.util.GenderEnum;
- import com.labci.mongodb.web.util.JSONToMapUtil;
- import com.labci.mongodb.web.util.MongoDBUtil;
- import com.labci.mongodb.web.util.NumbericUtil;
- import com.mongodb.BasicDBObject;
- import com.mongodb.DBCollection;
- import com.mongodb.DBObject;
- import com.opensymphony.xwork2.ActionSupport;
- /**
- * @author Bill Tu(tujiyue/iwtxokhtd)
- * Jun 11, 2011[10:27:12 PM]
- *
- */
- public class UpdateAction extends ActionSupport implements ServletRequestAware{
- /**
- *
- */
- private static final long serialVersionUID = -6732943120575582727L;
- private HttpServletRequest request;
- private static final String USER="user";
- @Override
- public String execute() throws Exception {
- String username=(String) request.getSession().getAttribute("username");
- if(null!=username && !"".equals(username)){
- DBCollection userCollection=MongoDBUtil.getCollectionNotByAuth(USER);
- String ageStr=request.getParameter("age");
- String birth=request.getParameter("birth");
- int age=getAge(ageStr);
- String gender=request.getParameter("gender");
- if(gender.equals("0")){
- gender=GenderEnum.MALE.getGenderValue();
- }else{
- gender=GenderEnum.FEMALE.getGenderValue();
- }
- String idCardNo=request.getParameter("idCardNo");
- String email=request.getParameter("email");
- String telNo=request.getParameter("telephoneNo");
- String phoneNo=request.getParameter("phoneNo");
- String education=request.getParameter("education");
- String []interests=request.getParameterValues("interests");
- String desc=request.getParameter("desc");
- DBObject condition=new BasicDBObject();
- condition.put("username", username);
- DBObject update=new BasicDBObject();
- update.put("age", age);
- update.put("birth", birth);
- update.put("gender", gender);
- update.put("idCardNo", idCardNo);
- update.put("telephoneNo", telNo);
- update.put("phoneNo", phoneNo);
- update.put("education", education);
- update.put("email", email);
- update.put("interests", interests);
- update.put("desc", desc);
- DBObject setValue=new BasicDBObject();
- setValue.put("$set", update);
- userCollection.update(condition, setValue);
- DBObject findByUsername=userCollection.findOne(condition);
- if(null!=findByUsername){
- Map<String,Object> userMap=JSONToMapUtil.parseToMap(findByUsername.toString());
- JSONArray interestsArray=JSONArray.fromObject(userMap.get("interests"));
- request.setAttribute("interest", interestsArray.toArray());
- request.setAttribute("userMap", userMap);
- }
- }
- return SUCCESS;
- }
- private int getAge(String ageStr){
- int age=18;//默认为18岁,成年人
- if(NumbericUtil.isInteger(ageStr)){
- age=Integer.parseInt(ageStr);
- age=age<1?1:age>100?100:age;
- }
- return age;
- }
- public void setServletRequest(HttpServletRequest arg0) {
- this.request=arg0;
- }
- }
- /**
- * MongoDBWebTest
- * 性别枚举类
- */
- package com.labci.mongodb.web.util;
- /**
- * @author Bill Tu(tujiyue/iwtxokhtd)
- * Jun 11, 2011[10:54:08 PM]
- *
- */
- public enum GenderEnum {
- MALE{
- public String getGenderValue(){
- return "男";
- }
- },
- FEMALE{
- public String getGenderValue(){
- return "女";
- }
- };
- public abstract String getGenderValue();
- }
- /**
- * MongoDBWebTest
- *
- */
- package com.labci.mongodb.web.util;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import net.sf.json.JSONObject;
- /**
- * @author Bill Tu(tujiyue/iwtxokhtd)
- * Jun 12, 2011[2:51:54 PM]
- *
- */
- public class JSONToMapUtil {
- private JSONToMapUtil(){
- }
- @SuppressWarnings("unchecked")
- public static Map<String,Object> parseToMap(String s){
- Map<String,Object> map=new HashMap<String,Object>();
- JSONObject json=JSONObject.fromObject(s);
- Iterator keys=json.keys();
- while(keys.hasNext()){
- String key=(String) keys.next();
- String value=json.get(key).toString();
- if(value.startsWith("{")&&value.endsWith("}")){
- map.put(key, parseToMap(value));
- }else{
- map.put(key, value);
- }
- }
- return map;
- }
- }
- /**
- * MongoDBWebTest
- * 取得数据库连接的工具类
- */
- package com.labci.mongodb.web.util;
- import java.net.UnknownHostException;
- import java.util.Map;
- import java.util.concurrent.ConcurrentHashMap;
- import com.mongodb.DB;
- import com.mongodb.DBCollection;
- import com.mongodb.Mongo;
- import com.mongodb.MongoException;
- /**
- * @author Bill Tu(tujiyue/iwtxokhtd)
- * Jun 11, 2011[10:05:00 PM]
- *
- */
- public class MongoDBUtil {
- private static final String HOST="host";
- private static final String PORT="port";
- private static final String USER="user";
- private static final String PASSWORD="password";
- private static final String DBNAME="dbname";
- private static Map<String,Mongo> dbConnsMap=new ConcurrentHashMap<String,Mongo>();
- private static final Map<String,String> dbInfoMap=ParseFileInfo.getIntance().getDbInfoMap();
- private MongoDBUtil(){
- }
- public static Mongo getConnection(){
- Mongo conn=dbConnsMap.get("test");
- if(null==conn){
- synchronized(MongoDBUtil.class){
- if(null==conn){
- //这种方式在jdk1.5及以上版本上没有问题
- try {
- conn=new Mongo(dbInfoMap.get(HOST),Integer.parseInt(dbInfoMap.get(PORT)));
- } catch (NumberFormatException e) {
- e.printStackTrace();
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (MongoException e) {
- e.printStackTrace();
- }
- dbConnsMap.put("test", conn);
- }
- }
- }
- return conn;
- }
- public static DBCollection getCollection(String collectionName){
- DBCollection collection=null;
- boolean isLogin=true;
- DB db=getConnection().getDB(dbInfoMap.get(DBNAME));
- if(null != db){
- isLogin=db.authenticate(dbInfoMap.get(USER), dbInfoMap.get(PASSWORD).toCharArray());
- }
- if(isLogin){
- collection=db.getCollection(collectionName);
- if(null==collection){
- synchronized(MongoDBUtil.class){
- if(null==collection){
- collection=db.createCollection(collectionName, null);
- }
- }
- }
- }
- return collection;
- }
- public static DBCollection getCollectionNotByAuth(String collectionName){
- DBCollection collection=null;
- DB db=getConnection().getDB(dbInfoMap.get(DBNAME));
- if(null != db){
- collection=db.getCollection(collectionName);
- if(null==collection){
- synchronized(MongoDBUtil.class){
- if(null==collection){
- collection=db.createCollection(collectionName, null);
- }
- }
- }
- }
- return collection;
- }
- }
- /**
- * MongoDBWebTest
- * 判断是否是数字的工具类
- */
- package com.labci.mongodb.web.util;
- import java.util.regex.Pattern;
- /**
- * @author Bill Tu(tujiyue/iwtxokhtd)
- * Jun 11, 2011[10:38:33 PM]
- *
- */
- public class NumbericUtil {
- private NumbericUtil(){
- }
- public static boolean isDigits(String input){
- boolean flag=false;
- if(!isStringNull(input)){
- String regex="^[//d]+[//.]?[//d]+$";
- Pattern p=Pattern.compile(regex);
- flag=p.matcher(input).matches();
- }
- return flag;
- }
- public static boolean isInteger(String input){
- boolean flag=false;
- if(!isStringNull(input)){
- String regex="^[-+]?[//d]+$";
- Pattern p=Pattern.compile(regex);
- flag=p.matcher(input).matches();
- }
- return flag;
- }
- public static boolean isDouble(String input){
- boolean flag=false;
- if(!isStringNull(input)){
- String regex="^[//d]+[//.][//d]+$";
- Pattern p=Pattern.compile(regex);
- flag=p.matcher(input).matches();
- }
- return flag;
- }
- private static boolean isStringNull(String input){
- boolean isNull=false;
- if(null==input ||"".equals(input.trim())||input.length()<=0){
- isNull=true;
- }
- return isNull;
- }
- }
- /**
- * MongoDBWebTest
- * 解析db属性文件的类
- */
- package com.labci.mongodb.web.util;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Enumeration;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Properties;
- /**
- * @author Bill Tu(tujiyue/iwtxokhtd)
- * Jun 11, 2011[9:43:02 PM]
- *
- */
- public class ParseFileInfo {
- private static Properties configFile=null;
- private static final String DB_CONFIG_FILE_NAME="db.properties";
- private ParseFileInfo(){
- configFile=new Properties();
- }
- private static class ParseFileInfoHolder{
- private static ParseFileInfo instance=new ParseFileInfo();
- }
- public static ParseFileInfo getIntance(){
- return ParseFileInfoHolder.instance;
- }
- public Map<String,String> getDbInfoMap(){
- InputStream is=ParseFileInfo.class.getResourceAsStream("/"+DB_CONFIG_FILE_NAME);
- Map<String,String> dbInfoMap=new HashMap<String,String>();
- if(null != is){
- try {
- configFile.load(is);
- } catch (IOException e) {
- e.printStackTrace();
- }
- Enumeration<Object> fileKeys=configFile.keys();
- while(fileKeys.hasMoreElements()){
- String keyName=(String) fileKeys.nextElement();
- dbInfoMap.put(keyName, configFile.getProperty(keyName));
- }
- }
- return dbInfoMap;
- }
- }
db.properties
- host=192.168.1.86
- port=27017
- user=iwtxokhtd
- password=123456
- dbname=test
struts.xml
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <constant name="struts.devMode" value="false" />
- <!-- 改变struts2默认为2M的上传文件大小限制 -->
- <constant name="struts.multipart.maxSize" value="1024000000"/>
- <package name="mongoDB" extends="struts-default">
- <action name="register" class="com.labci.mongodb.web.action.RegisterAction">
- <result name="success">viewInfo.jsp</result>
- <result name="input">index.jsp</result>
- </action>
- <action name="toUpdate" class="com.labci.mongodb.web.action.ToUpdateAction">
- <result name="success">updateInfo.jsp</result>
- </action>
- <action name="update" class="com.labci.mongodb.web.action.UpdateAction">
- <result name="success">viewInfo.jsp</result>
- <result name="input">updateInfo.jsp</result>
- </action>
- </package>
- </struts>
validator.js
- $(document).ready(function(){
- $.formValidator.initConfig({formid:"register",onerror:function(msg){alert(msg);return false;},onsuccess:function(){alert('ddd');return true;}});
- $("#username").formValidator({tipid:"nameTip",onshow:"必填",onfocus:"用户名至少6个字符,最多20个字符",oncorrect:"该用户名可以注册"}).inputValidator({min:6,max:20,onerror:"你输入的用户名不合法,请确认"}).regexValidator({regexp:"username",datatype:"enum",onerror:"用户名格式不正确"});
- $("#password").formValidator({tipid:"passwordTip1",onshow:"必填",onfocus:"密码不能为空,至少6位",oncorrect:"密码输入合法"}).inputValidator({min:6,empty:{leftempty:false,rightempty:false,emptyerror:"密码两边不能有空格"},onerror:"密码不能为空,请确认"});
- $("#password2").formValidator({tipid:"passwordTip2",onshow:"必填",onfocus:"两次密码输入必须一致哦",oncorrect:"密码确认正确"}).inputValidator({min:6,empty:{leftempty:false,rightempty:false,emptyerror:"重复密码两边不能有空格"},onerror:"重复密码不能为空,请确认"}).compareValidator({desid:"password",operateor:"=",onerror:"两次密码输入不一致,请重新确认"});
- $(":radio[name='gender']").formValidator({tipid:"genderTip",onshow:"必填",onfocus:"默认为男性",oncorrect:"性别选择正确",defaultvalue:["0"]}).inputValidator({min:1,max:1,onerror:"性别忘记选了,请确认"});
- $("#age").formValidator({onshow:"必填",onfocus:"请输入年龄,范围在18至100之间",oncorrect:"恭喜你,你输对了"}).inputValidator({min:18,max:100,type:"value",onerrormin:"你输入的值必须大于等于18",onerror:"年龄必须在18-100之间,请确认"});
- $("#birth").focus(function(){WdatePicker({skin:'whyGreen',oncleared:function(){$(this).blur();},onpicked:function(){$(this).blur();}})}).formValidator({onshow:"必填",onfocus:"请选择出生日期",oncorrect:"出生日期输入合法"}).inputValidator({min:"1900-01-01",max:"2099-01-01",type:"date",onerror:"日期必须在/"1900-01-01/"和/"2099-01-01/"之间"});
- $("#idCardNo").formValidator({onshow:"可选",onfocus:"请输入15或18位身份证",oncorrect:"输入正确"}).functionValidator({fun:isCardID});
- $("#email").formValidator({onshow:"必填",onfocus:"必须输入合法的邮箱地址",oncorrect:"邮箱填写正确",forcevalid:true}).inputValidator({min:6,max:100,onerror:"邮箱地址的长度限制在6至100字符以内"}).regexValidator({regexp:"^([//w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([//w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$",onerror:"你输入的邮箱格式不正确"});
- $("#education").formValidator({onshow:"必填",onfocus:"请选择真实的学历",oncorrect:"学历选择正确"}).inputValidator({min:1,onerror: "学历不能丢!"});
- $(":checkbox[name='interests']").formValidator({tipid:"interestsTip",onshow:"必须选择一个",onfocus:"得选择1个",oncorrect:"兴趣爱好已选"}).inputValidator({min:1,onerror:"没选择好哦"});
- $("#telephoneNo").formValidator({empty:true,onshow:"可选",onfocus:"最好是留一下吧",oncorrect:"手机号码填写正确",onempty:"还真不留"}).inputValidator({min:11,max:11,onerror:"手机号码必须是11位的,请确认"}).regexValidator({regexp:"mobile",datatype:"enum",onerror:"你输入的手机号码格式不正确"});;
- $("#phoneNo").formValidator({empty:true,onshow:"可选",onfocus:"格式例如:0755-66666666",oncorrect:"联系电话填写正确",onempty:"哎,真得没留"}).regexValidator({regexp:"^[[0-9]{3}-|/[0-9]{4}-]?([0-9]{8}|[0-9]{7})?$",onerror:"你输入的联系电话格式不正确"});
- $("#desc").formValidator({onshow:"必填",onfocus:"描述至少要输入10个汉字或20个字符",oncorrect:"输入合法",defaultvalue:"得写点东东..."}).inputValidator({min:20,onerror:"你输入的描述长度不正确,请确认"});
- });
validator.css
- .onCorrect
- {
- background:url(../images/reg4.gif) no-repeat;
- padding-left:25px;
- font-size: 12px;
- line-height:22px;
- vertical-align:middle;
- }
- .onShow
- {
- background:url(../images/reg1.gif) no-repeat;
- padding-left:25px;
- font-size: 12px;
- line-height:22px;
- vertical-align:middle;
- }
- .onFocus
- {
- background:#E9F0FF url(../images/reg2.gif) no-repeat;
- padding-left:25px;
- font-size: 12px;
- line-height:22px;
- vertical-align:middle;
- }
- .onError
- {
- background:#FFF2E9 url(../images/reg3.gif) no-repeat;
- padding-left:25px;
- font-size: 12px;
- line-height:22px;
- vertical-align:middle;
- }
- .onLoad
- {
- background:#E9FFEB url(../images/loading.gif) no-repeat 3px 3px;
- padding-left:25px;
- font-size: 12px;
- line-height:22px;
- vertical-align:middle;
- }
web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>
- org.apache.struts2.dispatcher.FilterDispatcher
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>*.action</url-pattern>
- </filter-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>