java(EE) 中级

javaEE所涉及的知识有:

    java(SE)基础、数据库、html、css、js、htmldom、dtd、schema、xml、xml解析(dom解析、SAX解析、dom4j解析)、web服务器(tomcat)、jsp、servlet、js框架、前端框架(bootstrap)

 

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中万物皆对象,包括函数也是一个对象

  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:可以直接使用的对象

  1. Window:window
  2.  Navigator:navigator
  3. Screen:screen
  4.  History:history;hostory.back();//返回上一步
  5. 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

   tomcat目录结构:

    

    backup:备份

    bin:启动关闭服务的程序都在这,一般的软件启动程序都在这个目录

    conf:配置,tomcat相关配置文件

    lib:tomcat相关jar包

    logs:tomcat日志

    temp:临时数据

    webapps:发布的项目都在这个目录下,每个项目的WEB-INF目录都是安全目录,不能通过浏览器直接访问,只能服务器内部转发进行访问

    发布的web项目的目录:

    

     WEB-INF:安全目录,浏览器不能直接访问,需要通过服务器内部转发来访问(request.getRequestDispatcher("xxx.jsp").forward(request,response);)

     WEB-INF下的目录:

    

       classes:编译的java文件  .class

       lib:项目导入的jar包

  work:tomcat工作目录,项目中的jsp翻译成的java文件然后编译成class文件都在这里

    

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>&nbsp;<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\">&times;</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>原密码&nbsp;</span><input type=\"password\" id=\"oldPwd\"></li>\r\n");
      out.write("        \t\t<li><span>新密码&nbsp;</span><input type=\"password\" id=\"newPwd\"></li>\r\n");
      out.write("        \t\t<li><span>确认密码&nbsp;</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>

  过滤器可用来进行权限、登录状态等的拦截,还可以用来解决编码问题

  1.写一个包装httpServletRequest对象的类

package note;

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class EncodingRequest extends HttpServletRequestWrapper{

    public EncodingRequest(HttpServletRequest request) {
        super(request);
    }

    @Override
    public String getParameter(String name) {
        
        String value = super.getParameter(name);
        if(value==null){
            return value;
        }
        try {
            value = new String(value.getBytes("iso-8859-1"),"utf-8");//转码
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return value;
    }
    
    
}

  2.写一个过滤器filter

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;
import javax.servlet.http.HttpServletRequest;

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 {
        //设置请求的编码
        request.setCharacterEncoding("UTF-8");
        HttpServletRequest req = (HttpServletRequest)request;
        EncodingRequest eq = new EncodingRequest(req);//包装
        //放行
        chain.doFilter(eq, response);//注意传的是包装类eq
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        
    }

}

  

  ajax、文件上传、文件下载、验证码

    ajax:asynchronized js and xml(异步的js和xml),使用ajax发送的是异步的请求,服务器响应回数据而不是整个页面,通过a标签、form表单、浏览器直接输入地址都是把响应当成一个页面在浏览器显示。

    原生ajax:XMLHttpRequest 对象用于在后台与服务器交换数据。

  客户端发送请求和接收响应:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script>
function loadXMLDoc()
{
    var xmlhttp;
    if (window.XMLHttpRequest)
    {
        //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        // IE6, IE5 浏览器执行代码
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    
    xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
    xmlhttp.send();
         //回调函数,接收响应回来的数据
         xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
    }
}
</script>
</head>
<body>

<div id="myDiv"><h2>使用 AJAX 修改该文本内容</h2></div>
<button type="button" onclick="loadXMLDoc()">修改内容</button>

</body>
</html>    

  服务器处理请求和响应请求:

package note;

import java.io.IOException;
import java.io.PrintWriter;

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");
        PrintWriter out = resp.getWriter();//获取输出流
        out.print("我是ajax的响应");//输出到客户端
        out.flush();
        out.close();
        }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doGet(req,resp);
    }
    
    
}

 

文件上传:

  页面form表单:

<html>
<body>
<h2>Hello World!</h2>
<form action="myServlet" enctype="multipart/form-data" method="post">
    <!-- 必须有enctype属性,必须是post提交方式 -->
    <input type="file" name="file"/>
    <input type="submit" value="上传"/>
</form>
</body>
</html>

  服务器接收(需导入第三方jar包):

package note;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class MyServlet extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        
        }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        
            DiskFileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            try {
                List<FileItem> list = upload.parseRequest(req);//解析request
                //遍历list
                for(FileItem item :list){
                    //如果是普通表单场(text等)
                    if(item.isFormField()){
                        String param = item.getString();
                    }else{//如果是文件类型
                        item.write(new File("D://"));//写入磁盘
                    }
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }
    
    
}

 

  文件下载:<a></a>标签、form表单两种方式

    前端页面:

<!--方式1-->
<a href="myServlet">文件下载</a>

<!--方式2-->
<form action="myServlet">
    <input type="submit" value="文件下载"/>
</form>

<!--以上都是经过controller处理的文件下载-->


<!---直接请求文件资源,点击链接响应回一张图片,右击另存为保存图片-->
<a href="http://localhost:8080/note/static/images/xx.png">下载图片</a>

   所有有路径(链接)的都是发送请求从服务器获取:

  <script src="xxxx.js"/>、<link href="css.css"></link>等都是发请求到服务器获取

 

  文件下载服务器端:设置响应头为(下载类型)

         //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型  
         response.setContentType("multipart/form-data");  
         //2.设置文件头:最后一个参数是设置下载文件名(假如我们叫a.pdf)  
         response.setHeader("Content-Disposition", "attachment;fileName="+"a.pdf");  
         //方式1,通过request转发,服务器自动响应文件           
         request.getRequestDispatcher("xxx.pdf").forward(request,response);
         //方式2,手动将文件响应回客户端
         ServletOutputStream out2 = response.getOutputStream();
         FileInputStream in = new FileInputStream("xxx.jpg");//输入流
         byte[] b = new byte[1024*1];//缓冲区
         int n;
         while((n=in.read(b))!=-1){//读取字节到byte数组中
             out2.write(b, 0, n);//将byte数组输出到浏览器
         }
         out2.flush();//刷新缓存
         out2.close();//关闭
         in.close();//关闭

 

  验证码:一个生成验证码的servlet,在生成随机数时,将随机数存入session中,<img src="imgcodeServlt?aaa=<%= new Date().getTime()%>"/>,点击登陆时获取用户输入的验证码与session中的对比,加个参数为了防止浏览器缓存无法刷新图片,加个不重复的参数,则相当于不同的请求

package note;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ImageServlet  extends HttpServlet{
    public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
        //这个方法实现验证码的生成
        BufferedImage bi=new BufferedImage(68, 22,BufferedImage.TYPE_INT_RGB);//创建图像缓冲区
        Graphics g=bi.getGraphics(); //通过缓冲区创建一个画布
        Color c=new Color(200,150,255); //创建颜色
        /*根据背景画了一个矩形框
         */
        g.setColor(c);//为画布创建背景颜色
        g.fillRect(0, 0, 68,22); //fillRect:填充指定的矩形

        char[] ch="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();//转化为字符型的数组
        Random r=new Random();
        int len=ch.length;
        int index; //index用于存放随机数字
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<4;i++)
        {
            index=r.nextInt(len);//产生随机数字
            g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));  //设置颜色
            g.drawString(ch[index]+"",(i*15)+3, 18);//画数字以及数字的位置
            sb.append(ch[index]);
        }
        request.getSession().setAttribute("piccode",sb.toString()); //将数字保留在session中,便于后续的使用
        ImageIO.write(bi, "JPG", response.getOutputStream()); //将生成的图片写到响应流(客户端)
    }
}

 

11.js框架(jquery):对js进行封装,jquery封装了很多函数,我们可以直接使用,使用前需要导入jquery,熟悉常用的jquery方法 append()、each()等

  <script src="jquery.js"/>

  jquery的ajax();

$.ajax({
     type:"post",
     url:"xxservlet",
     data:{name:"xx",age="18"},
     dataType:"json",
     async:false,//同步:在ajax请求到响应过程中不执行其他函数
     success:function(data){
            alert("返回的数据:"+data);
     }
});

 

12.bootstrap:css框架,已经写好的样式,我们只需在标签中加对应的类或id即可

这些样式都是bootstrap写好的.class{

       width:100px;

       ......

}

<button class="btn btn-sm searchbtn" type="button" id="search"><i class="fa fa-search" aria-hidden="true"></i>&nbsp;<span class="bold">搜索</span></button>

  

 

 最后:所有流程都是需要事件来触发执行,比如刷新table、更新等。流程:某一个操作(点击事件)发送请求(携带参数)到服务器,服务器获取参数执行查询数据库获取数据,然后将数据或者页面响应回浏览器展示。

  

    

    

  

  

    

    

  

posted @ 2017-09-20 16:29  咸鱼的理想  阅读(442)  评论(0编辑  收藏  举报