首页 > Web开发 > 详细

Jsp笔记

时间:2019-12-18 19:44:26      阅读:88      评论:0      收藏:0      [点我收藏+]

Servlet & Jsp

Servlet


  1. 创建普通的java类并继承HttpServlet
  2. 覆写service方法
  3. 在service方法中书写逻辑代码即可
  4. 在webRoot下的WEB-INF文件夹的web-xml文件中配置servlet
<!-- 配置Servlet-->
    <!--配置servlet类路径-->
    <servlet>
        <servlet-name>my</servlet-name>
        <servlet-class>com.hgw.servlet.MyServlet</servlet-class>
    </servlet>
    <!--配置访问方式-->
    <servlet-mapping>
        <servlet-name>my</servlet-name>
        <url-pattern>/my</url-pattern>
    </servlet-mapping>
  • url : http://localhost:8080/project/my2

    组成:服务器地址:端口号 / 虚拟项目名 / servlet的别名

  • uri :虚拟项目名 / servlet的别名

Servlet 的生命周期

  1. 从第一次调用到服务器关闭
  2. 如果Servlet在web.xml中配置了load-on-startup, 生命周期为从服务器启动到服务器关闭
    • init方法是对Servlet进行初始化的一个方法,会在Servlet第一次加载进内存是执行
    • destory方法是在servlet被销毁时执行。也就是服务器关闭时。

Service 方法和 doGet 方法和 doPost 方法的区别

  1. Service方法:可以处理get方法和post方法
  2. doGet方法:处理get方式的请求
  3. doPost方法:处理post方式法的请求
  • 优先调用Service方法处理请求
  • 如果有service 方法中有super.service(arg0, arg1);,则在调用service方法后调用相应的方法,但是如果没有相应的方法就会报405。因此我们不在覆写的service中调用父类的service,避免405错误。

Servlet 常见错误总结

  • 404 错误:资源未找到
    1. 在请求地址中的servlet的别名书写错误
    2. 虚拟项目名书写错误
  • 500 :
    1. web.xml中校验servlet类的全限路径错误。
    2. service方法体中的代码错误。
  • 405 错误:请求方式不支持
    1. 请求方式和servlet 中的方法不匹配所造成的。

Request 对象

? 服务器每接收一个请求,就会创建一个对象专门的村粗此次的请求数据。

? 服务器接收到浏览器的请求后,会创建一个Request 对象,对象中存储了此次请求相关的请求数据。服务器在调用Servlet时将Request对象作为实参传递给Servlet的方法,比如:service方法。

  • request对象
    1. 作用:request对象中封存了当前请求的所有请求信息
      • 注意:request对象有tomcat服务器创建,并作为实参传递给处理请求的servlet的service方法。
    2. 使用:
      1. 获取请求头数据
      2. 获取请求行数据
      3. 获取用户数据
// RequestServlet.java
public class RequestServlet extends HttpServlet{
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException{
        // 1. 获取请求头数据
            // 获取请求方式
                String method = req.getMethod();
                System.out.println(method);
            // 获取请求URL
                StringBuffer url = req.getRequestURL();
                System.out.println(url);
                // 获取URI
                String uri = req.getRequestURI();
                System.out.println(uri);
            // 获取协议
                String h = req.getScheme();
                System.out.println(h);
        // 2. 获取请求行数据
            // 获取指定的请求行信息
            String value = req.getHeader("aaa");
    }
}

Response 对象

? 在使用Request 对象获取了请求数据并进行处理后,处理的结果如何显示到浏览器中呢?

? 使用 Request 对象。

? 服务器在调用这定的Servlet 进行请求处理的时候,会给 Servlet 的方法传递两个实参 request 和 response。其中request中封存了请求相关的请求数据,而response 则是用来进行响应的一个对象。

// 设置响应头
    setHeader(String name, String value);   // 在响应头中添加响应信息,但是同键会覆盖。
    addHeader(String name, String value);   // 在响应头中添加响应信息,同键不会覆盖。
// 设置响应状态
    setError(int num, String msg);  // 自定义响应状态码。 
// 设置响应主体
    resp.getWriter().write(String str); // 响应具体的数据给浏览器
// 设置响应编码格式
    resp.setContentType("text/html;charset=utf-8");

// 总结:
    service请求处理代码流程:
        设置响应编码格式
        获取请求数据
        处理请求数据
            数据库操作(MVC思想)
        响应处理结果

转发和重定向(写法和区别)

Session

ServletContext 对象

ServletConfig 对象

Session( servlet 会话设置)

Jsp


  • 问题:

    在学习了Servlet之后,使用Servlet进行页面的展现,代码书写过于麻烦。极大影响了开发效率。

  • 解决:

    使用JSP技术

  • 概念:

    JSP全名为Java Server Page,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是有Sun Microsystem公司倡导、许多公司参与一起建立的一种动态网页技术标准。

  • 特点:

    1. 本质上还是Servlet
      1. 跨平台,一次编写处处运行
      2. 组件跨平台
      3. 健壮性和安全性
  • 访问原理:

    浏览器发起请求,请求JSP,请求被Tomcat服务器接收,执行JspServlet将请求的JSP转义成对应的Java文件(也是Servlet),然后执行转义好的Java文件。

Jsp 的语法和指令

  • JSP 的 page 指令

    <%@ page language="java" import="java.util.*,java.lang.*" pageEncoding="utf-8"%>
    <%@ errorPage = "error.jsp"%>

    作用:配置jsp文件的转译相关的参数

    说明:


    language:声明jsp要被转译的语言
    import:声明转译的java文件要导入的包,不同的包使用逗号隔开

    ? pageEncoding:设置jsp文件的数据编码格式

    ? contentType="text/html; charset=utf-8"不用写,如果有了pageEncoding="utf-8"的话

    ? extend:设置jsp转译的java文件要继承的父类(包名+类名)

    ? session:设置转译的servlet中是否开启session支持,默认开启,true表示开启,false表示关闭

    ? errorPage:设置jsp运行错误跳转对的页面

  • JSP 的 taglib 指令

  • JSP 的局部代码块

    <% int a = 5; %> 

    特点:

    ? 局部代码块中声明的java代码会被原样转译到jsp对应的servlet文件的_JspService方法中,代码中声明的变量都是局部变量

    缺点:

    ? 使用局部代码块在jsp中进行逻辑判断,书写麻烦,阅读困哪。

    开发:

    ? servler进行请求逻辑处理,使用jsp进行页面展现。

  • JSP 的全局代码块

    <%! 
        int a = 5;
      public void test(){
            System.out.println("我是全局代码块声明");
        }
      String str = "脚本段输出";
    %>
    
    <%=str %> // 输出str, 相当于 <% out.writer(str); %>, 注意不要加分号

    特点:

    ? 声明的java代码作为全局代码转译到对应的servlet类中。

    注意:

    ? 全局代码块声明的代码,需要使用局部代码块调用。

  • JSP 的注释

    • JSP 中的三种注释
      1. 前端语言注释<!-- -->:会被转译,也会被发送,但是不会被执行。
      2. java 语言注释 // 和 /* */:会被转译,但是不会被servlet执行。
      3. Jsp 注释<%-- --%>:不会被转译。
  • JSP 的静态引入(JSP 的 include 指令)

    // 静态引入
    <%@include file="要引入的jsp文件的相对路径" %>

    特点:

    ? 1. 会将引入的jsp文件和当前jsp文件转成一个java(Servlet)文件使用。

    ? 2. 在网页中也就显示了合并后的效果。

    注意:

    1. 静态引入的jsp文件不会单独转译为java(Servlet)文件。
    1. 当前文件和静态引入的jsp文件中不能使用java代码块声明同名变量。
  • JSP 的动态引入

    <jsp:include page = "要引入的jsp文件的相对路径"></jsp:include>
    

    特点:

    ? 1. 会将引入的jsp文件单独转译,在当前文件转译好的java文件中调用引入的jsp文件的转译文件。

    ? 2. 在网页中显示合并的显示效果。

    注意:

    ? 动态引入允许文件中声明同名变量。

    优点:

    ? 降低jsp代码的冗余,便于维护升级。

  • 页面转发(jsp 的转发 forword 标签)

    // 可以理解为servlet中的请求转发
    <jsp:forward page="要转发的jsp文件的相对路径"></jsp:forward> // 中间不能有空格
    

    特点:

    1.  一次请求
    
    
    2.  地址栏信息不变

    注意:

    1. 在转发标签的两个标签中间除了写<jsp:param name = "str" value = "aaa" />子标签不会报错,其他任意字符都会报错。
    2. name属性为附带的数据的键名
    3. value为附带的数据内容
    4. 会将数据以?的形式拼接在转发路径的后面

Jsp 的内置对象

  • PageContext 对象

    1. 页面上下文对象,封存了其他内置对象。
    2. 注意: 每个jsp文件单独拥有一个pageContext对象。
    3. 作用域:当前页面。
  • Request 对象

    // 获取请求数据
    String s = request.getParameter("str");
    request.getAttribute("str");
    
    1. 封存当前请求数据的对象。
    2. 由tomcat服务器创建
    3. 一次请求
  • Session 对象

    1. 此对象用来存储用户的不同请求的共享数据
    2. 一次会话
  • Application 对象

    1. 也就是ServletContext对象,一个项目只有一个。
    2. 存储用户共享数据的对象,以及完成其他操作
    3. 作用域:项目内
  • Response 对象

    // 重定向
    <%
    response.sendRedirect("forward.jsp");
    %>
    
    1. 响应对象,用来响应请求处理结果给浏览器的对象。
    2. 设置响应头,重定向。
  • Out 对象

    1. 响应对象,jsp内部使用。
    2. 带有缓冲区的响应对象,效率高于response对象。
  • Page 对象

    1. 代表当前jsp的对象,相当于java中对this
  • Exception 对象

    1. 异常对象,存储了当前运行的异常信息。
  • config 对象

    1. 也就是ServletConfig,主要是用来获取web.xml中的配置数据,完成一些初始化数据的读取。

四个作用域对象

  • pageContext:当前页面。解决了在当前页面内的数据共享问题。获取其他内置对象。

  • request:一次请求。一次请求的servlet的数据共享。通过请求转发,将数据流转给下一个servelet。

  • session:一次会话。一个用户的不同请求的数据共享。将数据从一次请求流转给其他请求。

  • application:项目内。不同用户的数据共享问题。将数据从一个用户流转给其他用户。

    作用:数据流转

jsp中的资源路径使用

  • 在jsp中的资源路径可以使用相对路径完成跳转,但是:

    1. 资源的位置不可随意更改。
    2. 需要使用../进行文件夹的跳出,使用比较麻烦。
  • 使用绝对路径(开发常用):

    /虚拟项目名/项目资源路径 ,其中第一个/表示服务器根目录相当于:localhost:8080

    ? 例如:

    ? <a href = "/jsp/jspPro.jsp">jspPro.jsp</a>

    ? <a href = "/jsp/a/a.jsp">a.jsp</a>

  • 使用jsp中自带的全局路径声明:

    <%
        String path = request.getContextPath();
      String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.get
     %>
     <base href = "<%=basePath%>">
    // 作用:给资源前面添加项目路径: http://127.0.0.1:8080/虚拟项目名/
    

Jsp笔记

原文:https://www.cnblogs.com/hgwq/p/12061356.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!