上课笔记

第一章 JSP基础

1.1.URL(统一资源定位符)

1.1.1 组成

语法: 协议://ip地址:端口号/项目资源地址.

: http://localhost:8080/news/index.html

1.2.Tomcat的目录结构

  • bin //存放各种平台下用于启动和停止Tomcat的脚本文件
  • conf //存放Tomcat服务器的各种配置文件
  • lib //存放Tomcat服务器所需的各种JAR文件
  • logs //存放Tomcat的日志文件
  • temp //Tomcat运行时用于存放临时文件
  • webapps //当发布Web应用时,默认情况下会将Web应用的文件存放于此目录中
  • work //Tomcat把由JSP生成的Servlet放于此目录下
  • 第一步: 找到conf/server.xml
  • 第二步: 修改port属性

1.3.修改tomcat的默认端口号

<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

1.4.Web项目的目录结构

  • / : 根目录,WebContent
  • /WEB-INF: 下面的文件客户端不能直接访问.(受保护的)
  • /WEB-INF/classes: 放到class文件
  • /WEB-INF/lib: 放jar包
  • 第一步: 右键启动项目 把workspace中项目下面的WebContent的内容 复制到指定的tomcat的项目的下面.(发布,部署) 真正的启动tomcat
  • 第二步: 访问项目(访问的是tomcat中的项目) http://localhost:8080/项目名/资源名

1.5.部署启动过程

1.6. 配置访问页面(默认访问页面)

/WEB-INF/web.xml中. 修改welcome-file项的值.
例:<welcome-file>abc.html</welcome-file>

1.7.page指令

语法:<%@ page 属性=""... %>

1.7.1 常见属性

language ="java"
import //导入的jar包
contentType //jsp编码格式

1.8.小脚本和表达式

1.8.1 小脚本(普通脚本)

语法: <% java代码 %>
: <% int a =1 %>

1.8.2 表达式(输出脚本)

语法: <%=表达式 %>

1.8.3 声明脚本

语法:<%! 方法 %>

1.9. JSP中的注释

1.9.1 JSP注释

语法: <%-- 内容 --%>

<%--jsp注释 --%>

<%!

//脚本注释

//int a = 10;

public String format(Date d){

SimpleDateFormat sdf =

new SimpleDateFormat("yyyy-MM-dd");

return sdf.format(d);

}

%>

1.9.2 脚本注释

<%!

//脚本注释

//int a = 10;

public String format(Date d){

SimpleDateFormat sdf =

new SimpleDateFormat("yyyy-MM-dd");

return sdf.format(d);

}

%>

1.10. JSP执行过程

  • 三个阶段

翻译阶段

编译阶段

执行阶段

第一次访问---->服务器jsp--->翻译成java文件-->编译成class-->执行class文件

第二次访问--->服务器jsp-->执行class文件

注意 :如果对JSP文件进行了修改,Web容器会重新对JSP文件进行翻译和编译

1.11. 常见错误

1.11.1 未启动tomcat

1.11.2 未部署Web应用

1.11.3 URL输入有误

错误http://localhost:8080/jsp/webConent/0101.jsp

1.11.4 目录不能访问(WEB-INF)

错误http://localhost:8080/jsp/WEB-INF/0101.jsp

第二章 JSP数据交互

2.1. JSP的9种内置对象

request、response、session、application、out、pagecontext、config、page、exception

2.2. request对象

2.2.1 常用方法

  • String getParameter(String name) //根据表单name属性值,获取对应的值.
  • String[] getParameterValues(String name) //根据表单name属性值获取相同name属性的值
  • void setCharacterEncoding(String charset) //指定请求的编码
  • RequestDispatcher getRequestDispatcher(String path)//返回RequestDispatcher对象,该对象的forward( )方法用于转发请求
  • test.html

2.2.2 案列

<form name="form1" method="post" action="test.jsp">

    <table border="0" align="center">

      <tr> <td>用户名</td><td> <input type="text" name="name"></td></tr>

      <tr><td>密码</td><td > <input type="password" name="pwd"> </td></tr>

      <tr> <td>信息来源</td><td> 

          <input type="checkbox" name="channel" value="报刊">报刊

          <input type="checkbox" name="channel" value="网络">网络

          <input type="checkbox" name="channel" value="朋友推荐"朋友推荐

          <input type="checkbox" name="channel" value="电视"电视

        </td></tr>

       <!--省略提交、取消按钮 -->

       <tr>

        <td><input type="submit" value="提交"/></td>

       </tr>

    </table>

</form>

  • test.jsp

<%

    //设置请求编码格式

    request.setCharacterEncoding("utf-8");

    String name = request.getParameter("name");

    String pwd = request.getParameter("pwd");

    String[] values = request.getParameterValues("channel");

%>

姓名:<%=name %> <br/>

密码:<%=pwd %> <br/>

<%

    for(String str: values){

     out.print(str);

    }

%>

2.3 乱码解决方式

2.3.1 POST提交方式乱码

//在获取值前设置请求编码格式 request.setCharacterEncoding("utf-8");

2.3.2 GET提交方式乱码

  • 第一种(不推荐使用) :

name = new String(name.getBytes("ISO-8859-1"),"UTF-8");

  • 第二种(推介使用) 修改tomcat的server.xml文件(加上URIEncoding="UTF-8")

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" />

2.4 response对象

2.4.1 封装了应答数据对象

2.4.2 常用方法

方法

作用

sendRedirect(String)

用于转发

2.5 重定向和转发

2.5.1 重定向

  • 语法:response.sendRedirect()

<%

    request.setCharacterEncoding("utf-8");

    String name = request.getParameter("name");

    String pwd = request.getParameter("pwd");

        if("admin".equals(name)&&"123456".equals(pwd)){

        // todo 跳到成功页面 重定向

        response.sendRedirect("succes.jsp");

    }else{

        //todo 跳到登录页面

        response.sendRedirect("login.html");

    }

%>

2.5.2 转发

  • 语法: request.getRequestDispatcher("路径").forward(request, response);

request.setCharacterEncoding("utf-8");

String name = request.getParameter("name");

String pwd = request.getParameter("pwd");

if("admin".equals(name)&&"123456".equals(pwd)){

    // todo 跳到成功页面 重定向

    //response.sendRedirect("succes.jsp");

    //转发

    request.getRequestDispatcher("succes.jsp").forward(request, response);

}else{

    //todo 跳到登录页面

    //response.sendRedirect("login.html");

    request.getRequestDispatcher("login.html").forward(request, response);

}

2.5.3 转发和重定向的区别

转发

重定向

转发是在服务器端发挥作用,将同一请求在服务器资源之间进行传递

重定向是在客户端发挥作用,通过发送一个新的请求实现页面转向

客户端浏览器的地址栏不会显示转向后的地址

在地址栏中可以显示转向后的地址

2.6 session(会话)

2.6.1 session和浏览器窗口

每个session对象都与一个浏览器窗口对应 ,重新开启一个浏览器窗口,可以重新创建一个session对象(一个窗口一个会话)

通过超链接打开的新窗口,新窗口的session与其父窗口的session相同

2.6.2 常用方法

方法名

作用

String getId()

获取sessionid

void setMaxInactiveInterval(int interval)

设定session的非活动时间

int getMaxInactiveInterval()

获取session的有效非活动时间(以秒为单位)

void invalidate()

设置session对象失效

void setAttribute(String key, Object value)

以key/value的形式保存对象值

Object getAttribute(String key)

通过key获取对象值

void removeAttribute(String key)

从session中删除指定名称(key)所对应的对象

2.6.3 登录验证

  1. 在登录成功时,设置标志

<%

    request.setCharacterEncoding("utf-8");

    String name = request.getParameter("name");

    String pwd = request.getParameter("pwd");

    if("admin".equals(name)&&"123456".equals(pwd)){

     //登录成功的标记

     session.setAttribute("flag", true);

     //设置非活动有效期

     session.setMaxInactiveInterval(60);

     // todo 跳到成功页面 重定向

     response.sendRedirect("succes.jsp");

     //转发

     //request.getRequestDispatcher("succes.jsp").forward(request, response);

    }else{

     //todo 跳到登录页面

     response.sendRedirect("login.html");

     //request.getRequestDispatcher("login.html").forward(request, response);

    }

%>

  1. 在增加时(其他业务处)验证

<%

    Object obj = session.getAttribute("flag");

    if(obj==null||(obj!=null&&(boolean)obj!=true)){

     response.sendRedirect("login.jsp");

     return ;

    }

%>

2.6.4 session对象失效

  • 手动设置失效:invalidate()
  • 超时失效
  1. 通过setMaxInactiveInterval( )方法,单位是秒
  2. 通过设置项目的web.xml或Tomcat目录下的/conf/web.xml文件,单位是分钟

<session-config>

    <session-timeout>10</session-timeout>

</session-config>

2.7 include指令

2.7.1 作用

可以将一些共性的内容写入一个单独的文件中,然后通过include指令引用该文件

2.7.2 语法

<%@ includ file="路径" %>

2.7.3 改造登录验证

  • 新建jsp

<%

    Object obj = session.getAttribute("flag");

    if(obj==null||(obj!=null&&(boolean)obj!=true)){

     response.sendRedirect("login.jsp");

     return ;

    }

%>

  • 修改原来的验证代码

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ include file="loginValidation.jsp" %>    

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<%

     //session取到值.如果为true.可以增加,否则调到登录页面.

     /*  Object obj = session.getAttribute("flag");

     if(obj!=null){

     Boolean flag = (Boolean)obj;

     if(flag){

     out.print("增加");

     }else{

     response.sendRedirect("login.jsp");

     }

     }else{

     response.sendRedirect("login.jsp");

     }*/

     out.print("增加");

    

%>

 

</body>

</html>

2.8 base标签

<base href="路径" /> 当前页面所有的请求路径,不是从当前目录去找,而是从base指定的路径下面去找.

第三章 JSP数据交互(二)

3.1 application

3.1.1 概念

  • application实现用户之间的数据共享

3.1.2 常用方法

方法名

作用

void setAttribute(String key,Object value)

以key/value的形式保存对象值

Object getAttribute(String key)

通过key获取对象值

String getRealPath(String path)

返回相对路径的真实路径

3.1.3 案例:统计网站访问次数的实现

<%

//每一次来+1

//获得原来数据.

Integer num =  (Integer)application.getAttribute("count");

//+1

if(null!=num){

num++;

}else{

num = 1;

}

//保存

application.setAttribute("count", num);

%>

 

<%= application.getAttribute("count") %>

<%= application.getRealPath("/cout.jsp") %>

 

3.2 对象的作用域

3.2.1 作用域的分类

  • page作用域(pageContext 对象 )
  • request作用域
  • session作用域
  • application作用域
  • page作用域指本JSP页面的范围
  • 案例:pageOne.jsp

3.2.2 page作用域

<%

String name ="zy";

pageContext.setAttribute("name", name);

%>

<%= pageContext.getAttribute("name") %>

 

<!-- 静态包含和 动态包含 -->

<%@ include file="pageTwo.jsp" %>

<%--

<%

pageContext.include("pageTwo.jsp");

%>

--%>

 

  • pageTwo.jsp

<%= pageContext.getAttribute("name") %>

3.2.3 request作用域

  • request作用域内的对象则是与客户端的请求绑定在一起(一次请求)
  • 案列: reqeustOne.jsp

<%

request.setAttribute("name", "zs");

//转发

//request.getRequestDispatcher("requestTwo.jsp").forward(request, response);

%>

<!--

<a href="requestTwo.jsp">跳到rquestTwo.jsp</a>

 -->

  • requestTwo.jsp

requestTwo

<%= request.getAttribute("name")%>

3.2.4 session作用域

  • 一次会话
  • 案列:sessionOne.jsp

<% 

session.setAttribute("userId", "123456");

%>

<%= session.getAttribute("userId") %>

<a href="sessionTwo.jsp">跳到sessionTwo.jsp</a>

  • sesisonTwo.jsp

<%= session.getAttribute("userId") %>

3.2.4 application作用域

  • 面对整个Web应用程序
  • 案列:applicationOne

<% 

application.setAttribute("userId", "123456");

%>

<%= application.getAttribute("userId") %>

<a href="applicationTwo.jsp">跳到application.jsp</a>

  • applicationTwo.jsp

<%= application.getAttribute("userId") %>

3.3 对象作用域小结

名称

说明

page作用域

在一个页面范围内有效,通过pageContext对象访问

request作用域

在一个服务器请求范围内有效

session作用域

在一次会话范围内容有效

application作用域

在一个应用服务器范围内有效

3.4 静态包含和动态包含

  • 静态包含:<%@ include file=”包含页面”%>
  • 动态包含<jsp :include page=“a.jsp”/>
  • 静态include是先把被包含文件的内容全部复制内嵌到包含文件中,再进行编译运行的。
  • 动态include执行到了include语句的时候才触发被包含文件的编译、执行,并实时把结果包含进来。
  • 动态include与静态include的最大不同在于:包含文件与被包含文件都是先编译执行,再包含

猜你喜欢

转载自www.cnblogs.com/huixinshaonian/p/9554165.html