javaEE所涉及的知识有:
java(SE)基础、数据库、html、css、js、htmldom、dtd、schema、xml、xml解析(dom解析、SAX解析、dom4j解析)、web服务器(tomcat)、jsp、servlet
1.HTML:超文本标记语言,由标签作为组件布局到页面,由浏览器解析显示。
如:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>对账差异明细</title> </head> <body> <div></div> <input type="text" /> <p></p> <span></span> <img src=""/> <a href="javascript:">超链接</a> </body> </html>
2.css:样式控制,控制html标签的显示效果(大小,颜色等),属性等
css如何控制某个标签的样式? 通过选择器找到指定的标签,再对其样式控制。
html的属性中有id、class等用于标识标签自己,id:唯一的,只能标识一个标签<input id="name"/>;class:类,可标识多个标签为同一类<p class="red"></p> <a class="red"></a>
css选择器有:id选择器 #id、类选择器 .className、标签选择器 tagName 如 p 、input等;
控制样式:
#id{ height:100px; width:100px; } .className{ background-color:red; margin-top:10px; }
3.js: javascript,虽然名为javascript,但是与java没半毛钱关系,js是基于事件和面向对象的一门语言
虽然js与java没关系,但是一些基础语法却与java类似
js的基本类型有undefined,Number,String,Boolean,Array,Date,Null,Object等,但是都可以用统一的var类型接收;使用new关键字创建,如
var carname=new String();//可以用(),也可以不用 var x= new Number; var y= new Boolean(); var cars= new Array; var person= new Object;
js可以创建匿名类对象:本质是json对象
var a = {};//创建一个对象,这种方式的对象以json对象的形式存在 a.name = "小样";//可以定义任意属性 a.age = "19"; console.log(a);//打印日志结果:{"name":"小样","age":"19"} var arr = [];//创建一个数组 arr.push(a);//将对象a添加到数组arr里面,类似java的list的add();方法 console.log(arr);//结果:[{"name":"小样","age":"19"}]
js框架jquery中的很多函数的参数就是以对象(json)的形式来传参如:
//jquery的ajax //页面加载事件 $(function(){ $.ajax({ type : "post", url:"", data:{page:"1",pagesize:"15"}, dataType:"json", success:function(data){ alert("data:"+data); } });//{}就是一个匿名对象,type是属性 });
js定义函数(方法):
/** *方式1 **/ function xxx(param,param2,param3){//参数不需要指定类型,且调用时可以不传参,或传一个,两个都行,传入的参数按顺序对应 alert(param); alert(param2); alert(param3); return param+param2+param3;//返回值 } /** *方式2 *一个函数其实也是对象, **/ var aa = function(param,param2){ alert(param+"-"param2); return param+param2; } /** *方式3,定义对象,通过对象.属性调用函数 **/ var blogInfo={ blogId:123, blogName:"werwr", showBlog:function(){alert(this.blogId);} }; //调用 blogInfo.showBlog();//需要加()
js需要基于事件才能触发执行,比如按钮点击事件执行,页面加载事件执行等,给html标签绑定事件的方式。
方式一
<input type="button" onclick="test()"/><!--绑定点击事件执行test()函数,--> <form onsubmit="return sub()"></form><!--绑定表单提交事件,函数返回true时执行提交,false不提交--> <script> function test(){ alert("不要点我了"); } function sub(){ //验证表单数据合法性 var name = document.getElementById("name");//根据id获取html标签对象 var reg = /^1[0-9a-zA-Z]$/;//正则对象 var reg2 = new RegExp("^a[1]{10}$");//正则2 if(reg.test(name.value)){ return true; } return false; } </script>
方式二
<input type="button" id="btn" /> <form id="f"></form> <script> function test(){ alert("不要点我了"); } function sub(){ //验证表单数据合法性 var name = document.getElementById("name");//根据id获取html标签对象 var reg = /^1[0-9a-zA-Z]$/;//正则对象 var reg2 = new RegExp("^a[1]{10}$");//正则2 if(reg.test(name.value)){ return true; } return false; } var btn = document.getElementById("btn"); btn.onclick=function(){test();}; var f = document.getElementById("f"); f.onsubmit=function(){return sub();} </script>
4.HTML DOM:js是浏览器来执行的,浏览器有一些内置对象提供我们使用,不同浏览器,内置对象不同,这些内置对象称为浏览器DOM,而html标签对象称为HTML DOM
浏览器DOM:可以直接使用的对象
- Window:window
- Navigator:navigator
- Screen:screen
- History:history;hostory.back();//返回上一步
- Location:location
HTML DOM:通过window.document.getElementById("id"); window.document.getElementsByClassName("className");//window可以省略
每个HTML Dom(对象)都有对应的属性和方法
5.dtd、schema:文档类型定义,用来约束xml文档格式,类似于java的interface(接口)
6.xml:可扩展标记语言,用来按一定格式存储数据,与json作用一样(格式(结构)化数据,方便对数据操作)
<?xml version="1.0" encoding="UTF-8"?> <root> <student> <name>xx</name> <age>18</age> <sex>男</sex> </student> <student> <name>ee</name> <age>19</age> <sex>男</sex> </student> </root> <!--一个root中有多个student转为json为{student:[{name:"xx",age:18,sex:"男"},{name:"ee",age:19,sex:"男"}]}-->
7.xml解析,dom解析、SAX解析、dom4j解析
dom解析,优点:可对xml进行增删改查操作;缺点:需要读取整棵树到内存,速度慢
public class ParseXml { public static void main(String[] args) { DocumentBuilderFactory f = DocumentBuilderFactory.newInstance(); try { DocumentBuilder b = f.newDocumentBuilder(); Document dom = b.parse(new File(""));//得到dom树 NodeList nodes = dom.getChildNodes(); for(int i=0; i<nodes.getLength(); i++){ Node node = nodes.item(i); node.getTextContent(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
SAX解析:基于事件的解析。优点:读到哪解析到哪,效率高,缺点无法得到读取后的节点,只能得到当前读取处的节点,很难对dom节点进行操作(修改、增加等)
package note; import java.io.File; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class ParseXml { public static void main(String[] args) { SAXParserFactory saxf = SAXParserFactory.newInstance(); try { SAXParser sax = saxf.newSAXParser(); sax.parse(new File(""), new DefaultHandler()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 自定义处理器 * @author hgx * */ class MyHandler extends DefaultHandler{ /** * 读取文本节点时执行 */ @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub super.characters(ch, start, length); } /** * dom结束时执行 */ @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); } /** * 读取结束标签时执行 */ @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub super.endElement(uri, localName, qName); } /** * 读取开始dom时执行 */ @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); } /** * 读取开始节点时执行 */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub super.startElement(uri, localName, qName, attributes); } }
dom4j解析:第三方xml解析器
public class Dom4j{ public static void main(String[] args){ SAXReader reader = new SAXReader(); //读取文件 转换成Document Document document = reader.read(new File("XXXX.xml")); } }
8.web客户端与服务器
web客户端:浏览器。web服务器:tomcat、weblogic等。客户端与服务器本质上是TCP协议编写的软件,即java的ServerSocket、Socket
9.JSP:java server page,java服务页,用于服务器端与php一样
jsp代码必须用<% %>包含起来才是jsp代码。才会被当成java代码执行,在jsp中除了jstl、el表达式、jsp代码<% int a = 0;%>以外的所有与jsp无关的代码(HTML)都会以字符串的形式输出(响应到浏览器)<%一般的java代码%>, <%="<p>我是段落</p>"%>相当于通过流写到浏览器,与php的echo "aaaa" 一样通过流输出到浏览器
JspWriter out = pageContext.getWriter(); out.print("<a href='aa'>aaa</a>");//输出流
jsp的执行:第一次请求某个jsp时web服务器会创建一个对应的.java文件,如index.jsp对应的java为index_jsp.java,这个类就是翻译jsp后的java代码,通过_jspService()方法执行后响应回浏览器。jsp的翻译:当不是jsp代码和jstl标签、el表达式、jsp动作等与jsp相关的代码都当作字符串写到浏览器,代码如:
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null; final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out = null; final java.lang.Object page = this; javax.servlet.jsp.JspWriter _jspx_out = null; javax.servlet.jsp.PageContext _jspx_page_context = null; try { response.setContentType("text/html;charset=utf-8"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; out.write("\r\n"); out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n"); out.write("<html>\r\n"); out.write("\r\n"); out.write("<head>\r\n"); out.write("<base href=\""); out.print(basePath); out.write("\">\r\n"); out.write(" <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\r\n"); out.write(" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n"); out.write(" <meta HTTP-EQUIV=\"pragma\" CONTENT=\"no-cache\">\r\n"); out.write("\r\n"); out.write("<meta HTTP-EQUIV=\"Cache-Control\" CONTENT=\"no-cache, must-revalidate\">\r\n"); out.write("\r\n"); out.write("<meta HTTP-EQUIV=\"expires\" CONTENT=\"0\">\r\n"); out.write(" <title>统一运营运维管理平台</title>\r\n"); out.write(" \r\n"); out.write(" \r\n"); out.write(" <link href=\"static/css/bootstrap.min.css\" rel=\"stylesheet\" />\r\n"); out.write(" <link href=\"static/fontmaster/css/font-awesome.min.css\" rel=\"stylesheet\" data-role=\"global\" />\r\n"); out.write(" <link href=\"static/images/favicon.ico\" type=\"image/x-icon\" rel=\"shortcut icon\" />\r\n"); out.write(" <link href=\"static/css/custum.css\" rel=\"stylesheet\" />\r\n"); out.write(" <script src=\"static/js/jquery-1.9.1.js\"></script>\r\n"); out.write(" <script src=\"https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js\"></script>\r\n"); out.write(" <script src=\"static/js/top_menu.js\"></script>\r\n"); out.write(" <script src=\"static/js/contabs.min.js\"></script>\r\n"); out.write("</head>\r\n"); out.write("<body style=\"overflow-y:hidden\">\r\n"); out.write(" <div id=\"pageWrapper\">\r\n"); out.write(" <div class=\"header\">\r\n"); out.write(" <div class=\"topnav\" id=\"topnav\">\r\n"); out.write(" <div class=\"vlogo\">\r\n"); out.write(" <img src=\"static/images/logo.png\" />\r\n"); out.write(" </div>\r\n"); out.write(" <div class=\"top-panel\">\r\n"); out.write(" <ul class=\"top-menu user-menu\">\r\n"); out.write(" <li id=\"themeall\"><a href=\"javascript:;\"><i><img src=\"static/images/skin.png\" alt=\"\" style=\"width:18px;margin-right:5px;\"></i><span>主题</span> <i class=\"fa fa-angle-down\" aria-hidden=\"true\"></i></a>\r\n"); out.write(" <ul class=\"top_down_menu themeall\" style=\"display:none\">\r\n"); out.write(" <li class=\"default\"><span>主题一</span></li>\r\n"); out.write(" <li class=\"darkblue\"><span>主题二</span></li>\r\n"); out.write(" <li class=\"lightblue\"><span>主题三</span></li>\r\n"); out.write(" <li class=\"darkgreen\"><span>主题四</span></li>\r\n"); out.write(" </ul>\r\n"); out.write(" </li>\r\n"); out.write(" <li id = \"login_info\">\r\n"); out.write(" <a href=\"javascript:;\">\r\n"); out.write(" \t"); if (_jspx_meth_c_005fforEach_005f0(_jspx_page_context)) return; out.write("\r\n"); out.write(" <i class=\"fa fa-angle-down\" aria-hidden=\"true\"></i>\r\n"); out.write(" </a>\r\n"); out.write(" <ul class=\"top_down_menu login_info\" style=\"display:none\">\r\n"); out.write(" <li data-target=\"#updatePassword\" data-toggle=\"modal\"><i class=\"fa fa-cog\"></i><span>修改密码</span></li>\r\n"); out.write(" <!-- <li><i class=\"fa fa-cog\"></i><span>修改手机号码</span></li> -->\r\n"); out.write(" <li><a href=\"login/exitLogin\"><i class=\"fa fa-sign-out\"></i><span>我要退出</span></a></li>\r\n"); out.write(" </ul>\r\n"); out.write(" </li>\r\n"); out.write(" </ul>\r\n"); out.write(" </div>\r\n"); out.write(" </div>\r\n"); out.write(" </div>\r\n"); out.write(" <!-- 左侧菜单 -->\r\n"); out.write(" <div class=\"navbar-left\">\r\n"); out.write(" <div class=\"topbtn\">\r\n"); out.write(" <i class=\"fa fa-navicon\"></i>\r\n"); out.write(" </div>\r\n"); out.write(" <ul>\r\n"); out.write(" <li class=\"order-class\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"基础数据配置\">\r\n"); out.write(" <div class=\"ord_li\">\r\n"); out.write(" <i class=\"fa fa-gears\"></i>\r\n"); out.write(" <span>基础数据配置</span>\r\n"); out.write(" <div class=\"dropdown\"></div>\r\n"); out.write(" </div>\r\n"); out.write("\r\n"); out.write(" <ul class=\"second-nav\">\r\n"); out.write(" <li> <i class=\"fa fa-folder-open-o\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"数据字典配置\"></i> <a href=\"dictBaseData/loadDict\" data-index=\"102\" class=\"J_menuItem\">数据字典配置</a>\r\n"); out.write(" </li>\r\n"); out.write(" <li> <i class=\"fa fa-folder-o\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"营销编码管理\"></i> <a href=\"salesTreeBase/loadSales\" data-index=\"98\" class=\"J_menuItem\">营销编码管理</a>\r\n"); out.write(" </li>\r\n"); out.write(" <li> <i class=\"fa fa-folder-o\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"营销策略管理\"></i> <a href=\"basSalesrelation/loadBasSalesrelation\" data-index=\"98\" class=\"J_menuItem\">营销策略管理</a>\r\n"); out.write(" </li>\r\n"); out.write(" <!-- <li> <i class=\"fa fa-folder-o\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"全部工单\"></i> <a href=\"strategy.html\" data-index=\"103\" class=\"J_menuItem\">营销策略管理</a>\r\n"); out.write(" </li>-->\r\n"); out.write(" <li> <i class=\"fa fa-folder-o\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"营销协议管理\"></i> <a href=\""); out.print(basePath ); out.write("/basSalesagr/loadAgr\" data-index=\"98\" class=\"J_menuItem\">营销协议管理</a>\r\n"); out.write(" </li>\r\n"); out.write(" </ul>\r\n"); out.write(" </li>\r\n"); out.write(" <li class=\"order-class\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"订单管理\">\r\n"); out.write(" <div class=\"ord_li\">\r\n"); out.write(" <i class=\"fa fa fa-paper-plane-o\"></i>\r\n"); out.write(" <span>订单管理</span>\r\n"); out.write(" <div class=\"dropdown\"></div>\r\n"); out.write(" </div>\r\n"); out.write(" <ul class=\"second-nav\">\r\n"); out.write(" <li> <i class=\"fa fa-newspaper-o\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"全部工单\"></i> <a href=\"orderMain/loadOrderMain\" data-index=\"0\" class=\"J_menuItem\">全部工单</a>\r\n"); out.write(" </li>\r\n"); out.write(" <li> <i class=\"fa fa-area-chart\"></i> <a href=\"javascript:;\">人工订单</a><div class=\"dropdown\"></div>\r\n"); out.write(" <ul class=\"third-nav\" style=\"display:none\">\r\n"); out.write(" <li> <i class=\"fa fa-object-group\"></i> <a href=\"ArtificialOrder/loadArtificialOrder\" data-index=\"1\" class=\"J_menuItem\" onclick=\"refresh(this)\" name=\"0 \">待认领工单</a>\r\n"); out.write(" </li>\r\n"); out.write(" "); if (_jspx_meth_c_005fforEach_005f1(_jspx_page_context)) return; out.write("\r\n"); out.write(" <!-- <li> <i class=\"fa fa-server\"></i> <a href=\"order.html\" data-index=\"3\" class=\"J_menuItem\" >已处理工单</a>\r\n"); out.write(" </li> --> \r\n"); out.write(" </ul>\r\n"); out.write(" </li>\r\n"); out.write("\r\n"); out.write(" <li> <i class=\"fa fa-area-chart\"></i> <a href=\"javascript:;\">异常订单</a><div class=\"dropdown\"></div>\r\n"); out.write(" <ul class=\"third-nav\" style=\"display:none\">\r\n"); out.write(" \t<li> <i class=\"fa fa-object-group\"></i> <a href=\"orderMain/loadExceptionOrder?dealType=\" data-index=\"1\" class=\"J_menuItem\">全部异常工单</a>\r\n"); out.write(" </li>\r\n"); out.write(" <li> <i class=\"fa fa-object-ungroup\"></i> <a href=\"orderMain/loadArtificialExceptionOrder?\" data-index=\"4\" class=\"J_menuItem\" onclick=\"refresh(this)\" name=\"0\">待认领异常单</a>\r\n"); out.write(" </li>\r\n"); out.write(" "); if (_jspx_meth_c_005fforEach_005f2(_jspx_page_context)) return; out.write(" \r\n"); out.write(" <li> <i class=\"fa fa-object-group\"></i> <a href=\"orderMain/loadExceptionOrder?dealType=BT1003\" data-index=\"1\" class=\"J_menuItem\">人工异常工单</a>\r\n"); out.write(" </li>\r\n"); out.write(" <li> <i class=\"fa fa-object-ungroup\"></i> <a href=\"orderMain/loadExceptionOrder?dealType=BT1002\" data-index=\"2\" class=\"J_menuItem\" >甩单异常工单</a>\r\n"); out.write(" </li>\r\n"); out.write(" <li> <i class=\"fa fa-server\"></i> <a href=\"orderMain/loadExceptionOrder?dealType=BT1001\" data-index=\"3\" class=\"J_menuItem\" >自动异常工单</a>\r\n"); out.write(" </li>\r\n"); out.write(" </ul>\r\n"); out.write(" </li> \r\n"); out.write(" <li> <i class=\"fa fa-hourglass-start\"></i> <a href=\"orderMain/loadOrderMainRejection\" data-index=\"5\" class=\"J_menuItem\" >甩单管理</a>\r\n"); out.write(" </li>\r\n"); out.write(" <li> <i class=\"fa fa-hourglass-o\"></i> <a href=\"orderMain/loadAotoOrder\" data-index=\"6\" class=\"J_menuItem\" >自动单管理</a>\r\n"); out.write(" </li>\r\n"); out.write(" <li> <i class=\"fa fa-window-maximize\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"退款待审核工单\"></i> <a href=\"orderMain/loadOrderRefund\" data-index=\"123\" class=\"J_menuItem\">退款待审核工单</a>\r\n"); out.write(" </li>\r\n"); out.write(" </ul>\r\n"); out.write(" </li>\r\n"); out.write(" <li class=\"order-class\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"退款中心\">\r\n"); out.write(" <div class=\"ord_li\">\r\n"); out.write(" <i class=\"fa fa-credit-card-alt\"></i>\r\n"); out.write(" <span>退款中心</span>\r\n"); out.write(" <div class=\"dropdown\"></div>\r\n"); out.write(" </div>\r\n"); out.write(" <ul class=\"second-nav\">\r\n"); out.write(" <li> <i class=\"fa fa-list-alt\"></i> \r\n"); out.write(" \t<a href=\"orderRefund/loadOrderRefundLibrary\" data-index=\"20\" class=\"J_menuItem\" >退款库</a>\r\n"); out.write(" </li>\r\n"); out.write(" <li> <i class=\"fa fa-calendar-check-o\"></i> \r\n"); out.write(" \t<a href=\"orderRefund/loadPendingAudit\" data-index=\"21\" class=\"J_menuItem\" >待审核</a>\r\n"); out.write(" </li>\r\n"); out.write(" </ul>\r\n"); out.write(" </li>\r\n"); out.write(" \r\n"); out.write(" <li class=\"order-class\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"对账\">\r\n"); out.write(" <div class=\"ord_li\">\r\n"); out.write(" <i class=\"fa fa-clock-o\"></i>\r\n"); out.write(" <span>对账</span>\r\n"); out.write(" <div class=\"dropdown\"></div>\r\n"); out.write(" </div>\r\n"); out.write(" <ul class=\"second-nav\">\r\n"); out.write(" <li> <i class=\"fa fa-calendar-check-o\"></i> \r\n"); out.write(" \t<a href=\"checkOrderPay/checkListJsp\" data-index=\"20\" class=\"J_menuItem\" >对账详情</a>\r\n"); out.write(" </li>\r\n"); out.write(" <li> <i class=\"fa fa-calendar-check-o\"></i> \r\n"); out.write(" \t<a href=\"checkOrderPay/chayiJsp\" data-index=\"21\" class=\"J_menuItem\" >对账差异明细</a>\r\n"); out.write(" </li>\r\n"); out.write(" </ul>\r\n"); out.write(" </li> \r\n"); out.write(" <li class=\"order-class\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"统计分析\">\r\n"); out.write(" <div class=\"ord_li\">\r\n"); out.write(" <i class=\"fa fa-bar-chart-o\"></i>\r\n"); out.write(" <span>统计分析</span>\r\n"); out.write(" <div class=\"dropdown\"></div>\r\n"); out.write(" </div>\r\n"); out.write("\r\n"); out.write(" <ul class=\"second-nav\">\r\n"); out.write(" <li> <i class=\"fa fa-line-chart\"></i> <a href=\"\" data-index=\"23\" class=\"J_menuItem\" >订单统计分析</a>\r\n"); out.write(" </li>\r\n"); out.write(" </ul>\r\n"); out.write(" </li>\r\n"); out.write(" <li class=\"order-class\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"定时任务管理\">\r\n"); out.write(" <div class=\"ord_li\">\r\n"); out.write(" <i class=\"fa fa-clock-o\"></i>\r\n"); out.write(" <span>定时任务管理</span>\r\n"); out.write(" <div class=\"dropdown\"></div>\r\n"); out.write(" </div>\r\n"); out.write(" <ul class=\"second-nav\">\r\n"); out.write(" <li> <i class=\"fa fa-calendar-check-o\"></i> \r\n"); out.write(" <a href=\""); if (_jspx_meth_dzqd_005fpropertiesTag_005f0(_jspx_page_context)) return; out.write("\" data-index=\"20\" class=\"J_menuItem\" >定时任务</a>\r\n"); out.write(" </li>\r\n"); out.write(" \r\n"); out.write(" </ul>\r\n"); out.write(" </li>\r\n"); out.write("\r\n"); out.write(" <li class=\"order-class\" data-toggle=\"tooltip\" data-placement=\"right\" title=\"系统设置\">\r\n"); out.write(" <div class=\"ord_li\">\r\n"); out.write(" <i class=\"fa fa-gear\"></i>\r\n"); out.write(" <span>系统设置</span>\r\n"); out.write(" <div class=\"dropdown\"></div>\r\n"); out.write(" </div>\r\n"); out.write(" <ul class=\"second-nav\">\r\n"); out.write(" <li> <i class=\"fa fa-vcard-o\"></i> <a href=\"javascript:;\">权限管理</a><div class=\"dropdown\"></div>\r\n"); out.write(" <ul class=\"third-nav\" style=\"display:none\">\r\n"); out.write(" <li> <i class=\"fa fa-chain\"></i> <a href=\"authPermission/loadAuthPermission\" data-index=\"50\" class=\"J_menuItem\">地址权限</a>\r\n"); out.write(" </li>\r\n"); out.write(" <li> <i class=\"fa fa-user-plus\"></i> <a href=\"character/loadSystemCharacter\" data-index=\"51\" class=\"J_menuItem\" >角色管理</a>\r\n"); out.write(" </li>\r\n"); out.write(" <li> <i class=\"fa fa-user-circle-o\"></i> <a href=\"userInfo/loadUser\" data-index=\"52\" class=\"J_menuItem\" >用户管理</a>\r\n"); out.write(" </li>\r\n"); out.write(" </ul>\r\n"); out.write(" </li>\r\n"); out.write(" <li> <i class=\"fa fa-list-alt\"></i> <a href=\"\" data-index=\"53\" class=\"J_menuItem\" >菜单管理</a>\r\n"); out.write(" </li>\r\n"); out.write(" <li> <i class=\"fa fa-book\"></i> <a href=\"\" data-index=\"56\" class=\"J_menuItem\" >日志查询</a>\r\n"); out.write(" </li>\r\n"); out.write(" </ul>\r\n"); out.write(" </li> \r\n"); out.write(" </ul>\r\n"); out.write(" \r\n"); out.write(" \r\n"); out.write(" <ul class=\"qudaourl\">\r\n"); out.write(" \t<div class=\"channel\">电渠系统</div>\r\n"); out.write(" \t<li>\r\n"); out.write(" \t\t<a href=\""); if (_jspx_meth_dzqd_005fpropertiesTag_005f1(_jspx_page_context)) return; out.write("\" title=\"打包平台\" target=\"_blank\"><p><img src=\"static/images/channel1.png\"></p>\r\n"); out.write(" \t\t<span>打包平台</span></a>\r\n"); out.write(" \t</li>\r\n"); out.write(" \t\t<li>\r\n"); out.write(" \t\t<a href=\""); if (_jspx_meth_dzqd_005fpropertiesTag_005f2(_jspx_page_context)) return; out.write("\" title=\"规则引擎\" target=\"_blank\"><p><img src=\"static/images/channel2.png\"></p>\r\n"); out.write(" \t\t<span>规则引擎</span></a>\r\n"); out.write(" \t</li>\r\n"); out.write(" \t\r\n"); out.write(" \t<li>\r\n"); out.write(" \t\t<a href=\""); if (_jspx_meth_dzqd_005fpropertiesTag_005f3(_jspx_page_context)) return; out.write("\" title=\"job管理\" target=\"_blank\"><p><img src=\"static/images/channel3.png\"></p>\r\n"); out.write(" \t\t<span>job管理</span></a>\r\n"); out.write(" \t</li>\r\n"); out.write(" </ul>\r\n"); out.write("\r\n"); out.write(" </div>\r\n"); out.write(" <!--右侧正文-->\r\n"); out.write(" <div class=\"right_col\">\r\n"); out.write(" <!-- tabs s-->\r\n"); out.write(" <div class=\"content-tabs\">\r\n"); out.write(" <button class=\"roll-nav roll-left J_tabLeft\"><i class=\"fa fa-backward\"></i> </button>\r\n"); out.write(" <nav class=\"page-tabs J_menuTabs\">\r\n"); out.write(" <div class=\"page-tabs-content\" style=\"margin-left: 0px;\">\r\n"); out.write(" <a href=\"javascript:;\" class=\"J_menuTab\" data-id=\"index_v1.html\">首页</a>\r\n"); out.write(" </div>\r\n"); out.write(" </nav>\r\n"); out.write(" <button class=\"roll-nav roll-right J_tabRight\"><i class=\"fa fa-forward\"></i> </button>\r\n"); out.write(" <div id=\"closeMeun\" class=\"btn-group roll-nav roll-right\">\r\n"); out.write(" <button class=\"dropdown J_tabClose\" data-toggle=\"dropdown\">关闭操作<span class=\"caret\"></span> </button>\r\n"); out.write(" <ul role=\"menu\" class=\"dropdown-menu dropdown-menu-right\">\r\n"); out.write(" \r\n"); out.write(" <li class=\"J_tabCloseAll\"><a>关闭全部选项卡</a> </li>\r\n"); out.write(" <li class=\"J_tabCloseOther\"><a>关闭其他选项卡</a> </li>\r\n"); out.write(" </ul>\r\n"); out.write(" </div>\r\n"); out.write("\r\n"); out.write(" </div>\r\n"); out.write(" <!-- tabs e -->\r\n"); out.write(" <!-- Start -->\r\n"); out.write(" <div class=\"J_mainContent\" id=\"content-main\">\r\n"); out.write(" <iframe class=\"J_iframe\" name=\"iframe0\" width=\"100%\" height=\"100%\" src=\"static/index_v1.html\" frameborder=\"0\" data-id=\"index_v1.html\" seamless></iframe>\r\n"); out.write(" </div>\r\n"); out.write("\r\n"); out.write(" <!-- End -->\r\n"); out.write(" </div>\r\n"); out.write(" </div>\r\n"); out.write(" \r\n"); out.write(" \r\n"); out.write(" <div class=\"modal fade\" id=\"updatePassword\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\">\r\n"); out.write(" <div class=\"modal-dialog\" role=\"document\">\r\n"); out.write(" <div class=\"modal-content\">\r\n"); out.write(" <div class=\"modal-header\">\r\n"); out.write(" <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\r\n"); out.write(" <h4 class=\"modal-title\" id=\"myModalLabel\" >修改密码</h4>\r\n"); out.write(" </div>\r\n"); out.write(" <div class=\"modal-body\">\r\n"); out.write(" <div class=\"list_dec\">\r\n"); out.write(" \t\t<ul>\r\n"); out.write(" \t\t"); if (_jspx_meth_c_005fforEach_005f3(_jspx_page_context)) return; out.write("\r\n"); out.write(" \t\t<li><span>原密码 </span><input type=\"password\" id=\"oldPwd\"></li>\r\n"); out.write(" \t\t<li><span>新密码 </span><input type=\"password\" id=\"newPwd\"></li>\r\n"); out.write(" \t\t<li><span>确认密码 </span><input type=\"password\" id=\"surePwd\"></li>\r\n"); out.write(" \t\t\r\n"); out.write(" \t</ul>\r\n"); out.write(" </div>\r\n"); out.write(" </div>\r\n"); out.write(" <div class=\"modal-footer\">\r\n"); out.write(" <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\" >关闭</button>\r\n"); out.write(" <button type=\"button\" class=\"btn btn-primary\" id=\"updatePwd\">保存</button>\r\n"); out.write(" </div>\r\n"); out.write(" </div>\r\n"); out.write(" </div>\r\n"); out.write("</div>\r\n"); out.write(" <script type=\"text/javascript\" src=\"static/js/index.js\"> </script>\r\n"); out.write(" <script type=\"text/javascript\" src=\"static/js/order/flow.js\"></script>\r\n"); out.write(" <script type=\"text/javascript\" src=\"static/js/login/loginUpdate.js\"></script>\r\n"); out.write("\t<script src=\"static/js/layer/layer.js\"></script>\r\n"); out.write("</body>\r\n"); out.write(" \r\n"); out.write("</html>"); } catch (java.lang.Throwable t) { if (!(t instanceof javax.servlet.jsp.SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { if (response.isCommitted()) { out.flush(); } else { out.clearBuffer(); } } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else throw new ServletException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } }
与jsp相关的知识:3大指令、4个作用域、7个动作、8个监听、9个内置对象、jstl(标签库)、EL表达式
3大指令:
<%@ page %>,jsp页面设置,导包等作用。
<%@ include %>,页面包含,分为动态包含<%@ include page="xx.jsp" %>、静态包含<%@ include file="ss.jsp"%>
<%@ taglib prefix="c" uri="" %>,导入标签库,使用jstl标签时必须先导入标签库才能使用
4个作用域:
request:同一个请求有效,即浏览器请求一次服务端都会产生一个request对象,不同请求request对象不同。
session:同一个会话有效,第一次请求到关闭浏览器或30分钟(默认)未做任何操作时,session失效。在一个会话中都是同一个session
application(servletContext):在整个服务器中都只有一个,从服务器开启到服务器关闭有效。
pageContext:当前jsp页面有效,可以获取其他8个内置对象。
7个动作
<jsp:forward page="xx.jsp"></jsp:forward>服务器内部转发
<jsp:param name="name" value="xxx"/>参数,与jsp:forward搭配携带参数
<jsp:include page="xx.jsp"></jsp:include>/<jsp:include file="ss.jsp"></jsp:include>;动态包含,包含结果页面,类似于<iframe src=""/>/静态包含:包含源代码
<jsp:useBean id="ss" class="com.xx.vo"/>;创建对象
<jsp:setProperty name="" value=""/>;设置属性相当于setter方法
<jsp:getProperty property="" name=""/>;相当于getter方法
<jsp:plugin code="" codebase="" type="bean"></jsp:plugin>//很少用,是执行一个applet或Bean,有可能的话还要下载一个Java插件用于执行它.。执行一个applet或Bean,有可能的话还要下载一个Java插件用于执行它.
8个监听:request两个、session四个、application两个
Listener接口
|
Event类
|
ServletContextListener
|
ServletContextEvent
|
ServletContextAttributeListener
|
ServletContextAttributeEvent
|
HttpSessionListener
|
HttpSessionEvent
|
HttpSessionActivationListener
|
|
HttpSessionAttributeListener
|
HttpSessionBindingEvent
|
HttpSessionBindingListener
|
|
ServletRequestListener
|
ServletRequestEvent
|
ServletRequestAttributeListener
|
ServletRequestAttributeEvent
|
9个内置对象:
编号 | 对象 | 所属类 |
1 | page | java.lang.Object,相当于this |
2 | out | javax.servlet.jsp.JspWriter |
3 | exception | java.lang.Throwable |
4 | response | javax.servlet.http.HttpServletResponse |
5 | config | javax.servlet.ServletConfig |
6 | request | javax.servlet.http.HttpServletRequest,作用域 |
7 | session | javax.servlet.http.HttpSession,作用域 |
8 | application | javax.servlet.ServletContext,作用域 |
9 | pageContext | javax.servlet.jsp.PageContext,作用域 |
jstl标签库:
使用前需要先导入标签库:<%@ taglib prefix="c" uri=""http://java.sun.com/jsp/jstl/core%>
常用的标签库有:
<c:></c:>:核心标签:if、foreach、set、out等
<fmt:></fmt:>:格式化标签:formatDate、formatNumber等
<sql:></sql>:运行sql标签
<xml:></xml>:xml标签
<fn:></fn>jstl函数split()、substring()等<c:set var="string1" value="www runoob com"/> <c:set var="string2" value="${fn:split(string1, ' ')}" />
自定义标签:继承(extends)TagSupport类。
EL表达式:${ }
获取作用域中的值${requestScope.data}:指定域/${data}:不指定域,从小域开始查询到大域
${param.name}//获取参数
${requestScope.data[0].name}数组
${pageContext.request.contextPath}//获取项目上下文路径
10.Servlet:JSP中将视图(HTML代码)和java代码分离开来,servlet为纯java代码
一个请求到响应的过程:客户买鞋:1.客户告诉前台需要多少码的鞋、什么颜色等(请求参数),2.前台得知客户的需求(controller接收参数)告知服务员(service)服务员再告诉仓库管理员(dao),仓库管理员找到匹配的鞋往前递,直到给客户(浏览器)。
servlet的定义:继承(extends)HttpServlet,重写doGet、doPost方法,在web.xml配置servlet和url-pattern(拦截路径)。servlet为控制层(controller),所谓控制层即控制流程走向(相当于前台客服)
servlet类编写:必须继承HttpServlet(适配器模式,必须属于HttpServlet类才能当成是一个servlet)
package note; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取参数 String action = req.getParameter("action"); //验证合法性 if(action==null && action.matches("^[a-zA-Z]//w{9,15}$")==false){ //不通过则转至登陆页面 resp.sendRedirect("login.jsp"); return; } //验证通过 //调用service层,service调用dao查询数据库得到数据,并将数据存至作用域中 req.setAttribute("data", "data"); //转发至对应的页面 req.getRequestDispatcher("index.jsp").forward(req, resp);//把req对象作为参数传至jspServlet } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); } }
web.xml配置:
<web-app version="3.0" 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_3_0.xsd"> <!--servlet--> <servlet> <servlet-name>haha</servlet-name> <servlet-class>com.xxx.controller.MyServlet</servlet-class> </servlet> <!--servlet映射--> <servlet-mapping> <servlet-name>haha</servlet-name> <!--拦截请求路径--> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
servlet的生命周期:默认在第一次请求时创建,服务器关闭时销毁,但是可以通过配置web.xml使servlet在服务器开启时创建<load-on-startup>1</load-on-startup>,数字大于-1即可
转发与重定向:
服务器内部转发:只能转发到本服务器存在的资源,在转发过程中request对象为同一个,也就是说是同一个请求
request.getRequestDispatcher("xx.jsp").forward(request,response);
重定向:两个请求,第一次请求:浏览器请求服务器,服务器响应,叫浏览器去请求别的路径,然后浏览器去请求别的路径了(第二次请求)
response.sendRedirect("xxx.jsp");
servlet、listener、filter(过滤器)都是需要实现对应接口,并且在web.xml中配置,在服务器(tomcat)启动时会解析web.xml
cookie、session:http为无状态协议(请求过后下次再请求不会记得请求的是谁),为了解决这个无记忆问题,所以就有了cookie和session。
cookie:存在于客户端(浏览器),服务器通过创建cookie,然后将cookie响应回浏览器,浏览器将cookie写到磁盘(文件)中,每次请求网站时,会将属于这个网站的cookie传给网站服务器,服务器接收cookie,获取cookie中的值,做其他操作。
session:存在于服务器端,存在服务器内存中,每个浏览器请求服务器,服务器都会创建一个session,在一个会话中只有一个session,浏览器与服务器建立会话会有一个sessionID,浏览器将sessionID传给服务器,服务器通过sessionID找到对应的session对象。
过滤器:Filter,创建一个类implements(实现)Filter接口,重写doFilter方法,在web.xml配置filter和filter-mapping
package note; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class MyFilter implements Filter{ @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //拦截过滤 //放行 chain.doFilter(request, response); } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
<!-- 编码过滤器 --> <filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
过滤器可用来进行权限、登录状态等的拦截,还可以用来解决编码问题