tomcat解压目录

  • bin:可执行文件(startup.bat shutdown.bat)
  • conf:配置文件(server.xml)
  • lib:Tomcat依赖的jar文件
  • log:日志文件(记录出错等信息)
  • temp:临时文件
  • webapps:可执行的项目(开发的项目,放入该目录)
  • work:存放由jsp翻译成的java,以及编译成的class文件

配置tomcat

  • tomcat依赖java,必须配置JAVA_HOME
  • 配置CATALINA_HOME(tomcat根目录)
  • 每个项目都有WEB-INF文件夹 (WEB_INF里有classes文件夹、lib文件夹、web.xml)
  • 配置虚拟路径 Host标签添加Context标签 <Context docBase="" path=“”> (docBase实际路径 path 虚拟路径 )
  • 配置虚拟路径 也可在conf/Catalina/localhost 中新建”项目名.xml”中新增一行<Context docBase="" path=“”>
  • 虚拟主机

jsp执行流程

第一次
jsp -> java -> class(生成的java和class在work/Catalina/localhost(Host)/项目名/org/apcahe/jsp文件夹里)
第二次
直接访问class文件

jsp页面元素

  • 脚本Scriptlet

    <%   

    局部变量java语句
    %>

    <%!
    全局变量

    %>
    //输出表达式
    <%=%>
  • 注释

  • 指令

    • page 网页开头指定页面属性
      • language
      • import 导入类
      • pageEncoding:jsp 文件自身编码
      • contentType:浏览器解析jsp编码
    • include
    • taglib
  • jsp9大内置对象

    • out: 向客户端输出
    • pageContext:
    • request:请求对象,存储客户端向服务端发送的请求信息
      • String request.getParameter(string name) 获取请求参数
      • String[] request.getParameterValues(string name) 获取数组参数
      • void request.setCharacterencoding(string code) 设置编码
      • request.getServerletContext() 获取serverletcontext对象
      • request.getRequestDispatcher(“yemian”).forward(request,response) 请求转发
      • request.getcookies()
    • response: 相应对象
      • void response.addCookie(Cookie cookie) 服务端向客户端添加cookie
      • void sendRedirect(String location) 重定向 页面跳转 重定向 数据丢失
      • void setContenType(String type) 设置服务端相应编码
    • session: 会话 开始->关闭 是一次会话,客户端第一次请求服务端时,服务端会产生一个session对象,用于保存信息,并且每个session对象,都会有一个唯一的sessionId(用于区分其他session),服务端也会生成一个cookie,并且该cookie的name=JESSSIONID,value=服务端sessionId,然后 服务端会在 相应客户端的同事 将该cookie发送给客户端,至此,客户端就有了一个cookie(JSESSIONID),因此,客户端的cookie就可以和服务端的session一一对应
    • application: 全局对象
      • application.getContextpath() 获取虚拟路径
      • application.getRealPath() 绝对路径(虚拟路径对应的绝对路径)
    • config
    • page
    • exception

JDBC

JDBC API:提供各种操作访问接口 Connection Statement PrepareStatament ResultSet

  • DriverManager:连接
  • Connection:连接
  • Statement(PrepareStatament): 增删改查
  • CallableStatement:调用函数或存储过程
  • Result:返回结果

数据库驱动

  • Oracle ojdbc-x.jar oracle.jdbc.OracleDriver
  • Mysql mysql-connector-java-x.jar com.mysql.jdbc.Driver
  • SqlServer sqljdbc-x.jar com.microsoft.sqlserver.jdbc.SQLServerDriver
// 导入驱动类
Class.forName("驱动类");
// 与数据库建立连接
Connectio connection = DriverManager.getConnectioin(url,user,password);
// 执行sql
Statement stmt = connection.createStatement();
int i = stmt.executeUpdate("sql");//返回值标识 增 删改 几条数据
ResultSet rst = stmt.executeQuery("sql"); // 查询
stmt.close();
connection.close();

PrepareStatement操作

sql:”select * from xxx where id=?”
PrepareStatement.setString(1,”01”);
赋值操作setXXX(int index,XXX); 占位符

PrepareStatement与Statement区别

函数或存储过程

参数格式:

  • 存储过程 无返回值 有Out参数代替 {call 存储过程名(参数列表)}
  • 存储函数 有返回值 {call 村塾函数名(参数列表)}
    // 导入驱动类
    Class.forName("驱动类");
    // 与数据库建立连接
    Connectio connection = DriverManager.getConnectioin(url,user,password);
    CallableStatement csmt = connection.prepareCall("{call 存储过程名(参数列表)}");

    csmt.execute()

处理CLOB[text]/BLOB类型

  • CLOB: 大文本数据
  • BLOB: 二进制
  • 存放路径

Serverlet

serverlet2.5

  • extend Httpservelet
  • @Overide doGet(HttpRequest request,HttpResponse response)
  • @Overide doPost(HttpRequest request,HttpResponse response)
  • 配置web.xml
    <Serverlet>
    <serverlet-name>a</serverlet-name>
    <server-class>com.xx.xxx</serverlet-class>
    </Serverlet>
    <Serverlet-mapping>
    <serverlet-name>a</serverlet-name>
    <serverlet-url>/xxx</serverlet-url>
    </Serverlet-mapping>

serverlet3.0

  • extend Httpservelet
  • @Overide doGet(HttpRequest request,HttpResponse response)
  • @Overide doPost(HttpRequest request,HttpResponse response)
  • 在类上添加注解@WebServerlet(value=”/xxxx”)

serverlet生命周期

  • 加载(容器自动处理)
  • 初始化 init() 只运行一次
  • 服务(doget,dopost)
  • 销毁 destory() 关闭容器时运行,只运行一次
  • 卸载

getinitParameter(String name)

  • serverlet (super.getinitParameter(“xxxxx”))

    • 3.0 @WebServerlet(value=”xxx”,initParams={@WebInitParam()})
    • 2.5
      <Serverlet>
      <serverlet-name>a</serverlet-name>
      <server-class>com.xx.xxx</serverlet-class>
      <init-param>
      <param-name>serverletparamname</param-name>
      <param-value>value</param-value>
      </init-param>
      </Serverlet>
      <Serverlet-mapping>
      <serverlet-name>a</serverlet-name>
      <serverlet-url>/xxx</serverlet-url>
      </Serverlet-mapping>
  • 容器的值 (super.getServerletContenttext().getinitParameter(name=”xxxx”,value=”xxxx”))

    <context-param>
    <param-name>globalamname</param-name>
    <param-value>globalvalue</param-value>
    </context-param>

文件上传

  • commons-fifleupload.jar
  • commons-io.jar

El表达式

EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。

  • Page -> PageScope
  • Request -> RequestScope
  • Session -> SessionScope
  • Application -> ApplicationScope

jstl

  • 引入两个jar包 jstl.jar,standard.jar
  • 引入taglib <%@ taglib uri=””,prefix=”c”%>
  • 通用标签库
    • <c:set var=””, value=””, scope=””> 给某个变量赋值(scope:request,session,application) 相当于request.setAttribute()
    • <c:out>
  • 条件标签库
    • <c:if test=”” var=”result”> result是结果 true false
    • <c:choose><c:when test=””></c:when><c:otherwise></c:otherwise></c:choose>
  • 迭代标签库
    • <c:forEach begin=”” end=”” step=”” varStatus=”status”>${status.index}</c:forEach>
    • <c:forEach var=”students” items=”student”></c:forEach>

过滤器

  • implements Filter(javax.serverlet.Filter)
  • 重写init(),doFilter(),destory()
    system.out.print("请求拦截");
    chain.dofilter(request,response)
    system.out.print("响应拦截");
  • 配置web.xml
    <filter>
    <filter-name>xxxx</filter-name>
    <filter-class>XXX</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>xxxx</filter-name>
    <url-pattern>xxxx</url-pattern>
    </filter-mapping>

监听器

  • implements ServerletRequestListener,HttpSessionLister,SeverletContextListener
  • implements ServerletRequestAttributeListener, HttpSessionAttributeListener,SeverletContextAttributeListener 监听属性更改
  • 重写(监听开始结束)
  • 配置web.xml
    <listener>
    <listener-class>xxxxx</listener-class>
    </listener>

脑图