开发清单
- JDK 1.7
- Servlet 3.0
- JSP
- Dom4j 1.6.1
- FullCanlendar 3
后台考虑兼容性,并没有使用数据库,而是采用xml格式存储数据,毕竟一年只有365天,点击FullCanlendar的某一天,设置为休息日,再次点击取消。
XML格式为:
<?xml version="1.0" encoding="UTF-8"?> <roots xmlns="http://www.phpStudy.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.phpStudy.net note.xsd"> <event ID="S2016-12-11" start="2016-12-11" title="休息日"/> <event ID="S2016-12-04" start="2016-12-04" title="休息日"/> <event ID="S2016-12-03" start="2016-12-03" title="休息日"/> <event ID="S2016-12-10" start="2016-12-10" title="休息日"/> <event ID="S2016-12-17" start="2016-12-17" title="休息日"/> <event ID="S2016-12-18" start="2016-12-18" title="休息日"/> <event ID="S2016-12-24" start="2016-12-24" title="休息日"/> <event ID="S2016-12-25" start="2016-12-25" title="休息日"/> <event ID="S2016-12-31" start="2016-12-31" title="休息日"/> <event ID="S2017-01-01" start="2017-01-01" title="休息日"/> </roots>
约束文档为:
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.phpStudy.net" xmlns="http://www.phpStudy.net" elementFormDefault="qualified"> <xs:element name="roots"> <xs:complexType> <xs:sequence> <xs:element name="event" minOccurs="0" maxOccurs="366" > <xs:complexType> <xs:attribute name="ID" type="xs:ID" /> <xs:attribute name="title" type="xs:string" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
整个项目只使用了一个index.html作为展示界面。
具体代码为:
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>wday政府日历</title> <!-- Bootstrap --> <!-- 新 Bootstrap 核心 CSS 文件 --> <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css"> <!-- 可选的Bootstrap主题文件(一般不用引入) --> <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap-theme.min.css"> <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn‘t work if you view the page via file:// --> <!--[if lt IE 9]> <script src="http://cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="http://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script> <![endif]--> <link href=‘./baseCanlendar/fullcalendar.min.css‘ rel=‘stylesheet‘ /> <link href=‘./baseCanlendar/fullcalendar.print.min.css‘ rel=‘stylesheet‘ media=‘print‘ /> <script src=‘./lib/jquery.min.js‘></script> <script> var cal={}; $(document).ready(function() { var arrData = []; $.ajax({ url: "./FullCanlendarServlet", async:false, type:"GET", success: function(data){ arrData = data; } }); cal = $(‘#calendar‘).fullCalendar({ header: { left: ‘prev,next today‘, center: ‘title‘, right: ‘prevYear,nextYear‘ }, editable: false, droppable: false, // this allows things to be dropped onto the calendar eventAfterAllRender: function( view ) { //alert(‘好吧,全部加载完毕‘); }, dayClick: function( date, jsEvent, view) { var year = date._d.getFullYear(); var month = date._d.getMonth()+1; var day = date._d.getDate(); if (month<10){ month = "0"+month; } if (day<10){ day = "0"+day; } var d =year+"-"+month+"-"+day; $.ajax({ url: "./FullCanlendarSaveTag", async:false, type:"GET", data:{start:d}, beforeSend:function (){ showModal(); }, success: function(data){ if (data.success===‘sav‘){ $(‘#calendar‘).fullCalendar(‘addEventSource‘,[{ start:d, title: ‘休息日‘, id:‘S‘+d }]); hideModal(); }else{ alert("已经存在"); hideModal(); } } }); }, events: arrData, eventClick:function( event, jsEvent, view ) { var d =event.id; $.ajax({ url: "./FullCanlendarSaveTag", async:false, type:"POST", data:{id:d}, beforeSend:function (){ showModal(); }, success: function(data){ if(data.success===‘del‘){ cal.fullCalendar("removeEvents", event.id); hideModal(); }else{ alert("不存在"); hideModal(); } } }); } }); }); function hideModal(){ console.log("$(‘#myModal‘).modal(‘hide‘);"); $(‘#myModal‘).modal(‘hide‘); } function showModal(){ console.log("$(‘#myModal‘).modal({backdrop:‘static‘,keyboard:false});"); $(‘#myModal‘).modal({backdrop:‘static‘,keyboard:false}); } function showUserHoliday(){ $(‘#userHolidayModal‘).modal(‘show‘); } //设置自定义标签 function setUserHolidayTag(){ var tagText = $(‘#userHolidayText‘).val(); $(‘#userHolidayTag‘).html(tagText); $(‘#userHolidayModal‘).modal(‘hide‘); setDraggable(); } function initCalendar(){ if(window.confirm(‘确定初始化?‘)){ var moment = cal.fullCalendar(‘getDate‘); var y = moment.format(); var sp = y.split("-"); $.ajax({ url: "./FullCanlendarInit", async:false, type:"POST", data:{year:sp[0]}, beforeSend:function (){ showModal(); }, success: function(data){ if(data.success===‘init‘){ alert("init ok"); hideModal(); }else{ alert("init error"); hideModal(); } } }); window.location.reload(); } } function clearCalendar(){ if(window.confirm(‘确定清空?‘)){ $.ajax({ url: "./FullCanlendarInit", async:false, type:"GET", beforeSend:function (){ showModal(); }, success: function(data){ if(data.success===‘clear‘){ alert("clear ok"); hideModal(); }else{ alert("clear error"); hideModal(); } } }); cal.fullCalendar(‘removeEvents‘); } } </script> <style> body { margin-top: 40px; text-align: center; font-size: 14px; font-family: "Lucida Grande",Helvetica,Arial,Verdana,sans-serif; } #wrap { width: 1100px; margin: 0 auto; } #external-events { float: left; width: 150px; padding: 0 10px; border: 1px solid #ccc; background: #eee; text-align: left; } #external-events h4 { font-size: 16px; margin-top: 0; padding-top: 1em; } #external-events .fc-event { margin: 10px 0; cursor: pointer; } #external-events p { margin: 1.5em 0; font-size: 11px; color: #666; } #external-events p input { margin: 0; vertical-align: middle; } #calendar { width: 900px; } </style> </head> <body style="background-color: #C7EDCC;"> <button type="button" class="btn btn-primary" onclick="clearCalendar();">清空工作日</button> <button type="button" class="btn btn-success" onclick="initCalendar();">初始化工作日</button> <div style=""> <div id=‘calendar‘></div> </div> <div class="modal fade" id="myModal"> <div class="modal-dialog modal-sm"> <img alt="" src="data:image/gif;base64,R0lGODlhGQAZAJECAK7PTQBjpv///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5OTYyNTQ4Ni02ZGVkLTI2NDUtODEwMy1kN2M4ODE4OWMxMTQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RUNGNUFGRUFGREFCMTFFM0FCNzVDRjQ1QzI4QjFBNjgiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RUNGNUFGRTlGREFCMTFFM0FCNzVDRjQ1QzI4QjFBNjgiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjk5NjI1NDg2LTZkZWQtMjY0NS04MTAzLWQ3Yzg4MTg5YzExNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5OTYyNTQ4Ni02ZGVkLTI2NDUtODEwMy1kN2M4ODE4OWMxMTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQFCgACACwAAAAAGQAZAAACTpSPqcu9AKMUodqLpAb0+rxFnWeBIUdixwmNqRm6JLzJ38raqsGiaUXT6EqO4uIHRAYQyiHw0GxCkc7l9FdlUqWGKPX64mbFXqzxjDYWAAAh+QQFCgACACwCAAIAFQAKAAACHYyPAsuNH1SbME1ajbwra854Edh5GyeeV0oCLFkAACH5BAUKAAIALA0AAgAKABUAAAIUjI+py+0PYxO0WoCz3rz7D4bi+BUAIfkEBQoAAgAsAgANABUACgAAAh2EjxLLjQ9UmzBNWo28K2vOeBHYeRsnnldKBixZAAA7" /> </div><!-- /.modal-dialog --> </div><!-- /.modal --> <div class="modal fade" id="userHolidayModal"> <div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-body"> <input type="text" id="userHolidayText" /> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary" onclick="setUserHolidayTag()">设置</button> </div> </div><!-- /.modal-content --> </div><!-- /.modal-dialog --> </div><!-- /.modal --> <script src=‘./lib/moment.min.js‘></script> <script src=‘./lib/jquery-ui.min.js‘></script> <script src=‘./baseCanlendar/fullcalendar.min.js‘></script> <script src=‘./baseCanlendar/zh-cn.js‘></script> <!-- 最新的 Bootstrap 核心 JavaScript 文件 --> <script src="http://cdn.bootcss.com/bootstrap/3.3.0/js/bootstrap.min.js"></script> </body> </html>
服务端使用Java Servlet处理。功能包括,【初始化日历】,【清空日历】,【点击日历增加休息日标签】,【点击标签移除标签】。
两点功能,采用dom4j为数据源,采用纯Java Servlet,目的是为了在任何Java Web项目当中都可以使用,前端日历框架使用了FullCalendar与BootStrpa模态效果。
首先粘贴Servlet代码,从XML中获取数据,代码如下:
package com.yu.wday; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import com.yu.wday.util.Dom4JUtil; import com.yu.wday.util.ResponseSendJson; /** * qq80303857 * Servlet implementation class FullCanlendarServlet */ @WebServlet("/FullCanlendarServlet") public class FullCanlendarServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public FullCanlendarServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ @SuppressWarnings({ "unused", "unchecked" }) protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String path = request.getServletContext().getRealPath("/"); File file = new File(path+"FullCanlendar/note.xml"); Document document = Dom4JUtil.parse(file); Element root = document.getRootElement(); List<Element> list = root.elements("event"); String json = Dom4JUtil.XML2Json(list); ResponseSendJson.sendJson(response, json); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
点击日历增加休息日标签与点击休息日标签删除标签分别使用了GET与POST区分,Servlet代码如下:
package com.yu.wday; import java.io.File; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.dom4j.Document; import org.dom4j.Element; import com.yu.wday.util.Dom4JUtil; import com.yu.wday.util.ResponseSendJson; /** * qq80303857 * Servlet implementation class FullCanlendarSaveTag */ @WebServlet("/FullCanlendarSaveTag") public class FullCanlendarSaveTag extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public FullCanlendarSaveTag() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ @SuppressWarnings("unused") protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String path = request.getServletContext().getRealPath("/"); String start = request.getParameter("start"); String title = request.getParameter("title"); if (title!=null){ title = new String(title.getBytes("ISO-8859-1"),"UTF-8"); }else{ title = "休息日"; } File file = new File(path+"FullCanlendar/note.xml"); Document document = Dom4JUtil.parse(file); Element root = document.getRootElement(); Element element = root.elementByID("S"+start); if (element!=null){ ResponseSendJson.sendJson(response, "{\"success\":\"exist\"}"); }else{ Element curEle = root.addElement("event"); curEle.addAttribute("ID", "S"+start); curEle.addAttribute("start", start); curEle.addAttribute("title", title); Dom4JUtil.write(file, document); ResponseSendJson.sendJson(response, "{\"success\":\"sav\"}"); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String path = request.getServletContext().getRealPath("/"); String id = request.getParameter("id"); File file = new File(path+"FullCanlendar/note.xml"); Document document = Dom4JUtil.parse(file); Element root = document.getRootElement(); Element element = root.elementByID(id); if (element!=null){ root.remove(element); Dom4JUtil.write(file, document); ResponseSendJson.sendJson(response, "{\"success\":\"del\"}"); }else{ root.remove(element); Dom4JUtil.write(file, document); ResponseSendJson.sendJson(response, "{\"success\":\"exist\"}"); } } }
初始化休息日与清空所有标签,分别使用GET与POST区分,Servlet代码如下:
package com.yu.wday; import java.io.File; import java.io.IOException; import java.util.Calendar; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.dom4j.Document; import org.dom4j.Element; import com.yu.wday.util.DateUtils; import com.yu.wday.util.Dom4JUtil; import com.yu.wday.util.EveryDayUtils; import com.yu.wday.util.ResponseSendJson; /** * Servlet implementation class FullCanlendarInit */ @WebServlet("/FullCanlendarInit") public class FullCanlendarInit extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public FullCanlendarInit() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getServletContext().getRealPath("/"); File file = new File(path+"FullCanlendar/note.xml"); Document document = Dom4JUtil.parse(file); Element root = document.getRootElement(); Dom4JUtil.clear(root, root.elements("event")); Dom4JUtil.write(file, document); ResponseSendJson.sendJson(response, "{\"success\":\"clear\"}"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getServletContext().getRealPath("/"); File file = new File(path+"FullCanlendar/note.xml"); Document document = Dom4JUtil.parse(file); Element root = document.getRootElement(); Dom4JUtil.clear(root, root.elements("event")); String parmYear = request.getParameter("year"); Calendar c = Calendar.getInstance(); int year = 2016; if (EveryDayUtils.strIsNum(parmYear)){ year = Integer.valueOf(parmYear); }else{ year = c.get(Calendar.YEAR); } for (int i=0;i<12;i++){ c.set(year, i, 1); int lastDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); for (int x=1;x<=lastDay;x++){ c.set(year, i, x); if(DateUtils.checkHoliday(c)){ System.out.print(year+"-"+(i+1)+"-"+x+" 休息 "); String mon = ""; String day = ""; if (i+1<10){ mon = "0"+(i+1); }else{ mon = ""+(i+1); } if (x<10){ day = "0"+x; }else{ day = ""+x; } String ymd = year+"-"+mon+"-"+day; Element curEle = root.addElement("event"); curEle.addAttribute("ID", "S"+ymd); curEle.addAttribute("start", ymd); curEle.addAttribute("title", "休息日"); }else{ System.out.print(year+"-"+(i+1)+"-"+x+" "); } } System.out.println(); } Dom4JUtil.write(file, document); ResponseSendJson.sendJson(response, "{\"success\":\"init\"}"); } }
Dom4J工具包,代码如下:
package com.yu.wday.util; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class Dom4JUtil { public static Document parse(File file){ SAXReader reader = new SAXReader(); Document document = null; try { document = reader.read(file); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } return document; } public static void bar(Document document) throws DocumentException { Element root = document.getRootElement(); // iterate through child elements of root for ( Iterator i = root.elementIterator(); i.hasNext(); ) { Element element = (Element) i.next(); // do something } // iterate through child elements of root with element name "foo" for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) { Element foo = (Element) i.next(); // do something } // iterate through attributes of root for ( Iterator i = root.attributeIterator(); i.hasNext(); ) { Attribute attribute = (Attribute) i.next(); // do something } } public Document createDocument() { Document document = DocumentHelper.createDocument(); Element root = document.addElement( "root" ); Element author1 = root.addElement( "author" ) .addAttribute( "name", "James" ) .addAttribute( "location", "UK" ) .addText( "James Strachan" ); Element author2 = root.addElement( "author" ) .addAttribute( "name", "Bob" ) .addAttribute( "location", "US" ) .addText( "Bob McWhirter" ); return document; } public static String XML2Json(List<Element> list){ StringBuffer sb = new StringBuffer("["); for (int i=0;i<list.size();i++){ StringBuffer sbTemp = new StringBuffer("{"); Element e = list.get(i); Attribute abID = e.attribute("ID"); Attribute abTitle = e.attribute("title"); Attribute abStart = e.attribute("start"); String idValue = abID.getValue(); String title = abTitle.getValue(); String start = abStart.getValue(); sbTemp.append("\"start\":\""+start+"\","); sbTemp.append("\"title\":\""+title+"\","); sbTemp.append("\"id\":\""+idValue+"\""); if (i<list.size()-1){ sbTemp.append("},"); }else{ sbTemp.append("}"); } sb.append(sbTemp); } sb.append("]"); return sb.toString(); } public static void write(File file,Document document) throws IOException { FileOutputStream fos = new FileOutputStream(file); OutputFormat of = OutputFormat.createPrettyPrint(); of.setEncoding("UTF-8"); // of.setIndent(" "); XMLWriter writer = new XMLWriter(fos,of); writer.write(document); writer.flush(); writer.close(); } public static void clear (Element parentElement,List<Element> list){ for (Element ele:list){ parentElement.remove(ele); } } }
检查休息日,代码如下:
package com.yu.wday.util; import java.util.Calendar; public class DateUtils { /** * * <p>Title: checkHoliday </P> * <p>Description: TODO 验证日期是否是节假日</P> * @param calendar 传入需要验证的日期 * @return * return boolean 返回类型 返回true是节假日,返回false不是节假日 * throws * date 2014-11-24 上午10:13:07 */ public static boolean checkHoliday(Calendar calendar){ //判断日期是否是周六周日 if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY || calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){ return true; } return false; } }
常用工具栏,判断字符串是否可以转换为数字,代码如下:
package com.yu.wday.util; public class EveryDayUtils { public static boolean strIsNum(String str){ try { Integer.valueOf(str);//把字符串强制转换为数字 return true;//如果是数字,返回True } catch (Exception e) { return false;//如果抛出异常,返回False } } }
使用Response发送Json数据,代码如下:
package com.yu.wday.util; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServletResponse; public class ResponseSendJson { public static void sendJson(HttpServletResponse response,String json){ response.setCharacterEncoding("UTF-8"); response.setContentType("application/json; charset=utf-8"); PrintWriter out = null; try { out = response.getWriter(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } out.append(json); out.flush(); out.close(); } }
有了这些数据,就很轻而易举的判断哪天是休息日咯。
完整项目下载地址:http://aa80303857.iteye.com/admin/blogs/2346586
时间: 2024-11-09 00:21:52