JSP笔记


title: JSP笔记
date: 2017-02-24 21:51:49
tags: JSP


JSP&Servlet 笔记

命名规则

  • 包名完全小写
  • 类名采用驼峰命名法
  • 方法名首字母小写

文件位置

  • 一般所用包为:entity dao util web 这些包里全部为Java程序,位于src文件夹下。
  • web文件夹下主要存放和网页相关的东西
  • WEB-INF文件夹下可建一个lib文件夹,用来存放项目相关jar包
  • index.jsp单独放置在WEB-INF的直接目录下,其他文件位于另外所建views文件夹下。

Servlet和JSP之间传值的两种方式

  1. 重定向跳转
    • 修改地址栏,在浏览器端工作
    • 传值只能依靠URL重写,且仅能是String
    • resp.sendRedirect(“/home.jsp?error=1”);
  2. 请求转发跳转
    • 地址栏不变,在服务器端工作
    • 依靠req.setAttibute()传值,值可以为任意类型
    • 缺点为会产生重复提交
req.getRequestDispatcher("/WEB-INF/views/webjsp/list.jsp").forward(req,resp);

两个Servlet之间的通信只能通过session,但可以通过session也可以间接地创建JSP和Servlet之间的通信

  • 使用session要在web.xml文件中配置session的存活时间
//在web.xml中配置

        
      ...
    
        
       20
    

//也可以单独给某一个servlet中的seesion设置超时值,注意是以秒来计算
session.setMaxInactiveInterval(20*60);

配置上下文参数和servlet参数:

  • 上下文参数:
//web.xml中配置文件
        ...
        
        mainEmail
        [email protected]
    
//servlet中调用上下文参数
getServletContext().getInitParameter("mainEmail");
//或者...
ServletContext context = getServletContext();
context.getInitParameter("mainEmail");
  • servlet参数
//web.xml中配置文件

        ...
        ...

        
            adminEmail
            [email protected]
        

//servlet中的调用
getServletConfig.getInitParameter("adminEmail");
//调用过程:
//容器初始化一个servlet时,会为这个容器创建唯一的一个ServletConfig,容器从DD中读取初始化参数并把键值交给ServletConfig,再把ServletConfig传递给servlet中的init()方法。

为防止出现错误类型为500的错误:

if(isbn == null || "".equals(isbn)){
            resp.sendError(404);
        }

将页面上请求的表单写入数据库时应采用UTF-8编码防止写入乱码的情况

req.setCharacterEncoding("UTF-8");
//如果通过URL传入中文,则需进行编码
String tagTypeName = new String(req.getParameter("newTagTypeName").getBytes("ISO-8859-1"), "UTF-8");

搜索功能应通过URL重写来传值

删除功能需要二次确认,然后通过JS跳转到Servlet

$(".del").click(function () {

                if(confirm("确定要删除吗")) {
                    var id = $(this).attr("rel");
                    window.location.href = "/product/del?id=" + id;
                }

            });

JSTL 和 EL表达式

// <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
//
// 
//         
  • ${item}
  • //
    // // // //

    Hello,Alex

    //
    // //

    Hello,Tom

    //
    // //

    Hello,Other

    //
    //
    // // //

    Hehe

    //
    //

    EL表达式 page->request->session->application

    //

    ${name}

    //

    ${user.id}

    //

    ${user.username}

    //

    ${user.niceName}

    //

    ${requestScope.name}

    //

    ${applicationScope.name}

    //

    ${1+1}

    //

    ${name == 'Alex'}

    //

    ${name eq 'Alex'}

    //

    ${12 >= 2}

    //

    ${empty name}

    //

    ${not empty name}

    JSP

    • JSP表达式:
      所有的scriptlet和表达式都放在服务方法(_jspService)中,也就是说在scriptlet中声明的变量总是局部变量

    • JSP声明:

      <% ! int count = 0; %>
      

      JSP声明总是在类中定义,即独立于服务方法之外,这样也就可以使用静态变量和静态方法了

    • JSP九大隐式对象

      1. application 对应servlet中 getServletContext()
      2. request 对应servlet中 request
      3. session 对应servlet中 request.getSession()
      4. pageContext 包含以上三个隐式对象
      5. out
      6. ServletConfig
      7. page
      8. response 对应servlet中 response
      9. exception
    • JSP指令(<%@ %>)

      1. page指令
      2. taglib指令
      3. include指令
    • JSP动作()

      
             
      
      
    • EL表达式中的”.”运算符和”[]”运算符:

      1. 点运算符访问性质和映射值
      2. 中括号运算符若包含的是String直接量,这可以是一个
        • Map键
        • bean性质
        • List或数组中的索引
          如果不是String直接量,先找到该量映射的值,最终得到一个映射的String直接量
    • EL隐式对象

      1. pageScope
      2. requestScope
      3. sessionScope
      4. applicationScope
      5. param
      6. paramValues 请求参数的Map
      7. head
      8. headValue 请求头部的Map
      9. cookie
      10. initParam 上下文初始化参数
      11. pageContext
    • include指令和标准动作

      1. 两者都对位置敏感
      2. include指令在转换时发生,标准动作在运行时发生
      3. 各自语法格式
      //include指令
      <%@ include file="header.jsp"%>
      //
      
      
    1. 如果需要对被包含的jsp文件内容进行定制,那么就只能使用jsp标准动作了
    //使用定制包含内容
    // 
    //        
    // 
    //被包含的header.jsp
    ${param.subTitle}
    //使用可以达到同样的效果
    // 
    //        
    // 
    

    动作中也可以使用EL表达式

    url中文传值乱码

    将请求值设为UTF-8编码

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

    EL隐式对象

    • 作用域属性Map

      1. pageScope
      2. requestScope
      3. sessionScope
      4. applicationScope
    • 请求参数Map

      1. param
        关于该隐式对象的一个小应用
      //当前jsp页面中
      
          
      
      //header.jsp中
      //接受传过来的param
      

      ${param.subTitle}

      1. paramValues
    • 请求头部Map

      1. header
      2. headValue
    • 上下文初始化参数的Map(${initParam.mainEmail})

      1. initParam
    • 该隐式对象不是映射(Map),他是对pageContext对象的实际引用(JavaBean)

      1. pageContext
    • 其他的隐式对象

      1. cookie

    EL表达式示例,${person.name},就上式来说,点运算符左边可以是一个Map或一个Bean,点运算符右边可以是一个映射键或者Bean性质(${getName()}).

    建立自己的错误界面

    如果用户访问你的网站出现了一些错误,并且不希望访问你网站的用户看到你的栈跟踪记录,也不想让用户得到一个404的错误代码,那么就可以用一个优雅的方式去解决这些问题。
    DD中(web.xml) 中进行一下配置:

    
        //根据HTTP状态声明错误页面
        404
        //根据抛出错误类型来声明错误页面
        java.lang.ArithmeticException
        /notFound.jsp
    
    

    你可能感兴趣的:(JSP笔记)