JSP全名为Java Server Pages,其根本是一个简化的Servlet设计,它实现了在Java当中使用HTML标签,Jsp是一种动态网页技术标准。JSP与Servlet一样,是在服务器端执行的。
page指令语法
<%@ page 属性1=“属性值” 属性2=“属性值1,属性值2”… 属性值n=“属性值n"%>
简而言之就是在JSP页面的注释。
HTML的注释
<!--html注释-->//客户端可见
JSP的注释
<%--html注释--%>//客户端不可见
JSP脚本注释
//单行注释
/*多行
注释*/
//也是不可见的
指在JSP界面执行的代码。
<%
System.out.println("JSP学习");
//不会输出到控制端,在服务器的控制台打印
%>
在JSP页面中定义变量或者方法
语法
<%! Java代码>
在JSP页面执行的表达式。
语法:
<%=表达式%>//注意,表达式不以分号结束
JSP生命周期的主要阶段:
编译阶段
1.解析jsp文件
2.将jsp文件转化为servlet
3.编译servlet
初始化阶段
在请求服务器前调用jsprint()方法,如果需要自定义jsprint()初始化功能可以重写jsprint()方法。一般情况下可以通过jsprint()方法中初始化数据库连接,打开文件和创建查询表。
执行阶段
这一阶段进行一切与请求相关的交互行为,直到被销毁。当jsp网页初始化完成后,jsp引擎会调用-jspService()方法。
销毁阶段
这一阶段主要描述了将jsp网页从容器中被移除时所发生的一切。
jspDestory()方法就是JSP的销毁方法,当需要做清理工作时也可以复写该方法。
jsp内置对象是web容器创建的一组对象,不使用new关键字就可以使用的内置对象。
<%
int i=1;
out.println(i);
//out是内置对象之一,它可以不需要new直接使用
%>
out对象是JspWriter类的实例,是向客户端输出内容常用的对象。
常用方法如下:
1.void println() 向客户端打印字符串
2.void clear() 清除缓冲区的内容,如果在flush之后调用会抛出异常
3.void clearBuffer() 清除缓冲区的内容,如果在flush之后调用不会抛出异常
4.void flush() 将缓冲区内容输入到客户端
5.int getBufferSize() 返回缓冲区以字节数的大小,如不设缓冲区则为0
6.int getRemaining() 返回缓冲区还剩余多少可用
7.boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常
8.void close() 关闭输出流
<form name="regForm"action="动作"method="提交方式"></form>
//method="get"或"post"
区别:
表单有两种提交方式,get与post
1.get:以明文的方式通过URL提交数据,数据在URL中可以看到。提交的数据最多不超过2KB。安全性比较低但效率比post方式高。适合提交数据量不大,安全性不高的数据。比如:搜索,查询等功能。
2.post:将用户提交的信息封装在HTML HEADER内,适合提交数据量大,安全性高的用户信息。比如:注册,修改,上传等功能。
客户端的请求被封装在request对象中,通过它才能了解到客户的需求,然后作出响应。它是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。
常用方法如下:
- String getParameter(String name)返回name指定参数的参数值
- String[] getParameterValues(String name) 返回包含参数name的所有值的数组
- void setAttribute(String,Object) 存储此请求中的属性
- object getAttribute(String name) 返回指定属性的属性值
- String getContentType() 得到请求体的MIME类型
- String getProtocol() 返回请求用的协议类型及版本号
- String getServerName() 返回接受请求的服务器主机名
response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。他是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其他页面的response对象对当前页面无效。
常用方法如下:
- String getCharacterEncoding() 返回响应用的是何种字符编码
- void setContentType(String type) 设置响应的MIME类型
- PrintWriter getWriter()返回可以向客户端输出一个字符的一个对象
//注意比较PrintWriter与内置out对象的区别- sendRedirect(java.lang.String location) 重新定向客户端的请求
请求转发与请求重定向
请求重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变。
请求转发:服务器行为,request.getRequestDispatcher().forward(red,resp);是一次请求,请求后转发请求对象会保存,地址栏的URL地址不会改变。
session表示客户端与服务器的一次对话。Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。session是一个特定的时间概念。
在服务器中保存着不同用户的session。
常用方法如下:
- long getCreationTime() 返回session创建时间
- public String getID() 返回session创建时JSP引擎为它设的唯一ID号
- public Object setAttribute(String name,Object value) 使用指定名称将对象绑定到此会话
- public Object getAttribute(String name) 返回与此会话中的指定名称绑定在一起的对象,如果没有兑现绑定在该名称下,返回null
- String[] getValueNames() 返回一个包含此session的所有可用属性的数组
- int getMaxInactiveInterval() 返回两次请求间隔多长时间此session被取消(单位秒)
** session生命周期 **
创建阶段:服务器第一次访问某个jsp或者servlet的时候,服务器会为当前会话创建一个sessionID,每次客户端向服务器发送请求时,会将此sessionID带过去。
活动阶段:只要当前会话页面没有全部关闭,重新打开新的浏览窗口访问同一项目资源时属于同一次会话。
(注:就算关闭再重新访问创建了新的会话原有的sessionID还存在,只不过再没有客户端会携带它交予服务器校验。)
销毁阶段:销毁有三种方式:调用session.invalidate()方法,session过期(超时),服务器重新启动。
application对象实现了用户之间数据的共享,可存放全局变量。application开始于服务器的启动,终止于服务器的关闭。在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作。在任何地方对application属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。application对象是ServletContext类的实例。
常用方法如下:
page对象就是指向当前JSP页面本身,有点像类中的this指针,它是java.lang.Object类的实例。
常用方法如下:
提供了对JSP页面所有的对象以及名字空间的访问。可以访问到本页所在的session,也可以取本页的application某一属性值。pageContext对象的本类名也叫pageContext。
常用方法如下
404相关问题
我第一次写用idea创建了一个jsp文件然后运行发现弹出来一个HTTP 404的界面,大概是下面这个样子的
然后因为这个问了学长,也看了百度很多相关的解答,其实根本原因还是在于路径不对。在idea中需要首先点击这个地方
然后是在这一块找到你的jsp文件然后点击确定,路径才会正确
然后网页就可以成功显示了,后续也不需要再修改。
500错误
对,我刚修复404的错误又出现了500的错误…然后查了相关资料,500的错误主要是由于自身代码的问题导致的,所以在运行前一定要好好检查代码。
小建议
个人建议创建jsp文件的话最好用一个单独的项目,一开始我是在我的Java包里面加了web程序,但是后面发现确实很不方便,也有很多bug,学长建议我重新建一个项目,我建好之后真的感觉界面啥的都清晰了很多。