zoukankan      html  css  js  c++  java
  • Java web

    1.动态网页,静态网页
    2.BS,CS架构
    3.Tomcat 服务器 解压目录
    bin:可执行文件 startup.bat shutdown.bat
    conf:配置文件 server.xml
    lib:日志文件
    temp:零时文件
    webapps:可执行项目
    work:存放.java,.class
    4.配置Tomcat
    虚拟路径:a:server.xml Host中添加<Context docBase = "" path = ""/> docBase 实际路径 path 虚拟路径
    b:Catalina/localhost中新建“项目名”.xml ,写同样的配置语句
    5.页面元素:
    a:html,JavaScript,脚本语言
    b.指令:<%@ page %>
    language:jsp使用的脚本语言
    import:导入类
    pageEcoding:jsp文件自身的编码
    contentType:页面编码
    c:注释 html注释<!-- --> java // jsp <%-- --%>
    6.jsp内置对象 (9个不需要new也可以用)
    out:向客户端输出内容

    pageContext:
     
    request:请求对象。包含客户端向服务器发送的消息
    方法:String getParameter(String key)  String [] getParameterValues(String key)
    void setCharacterEncoding(String coding):设置post方式请求编码 默认utf-8(tomcat8以后)
    getRequestDispatcher("a.jsp").forward(request,response) 请求转发跳转,数据不会丢失,但是地址栏不会变
    getServerContext() 获取当前项目的ServletContext对象
    提交方式:get,post
    get会将请求信息暴露在地址栏,post不会,get最多能容纳5kb信息,信息过多会报错,涉及大文件必须使用post方式
    get方式出现乱码:修改server.xml中URIEcoding
    post方式出现乱码:通过setCharacterEncoding方法设置编码
     

    response:响应对象。服务端对客户端的响应消息
    方法:
    void addCookie():服务端向客户端增加一个cookie对象
    void sendRedirect(String location) throws IOException:页面重定向,数据丢失
    void setContentType(String type):设置服务端响应的编码
     
     
    session:
    Cookie(客户端的,不是内置对象):Cookie由服务端生成,再发送给客户端保存,相当于本地缓存,可以提高访问效率,由键值对组成
    服务端:response.addCookie()-->转发请求或者重定向-->客户端:request.getCookie();
    session(会话,服务端,内置对象):当客户端第一次访问服务端时会为客户端生成一个session对象,该对象有一个sessionId,然后服务器会将该sessionId复制一份保存在Cookie中,name为JSESSIONID,并将该Cookie添加到response中,返回客户端;也就是说每一个客户端在第一次访问后都有一个唯一的JSESSIONID与服务器的session相对应
    Cookie与session的区别:
    1.Cookie在客户端,session在服务端,session更安全
    2.Cookie中保留String,session中以Object保存
    3.Cookie不是内部对象,需要new才能使用,session不与要new
    application:全局对象
    config:
    page:
    exception:
    四种范围对象:由小到大   作用域
    pageContext:页面对象(也称)  当前页面
    request:请求对象    同一次请求(请求转发是同一次请求,重定向不是)
    session:会话对象    同一次会话
    application:全局对象   全局(整个项目运行期间)
    共有方法:Object getAttribute(String name) void setAttribute(String name,Object value) 添加或者修改
    void removeAttribute(String name)
    对象范围越大性能开销越大
     
    7.JDBC:java database connectivity
    Java-->JDBC API-->JDBC DriverMannager-->各种数据库驱动Driver-->各种DATABASE
    JDBC API:提供各种操作访问接口,Connection Statement PreparedStatement ResultSet
     0,初始化驱动
     Driver
     1,建立连接
     DriverMannager Connection
     Connection connection = DriverMannager.getConnection(连接字符串,用户名,密码)
     2,发送SQL语句
     ---Statement
     Statement s = connection.createStatement();
     s.executeUpdate(String sql);
     ResultSet set = s.executeQurey(String sql);
      
     ---PreparedStatement 
     PreparedStatement ps = connection.prepareStatement(String sql);
     ps.setXXX();
     ps.executeUpdate();
     ps.execureQuery();
     
     ---CallableStatement
     CallableStatement cs = connection.prepareCall(Procedure/Function);
     Procedure:{ call procedure(?,?,?)}
     cs.setXXX();
     cs.registerOutParameter(int index,Type type);
     cs.execute();
     cs.getXXX();
     Function:{?= call function(?,?)}
     cs.setXXX();
     cs.registerOutParameter(int index,Type type);
     cs.execute();
     cs.getXXX();
     
     3,返回处理结果
     ResultSet
    JDBC DriverMannager:管理不同的数据库驱动
    数据库驱动:由各个数据库开发商提供,用来直接操作数据库
    数据库   驱动类    连接字符串
    Oracle  oracle.jdbc.OracleDriver  jdbc:oracle:thin:@localhost:1521:数据库名
    MySQL  com.mysql.jdbc.Driver  jdbc:mysql://localhost:3306/数据库名
    SQLServer com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc:microsoft:sqlserver:localhost:1433;databasename = 数据库名
    8.数据库处理CLOB[TEXT]/BLOB类型
    a.存储文件路径
    b.CLOB:大文本数据(小说) BLOB:二进制文件
    ----CLOB
    用PreparedStatement,用占位符?表示小说
    ps.setCharacterStream(int index,Reader reader,file.length());写入的是文件流
    set.getCharacterStream(String name);读取处Reader
    ---BLOB
    ps.setBinaryStream(int index,InputStream in,file.length());写入的是文件流
    set.getBinaryStream(String name);读取出Input Stream
    9.jsp访问数据库
    导包:java:1.复制jar包 2.add to build path
    jsp:只需要复制到工程目录的WEB-INF/lib下
    10.JavaBean
    在jsp文件中引用的Java类,满足两点:1.public修饰的类,public的无参构造方法 2.所有属性(如果有)都是private,并提供相应的getter和setter(boolean的getter可以是isXXX)
    优点a.减轻jsp文件的复杂度 b.提高代码复用率
    分成两类:
    1.封装业务逻辑javabean
    2.封装数据javabean
    11.MVC设计模式
    M:Model 模型
    各种功能,如登陆验证 ,用javabean实现
    V:View 视图
    负责页面显示,人机交互,html,css,jsp,javaScript
    C:Controller 控制器
    接收各种请求,将各种请求提交到模型;模型处理完毕后,再将处理后的结果返回给请求处,用servlet实现
    基本过程:View发出请求-->Controller选择请求对应的模型-->使用特定的模型进行处理-->返回处理结果-->选择对应的View
    12.Servlet :
    手工版本:
    1.必须继承javax.servlet.http.HttpServlet
    2.重写其中的doGet()和doPost()方法
    3.如果servlet是2.5版本,必须配置web.xml
    在web.xml中添加以下信息:
    <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>com.xiao.myservlet.MyServlet</servlet-class>
      </servlet>
     
      <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/MyServlet</url-pattern>
     
      </servlet-mapping>
    请求过程:请求---> <url-pattern>---> <servlet-mapping>的<servlet-name>---> <servlet>的<servlet-name>---> <servlet-class>--->对应类
       如果是3.0版本,必须添加@WebServlet(<url-pattern>)注解
    @interface WebServlet{
     String value();
    }
    借助eclipse自动生成
    相对目录:WebContent,src(构建目录)
    /:根路径
    web.xml中的/代表项目根路径localhost:8080/projectname/
    jsp中的/代表服务器的根路径:localhost:8080/

    13.Servlet生命周期
    加载------初始化----------服务----------销毁----------卸载
    加载和卸载:Servlet容器自动处理
    初始化:init方法,该方法只会在Servlet容器被加载并实例化后调用一次,默认在访问Servlet时才会执行,可通过load-on-startup设置TomCat启动时自动启动;2.5修改web.xml  3.0在注解中添加loadOnStartup的值
    服务:通过doGet和doPost方法
    销毁:destroy方法,Servlet被系统回收时执行,关闭Tomcat时关闭

    14.初始化参数
    ServletContext(application)初始化参数:在web.xml中添加<servlet-param>
    Servlet:初始化参数:2.5在<servlet>中添加<init-param>;3.0在Servlet类注解中添加initParams的值

    15.三层架构
    表示层:USL,User Show Layer(视图层)
    与用户交互,并根据用户请求执行各种逻辑操作
    业务逻辑层:BLL,Business Logic Layer(Service层)
    为各种原子操作添加逻辑
    数据访问层:DAL,Data Access Layer(Dao层)
    访问数据库,原子性操作
    16.优化
    1.首先编写对应方法的接口,再写实现类,命名规范:接口 IXxxDao,IXxxService 实现类 XxxDaoImpl,XssServiceImpl,面向接口编程:父接口引用指向实现类对象
    2.创建工具类,Utils,重构函数
    17.分页查询
    通过limit,每次查询一页的数据,建工具类page
    18.文件上传与下载
    文件上传:需要两个jar包,apache的commons-fileupload和commons-io包
    步骤:为request和response设置编码-----通过isMutilPartContent判断是否请求是否包含文件-------如果有文件的话先创建DiskFileItemFactory的对象factory,将factory传入ServletFileUpload的构造方法创建upload对象-----通过upload的parseRequest解析请求得到items的list,区分文件和普通字段-----通过通过文件item的write(file)方法将request中的文件写入file中
    注意:可以通过factory的setSizeThrehold(int Size)方法设置临时文件缓冲区大小文件的大小限制,通过setRepository设置临时文件地址,通过文件后缀限制文件类型,通过upload的setMaxFileSize(long size),这些操作必须在解析前执行
    文件下载:不需要额外jar包
    步骤:设置响应头
    response.setHeader("content-type", "application/octet-stream");
    response.setHeader("content-Disposition", "attachment;filename=" + fileName);
    获取输入流 InputStream in = getServletContext().getResourceAsStream("/res/" + fileName);
    获取输出流 OutputStream out = response.getOutputStream();
    向输出流中写入数据 in--->out
    注意:如果文件名有中文的话会乱码,对于不同的浏览器有不同的解决方案,通过request的请求头获得浏览器信息
    对于edge:response.setHeader("content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
    对于firefox:response.setHeader("content-Disposition", "attachment;filename==?utf-8?b?" + new String(Base64.encodeBase64(fileName.getBytes("utf-8"))) + "?=");

    19.EL表达式 Expression Language
    ${xxx.xxx} 或 ${xxx[xxx]}
    1.访问范围对象
    pageScope   requestScope  sessionScope  applicationScope                                                                             
    2.访问环境对象
    param   paramValues cookie  header  headerValues
    3.获取jsp默认对象
    通过pageContext.xxx

    20.JSTL标签库  比EL更强大  需要两个jar包:jstl和standard
    引入taglib
    <%@ taglib uri = "..." prefix = "c" %>
    核心标签库:通用标签库、条件标签库、迭代标签库
    a、通用标签库
    1.给普通变量赋值(修改,添加)
    <c:set  var   value     scope(四个范围对象) />
    2.给范围对象的属性或者map对象的key赋值(对象必须存在,修改)
    <c:set target(对象)  property(属性或key)  value />
    b、输出 
    <c:out value=""  default = "" escapeXml = "true or false"/> 如果value为null,则显示默认值,escapeXml为true时将xml语句显示本来的文字,否则当成xml语句处理
    c、删除
    <c:remove var=""  scope = "" />
    d、选择
    单重if
    <c:if test = "${10>2}">显示内容</c:if>
    多重if
    <c:choose>
     <c:when test = "...">  </c:when>
     <c:when test = "...">  </c:when>
     <c:when test = "...">  </c:when>
     <c:otherwise>   </c:otherwise>
    </c:choose>
    注意test中的空格,会影响结果
    e、循环  遍历
    <c:foreach begin = "" end = "" step = "" varStatus = ""status> 
     ${status.index}(序号)
    </c:foreach>
    <c:foreach var = "name" item = "array">
     ${name}(遍历array)
    </c:foreach>
    21、过滤器 fliter
    客户端<------>过滤器<------>服务器
     
     
  • 相关阅读:
    BZOJ1527 : [POI2005]Pun-point
    2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016)
    2016-2017 ACM-ICPC Northwestern European Regional Programming Contest (NWERC 2016)
    NAIPC-2016
    BZOJ2498 : Xavier is Learning to Count
    ACM ICPC Vietnam National Second Round
    XVI Open Cup named after E.V. Pankratiev. GP of Ukraine
    XVI Open Cup named after E.V. Pankratiev. GP of Peterhof
    HDU5509 : Pattern String
    BZOJ4583 : 购物
  • 原文地址:https://www.cnblogs.com/xiao-ji-xiang/p/10028703.html
Copyright © 2011-2022 走看看