JavaWeb学习总结——JavaWEB_JSP(尚硅谷_佟刚老师)

1. JSP:

1). WHY:

JSP 是简Servlet 编写的一种技术,

JSP = Java(动态) + HTML(静态页面)

2). Java ServerPage: Java 服务器端网页. HTML 页面中编写 Java 代码的页面. .jsp

2). helloworld:

新建一个 JSP 页面, body 节点内的 <%%> 即可编写 Java 代码.

<body>

         <%

                  Date date = new Date();

                   System.out.print(date);

         %>

</body>

3). JSP 可以放置在 WEB 应用程序中的除了 WEB-INF 及其子目录外的其他任何目录中,JSP 页面的访问路径与普通 HTML 页面的访问路径形式也完全一样。

4). JSP的运行原理: JSP 本质上是一个 Servlet.

每个JSP 页面在第一次被访问时, JSP 引擎将它翻译成一个 Servlet 源程序, 接着再把这个 Servlet 源程序编译成 Servlet class 类文件.然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。

5). JSP 页面的隐含变量: 没有声明就可以使用的对象. JSP页面一共有 9 个隐含对象.

public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException {

    PageContext pageContext= null;

    HttpSession session= null;

    ServletContext application= null;

    ServletConfig config= null;

    JspWriter out= null;

    Object page= this;

      //使用  <% %> 编写的代码在此位置. 可以用到这 8 个隐含对象.

//(实际上还可以使用一个叫 exception 的隐含对象)

}

  . request:HttpServletRequest 的一个对象. *

String name = request.getParameter(“name”);

System.out.println(name);

(GET方法测试)http://localhost:8080/MYtest1/hello.jsp?name=guigu21

. response:HttpServletResponse 的一个对象

( JSP 页面中几乎不会调用 response 的任何方法.)

. pageContext:页面的上下文, PageContext 的一个对象. 可以从该对象中获取到其他 8 个隐含对象. 也可以从中获取到当前页面的其他信息. (学习自定义标签时使用它) *

. session:代表浏览器和服务器的一次会话, HttpSession 的一个对象. 后面详细学习. *

. application:代表当前 WEB 应用. ServletContext 对象. *

. config:当前 JSP 对应的 Servlet ServletConfig 对象(几乎不使用). 若需要访问当前 JSP 配置的初始化参数,需要通过映射的地址才可以。

映射 JSP:

<servlet>

    <servlet-name>hellojsp</servlet-name>

    <jsp-file>/hello.jsp</jsp-file>

    <init-param>

           <param-name>test</param-name>

           <param-value>testValue</param-value>

    </init-param>

  </servlet>

 

  <servlet-mapping>

    <servlet-name>hellojsp</servlet-name>

      <url-pattern>/hellojsp</url-pattern>        

  </servlet-mapping>

. out:JspWriter 对象. 调用out.println() 可以直接把字符串打印到浏览器上. *

换行方式:加<br>或者out.println(“<br><br>”);

. page:指向当前 JSP 对应的 Servlet 对象的引用, 但为 Object 类型, 只能调用 Object 类的方法(几乎不使用)

. exception:在声明了 page 指令的 isErrorPage="true" , 才可以使用. *

<%@ page isErrorPage="true" %>

pageContext, request, session, application(对属性的作用域的范围从小到大)

out, response, config, page

exception

6). JSP模版元素(HTML

JSP页面中的静态HTML内容称

7). JSP表达式<%= %>

提供了将一个 java 变量或表达式的计算结果输出到客户端的简化方式,

它将要输出的变量或表达式直接封装在<%= %>之中。

<%

         Date date = new Date();

         out.print(date);                ——>(与下述JSP表达式效果源码均相同)

%>

<%= date %>

8). JSP脚本片断<%  %>

指嵌套在<% %>之间的一条或多条Java程序代码。

多个脚本片断中的代码可以相互访问

<%

         String ageStr = request.getParameter("age");

      Integer age = Integer.parseInt(ageStr);

             if(age >= 18){

%>

             成人...

<%

      }else{

%>

             未成人...

<%

      }

%>

9). JSP 声明<%!方法%>

JSP 声明将 Java 代码封装在<%!和 %>之中,它里面的代码将被插入进 Servle t _jspService 方法的外面

将方法卸载<%!   %>之中

( JSP 页面中几乎从不这样使用)

10). JSP注释的格式:

<%-- JSP 注释 --%>

   <!-- HTML 注释 -->

区别: JSP 注释中的 Java 代码的不能执行.

 

2. 和属性相关的方法:

1). 方法

void setAttribute(String name, Object o):

设置属性

Object getAttribute(String name):

获取指定的属性

Enumeration getAttributeNames():

获取所有的属性的名字成Enumeration 对象

removeAttribute(String name):

移除指定的属性

2). pageContext, request,session, application 对象都有这些方法!

这四个对象也称之为域对象.

pageContext

仅限于当前 JSP 页面

request

仅限于同一个请求(时间测试-----代码中的Date

<a href =”attr_2.jsp”>  TO Attr2 Page  </a>

再转发的情况下可以跨页面获取属性值

session

限于一次会话: 浏览器打开直到关闭称之为一次会话

(在此期间会话不失效)

application

限于当前 WEB 应用. 是范围最大的属性作用范围, 只要在一处设置属性, 在其他各处的 JSP 或 Servlet 中都可以获取到

 

3. 请求的转发和重定向:

1). 本质区别:

请求的转发只发出了一次请求,

重定向则发出了两次请求.

转发

String path = "testServlet";

RequestDispatcher requestDispatcher = request.getRequestDispatcher("/"+path);

requestDispatcher.forward(request, response);

重定向

String path = "testServlet";

response.sendRedirect(path);

具体:

. 请求的转发: 地址栏是初次发出请求的地址.

重定向: 地址栏不再是初次发出的请求地址. 地址栏为最后响应的那个地址

. 请求转发: 在最终的 Servlet , request 对象和中转的那个 request 是同一个对象.

请求的重定向: 在最终的 Servlet , request 对象和中转的那个 request 不是同一个对象.      

请求转发

的代码

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

请求的重定向

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

. 请求的转发: 只能转发给当前 WEB 应用的的资源

       请求的重定向: 可以重定向到任何资源.

. 请求的转发: /代表的是当前 WEB 应用的根目录

       请求的重定向: /代表的是当前 WEB 站点的根目录.

 

       转发:例如在attr_1中添加转发代码,

<%

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

    %>

重定向可以定到任何资源

response.sendRedirect(“http://www.baidu.com”)

4. JSP 指令:

 JSP指令(directive)是为JSP引擎而设计的, 它们并不直接产生任何可见输出, 而只是告诉引擎如何处理JSP页面中的其余部分。

在目前的JSP 2.0中,定义了page、include taglib这三种指令

5. page 指令:

1). page指令用于定义JSP页面的各种属性,作用的都是整个JSP页面,通常在JSP页面的起始位置。

2). page 指令常用的属性:

. import 属性: 指定当前 JSP 页面对应的 Servlet需要导入的类.

<%@pageimport="java.text.DateFormat"%>

. session属性: 取值为 true false, 指定当前页面的session 隐藏变量是否可用, 也可以说访问当前页面时是否一定要生成 HttpSession对象.

<%@ pagesession="false" %>

 

. errorPage isErrorPage:

      >errorPage 指定若当前页面出现错误的实际响应页面时什么.

      <%@ page errorPage="/error.jsp" %> / WEB 应用根目录.

      在响应 error.jsp, JSP 引擎使用的请求转发的方式.

      >isErrorPage 指定当前页面是否为错误处理页面,可以说明当前页面是否可以使用 exception 隐藏变量. 需要注意的是: 若指定  isErrorPage="true",并使用 exception 的方法了, 一般不建议能够直接访问该页面.

      > 如何使客户不能直接访问某一个页面呢 ?

对于 Tomcat 服务器而言, WEB-INF下的文件是不能通过在浏览器中直接输入地址的方式来访问的. 但通过请求的转发是可以的!   

      > 还可以在 web.xml 文件中配置错误页面:

      <error-page>

    <!-- 指定出错的代码: 404 没有指定的资源, 500 内部错误. -->

           <error-code>404</error-code>

           <!-- 指定响应页面的位置 -->

           <location>/WEB-INF/error.jsp</location>

      </error-page>

      <error-page>

           <!-- 指定异常的类型 -->

           <exception-type>java.lang.ArithmeticException</exception-type>

           <location>/WEB-INF/error.jsp</location>

      </error-page>

. contentType:指定当前 JSP 页面的响应类型.

实际调用的是response.setContentType("text/html; charset=UTF-8");

通常情况下, 对于 JSP 页面而言其取值均为 text/html; charset=UTF-8.charset 指定返回的页面的字符编码是什么. 通常取值为 UTF-8

. pageEncoding: 指定当前 JSP 页面的字符编码. 通常情况下该值和contentType 中的 charset 一致.

. isELIgnored: 指定当前 JSP 页面是否可以使用 EL 表达式.

通常取值为 false.

6. include 指令:——静态引入

1). <%@ include file="b.jsp"%>

include 指令用于通知 JSP 引擎在翻译当前 JSP 页面时将其他文件中的内容合并进当前 JSP 页面转换成的 Servlet 源文件中,

这种在源文件级别进行引入的方式称之为静态引入, 当前JSP页面与静态引入的页面紧密结合为一个Servlet

2). file属性的设置值必须使用相对路径

3). 如果 / 开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件

7. jsp:incluce 标签:——动态引入

1). <jsp:includepage="b.jsp"></jsp:include>

2). 动态引入: 并不是像 include 指令生成一个 Servlet 源文件, 而是生成两个 Servlet 源文件, 然后通过一个方法的方式把目标页面包含进来.

org.apache.jasper.runtime.JspRuntimeLibrary.include(request,response, "b.jsp", out, false);

8. jsp:forward:

1).<jsp:forward page="/include/b.jsp"></jsp:forward>

相当于.

<%

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

%>

2). 与转发的区别

但使用 jsp:forward可以使用 jsp:param 子标签向 b.jsp 传入一些参数. 同样jsp:include也可以使用 jsp:param 子标签.

<jsp:forward page="/include/b.jsp">

      <jsp:param value="abcd" name="username"/>

</jsp:forward>  

<jsp:include page="/include/b.jsp">

      <jsp:param value="abcd" name="username"/>

</jsp:include>

b.jsp中调用request.getParameter("username")获取到传入的请求参数.

9. 关于中文乱码:

1).显示

contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"

浏览器的显示的字符编码

2). 获取中文参数值: 默认参数在传输过程中使用的编码为 ISO-8859-1

. 对于 POST 请求: 只要在获取请求信息之前

(在调用 request.getParameter 或者是 request.getReader),

调用request.setCharacterEncoding("UTF-8") 即可.

. 对于 GET 请求: 前面的方式对于 GET 无效. 可以通过修改 Tomcat server.xml 文件的方式.

Connector 节点添加 u seBodyEncodingForURI="true" 属性即可.(工程文件的server文件(映射)也务必也得修改)

<ConnectorconnectionTimeout="20000" port="8989"protocol="HTTP/1.1" redirectPort="8443"useBodyEncodingForURI="true"/>

    或者手动解码再编码

<%

    String val = request.getParameter("user");

    String userName = new String(val.getBytes("iso-8859-1"),"UTF-8");

    out.print(userName);

    %>

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值