JSP基础

1 JSP介绍

jsp实际上是一个Servlet+HTML的结合体。我们可以在jsp上面编写HTML代码也可以编写Java代码。

Servlet+JSP的最佳实践:

JSP只负责页面内容的展示,Servlet只负责后台的业务处理。

实际上,jsp也是一个Servlet类。当浏览器第一次访问jsp的时候,JVM会把jsp翻译成一个Java文件,文件的名称就是“jsp文件名_后缀名.java"。这个Java文件实际上就是一个servlet文件。他也继承了HttpServlet类。我们在浏览器上所看到的内容,实际上就是该Servlet文件的service方法的out.write()方法的输出。

下面就是jsp翻译文件_jspService方法的源代码。

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

final java.lang.String _jspx_method = request.getMethod();
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
return;
}

    final javax.servlet.jsp.PageContext pageContext;
    javax.servlet.http.HttpSession session = null;
    final javax.servlet.ServletContext application;
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;


    try {
      response.setContentType("text/html; charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      out.write("\r\n");
      out.write("\r\n");

	// 获取系统当前时间
	Date d = new Date();
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
	String dateStr = sdf.format(d);

      out.write("\r\n");
      out.write("\r\n");
      out.write("\r\n");
      out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");
      out.write("<html>\r\n");
      out.write("<head>\r\n");
      out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
      out.write("<title>Insert title here</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");
      out.write("\t<h1>欢迎来到中软国际</h1>\r\n");
      out.write("</body>\r\n");
      out.write("</html>");
      out.write("\r\n");
      out.write("\r\n");
      out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");
      out.write("<html>\r\n");
      out.write("<head>\r\n");
      out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
      out.write("<title>Insert title here</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");
      out.write("\t");

		response.getWriter().write("当前时间:" + dateStr);
	
      out.write("\r\n");
      out.write("</body>\r\n");
      out.write("</html>");
    } catch (java.lang.Throwable t) {
      if (!(t instanceof javax.servlet.jsp.SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          try {
            if (response.isCommitted()) {
              out.flush();
            } else {
              out.clearBuffer();
            }
          } catch (java.io.IOException e) {}
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
        else throw new ServletException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }

2 JSP基本用法

2.1 jsp文件的组成

一个jsp文件可以包括代码区,HTML标签,jsp指令,脚本表达式,注释等等。

2.1.1 代码区

定义格式:

<% java代码... %>

一个JSP文件可以有多个代码区。多个代码区之间可以互相访问。

2.1.2 jsp指令
  • page指令:指定当前JSP页面的参数信息。
<%@page language="java" import="包名,包名,..." pageEncoding="jsp页面使用的字符集"
	isErrorPage="true|false" errorPage="异常处理页面的路径"%>

一个JSP页面至少有一个page指令,而且一般page指令放在jsp文件的开始位置。


  • include指令:包含其他jsp页面
<%@include file="JSP文件路径"%>

注意: 使用include指令包含其他页面,那么被包含页面会与包含的JSP页面会被编译成一个Servlet类。因此,为了避免相同处理指令引起的冲突,被包含页面中不能够出现与包含页面中相同的处理指令。


  • taglib指令:引入标签库文件。
<%@taglib uri="标签库文件地址" prefix="前缀名"%>
2.1.3 注释

JSP文件支持两个注释:

HTML:<!-- html注释 -->

JSP:<%-- JSP注释内容 --%>

因为HTML注释可以通过浏览器查看源代码看到,而JSP注释不可以在浏览器的源代码中查看,所有JSP注释的安全性较高。在实际开发中,尽量使用JSP注释。

2.1.4脚本表达式

作用:替代out.write(输出内容)方法。

定义格式:

<%=输出内容%>

3 JSP内置对象

JSP九大内置对象:

pageContext:相当于Servlet的pageContext;

request:相当于Servlet的HttpServletRequest对象

session:相当于Servlet的HttpSession对象

application:相当于Servlet的ServletContext对象

config:相当于Servlet的ServletConfig对象

out:带缓存的PrintWriter对象

page:当前当前的JSP页面

response:相当Servlet的HttpServletResponse对象

exception:异常对象。只有jsp是一个异常处理页面的时候才有该对象的。


pageContext的作用:1)作为域对象;2)可以获取其他对象;

4 EL表达式

4.1 EL介绍

EL: 表达式语言。使用EL表达式可以替换脚本表达式,使得JSP页面的代码更加简洁。

语法格式:

${EL内置对象.属性名}

4.2 EL内置对象

JSP内置对象 EL内置对象

pageContext pageScope

request requestScope

session sessionScope

application applicationScope

EL表达式的内置对象名可以不写。如果不写,默认就是从pageScope > requestScope > sessionScope > applicationScope查找域对象中的属性,直到找到为止。

4.3 EL运算符

算术运算符:+ - * / %

逻辑运算符:and or not

比较运算符:> < >= <= == !=

empty运算符:在字符串中使用empty,那么如果字符串为空,那么empty返回true,否则返回false。在集合中使用empty,如果集合没有元素,那么empty返回true,否则返回false。

三目运算符:${EL条件表达式 ? ‘内容1’:‘内容2’}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值