Java Web入门——JSP
jsp本质就是servlet,运行在服务器端,处理请求并生成动态内容。对应的java和class文件在tomcat目录下的work目录。
常用语法:
1 | <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> |
<% %>叫做脚本片段,其中写的内容会翻译在Servlet的Service方法中,显然我们可以在Service方法中定义局部变量或者调用其他方法,但是不能在Service中再定义其他的方法,也就是我们可以在<%%>中定义局部变量或者调用方法,但不能定义方法。在jsp页面可以有多个脚本片段,但是多个脚本片段之间要保证结构完整。
<%!%>称作声明,其中写的内容将来会直接翻译在Servlet类中,因为我们可以在类中定义方法和属性以及全局变量,所以我们可以在<%!%>中声明方法、属性、全局变量。
<%=%>称作jsp表达式,用于将已经声明的变量或者表达式输出到网页上面。
直接写在jsp页面”\
\“中的代码称作模板元素,将来会Servlet的Service方法中的out.write(“___”)中,作为输出内容。
JSP页面生命周期
1 | st=>start: Start |
jspService()方法被调用来处理客户端的请求。对于每一个请求,JSP引擎创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每个客户端请求对应一个线程。以多线程的方式执行可以大大降低对系统的资源需求,提高系统的并发量及响应时间。但也会带来多线程同步问题。由于该Servlet始终驻于内存,所以响应非常快。
JSP内置对象
JSP内置对象是web容器创建的一组对象,不适用new关键字就可以使用的内置对象(例如out)。
常用内置对象:
- out:
- JspWriter类的实例,是向客户端输出内容常用的对象。
- void println() 向客户端打印字符串
- void clear() 清除缓冲区的内容,如果在flush之后调用会抛出异常
- void clearBuffer() 清除缓冲区内容,如果在flush之后调用不会抛出异常
- void flush() 将缓冲区内容输出到客户端
- int getBufferSize() 返回缓冲区以字节数的大小,如不设缓冲区则为0
- int getRemaining() 返回缓冲区还剩余多少可用
- boolean isAutoFlush() 返回缓冲区满时,自动清空/抛出异常
- void close() 关闭输出流
- request
- 客户端的请求信息,他是HttpServletRequest类的实例。
- String getParameter(String name) 返回name指定参数的参数值
- String[] getParameterValues(String name) 返回包含参数name的所有值的数组(checkbox多选)
- void setAttribute(String, Object) 储存此请求中的属性
- object getAttribute(String name) 返回指定属性的属性值
- String getContentType() 得到请求体的MIME类型
- String getProtocol() 返回请求用的协议类型及版本号
- String getServerName() 返回接受请求的服务器主机名
- request.setCharacterEncoding(“utf-8”) 解决中文乱码问题
- response
- session
- application
- 不常用的:
- Page
- pageContext
- exception
- config
JavaBean
1 | <jsp:useBean id="myUsers" class="com.po.Users" scope="page"/> |
request.getAttribute(s); & request.getParameter(s);区别
getAttribute(s)是request域的一个属性,只能由request.setAttribute(k, v);放入
getParameters(s)获取的值是URL传递过来的值
JSP中四种会话跟踪技术(四大作用域)
- application域 数据在一个应用服务器范围内有效,通过application对象访问
- session域 数据在一次会话范围内容有效,通过session对象访问
- request域 数据在一个服务器请求范围内有效,通过request对象访问
- page域(pageContext) 数据在一个页面范围内有效,通过pageContext对象访问
JSP一共有以下6中基本动作
JSP:include (当页面被请求的时候引入一个文件)
JSP:forward (将请求转到另一个页面)
JSP:useBean (获得JavaBean的一个实例)
JSP:setProperty (设置JavaBean的属性)
JSP:getProperty (获得JavaBean的属性)
JSP:plugin (根据浏览器类型为Java插件生成object或者embed两种标记)
<%!%> 表示声明一个变量
<%%>表示所执行的jsp语句块,也就是相应的java代码
<%=%>相当于<%out.println(“字符串”);%>,在网页中显示某一个变量或某一个表达式的值
声明: 将声明的变量和方法,作为Servlet类的变量和方法。
脚本: 将代码插入到Servlet的service方法中。