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
    客户端<------>过滤器<------>服务器
     
     
  • 相关阅读:
    Java 第二题
    第6次作业--static关键字、对象
    20194643 自动生成四则运算第一版报告
    软件工程 第一次作业
    MySQL主从复制与读写分离原理
    垂直拆分、读写分离、水平拆分(分库分表)详解
    MySQL InnoDB 索引原理
    MySQL架构体系&SQL查询执行全过程解析
    最全MySQL锁详解:表/行/页锁、共享/排它锁、悲观/乐观锁等
    MySQL事务ACID与隔离级别详解
  • 原文地址:https://www.cnblogs.com/xiao-ji-xiang/p/10028703.html
Copyright © 2011-2022 走看看