JSP介绍
JSP (java server page java服务器端网页)
jsp:即html中嵌套写java代码 相比servlet更简单
servlet:java代码中嵌套写html代码 复杂
JSP它的本质是Servlet
<%
书写java代码
%>
JSP可以放置在WEB应用程序中除了WEB-INF及其子目录 外的任何其他目录中。
JSP的运行原理:jsp本质上还是一个Servlet
JSP原理:每个jsp页面在第一次访问时,JSP引擎先将它翻译成Servlet源程序,接着再把这个servlet源程序编译成class文件,然后由web容器装载。
备注:虽然jsp是html中写java程序,但是推荐尽量不要出现java程序,尽量都使用表达式语言,如EL、JSTL或web框架标签(Struts标签或spring MVC标签)
隐含对象:即无需声明就可以直接使用的对象
JSP九大隐式对象(不用声明创建就可以直接当对象使用)
1.request httpServletRequest对象
2.session httpSession对象 代表浏览器和服务器的一个会话
3.application ServletContext对象 代表当前web应用,能获取初始
4.response httpServletResponse对象
5.pageContext PageContext对象 页面上下文,可以从该对象获取其 它八个对象,获取当前页面信息(自定义标签时使用)
6.config 当前jsp对应的ServletConfig对象(开发中几乎不使用)
7.out JspWriter对象 调用out.println()方法打印到浏览器中
8.page page=this代表当前jsp对应的Servlet对象引用,类型 为Object只能使用Object的方法 (开发中几乎不用)
9.exception 只有在声明了page指令的isErrorPage="true"时才 可以使用
PageContext、Request、HttpSession、ServletContext为四种域对象
pageContext:作用范围是当前页面
request:作用范围是转发页面之间
httpSession:作用范围是同一次会话
servletContext:当前web应用共享
JSP语法:
1.模板元素 即固定的静态页面 html代码
2.jsp输出表达式 <%= %>
3.jsp (java)脚本片段 <% 写java代码。。。 %>
4.jsp的声明 <%! %> 可以声明方法 但是jsp声明几乎不使用
5.jsp注释 <%-- jsp注释 --%>
请求重定向和请求转发:(非常重要)
本质区别:请求转发只发生了一次请求,而重定向则是向服务器发出了两次请求
具体区别:
1.请求转发的地址栏不发生改变,重定向会发生改变
2.请求转发转发中最终的servlet里的request对象和最初的那个是同一个对象,请求重定向则不是同一个对象
3.请求转发只能转发到当前web应用的资源,请求重定向可以任何 资源
4.请求转发:/代表的是当前web应用的根目录路
http://localhost:8080/project/WebRoot
请求重定向:/代表的是当前站点的根目录
http://localhost:8080/
举例说明:你找我借钱,我没钱,我就找小张借钱然后再把钱给你,这就是请求转发;你找我借钱我说我没钱说小张有钱,我让你去找小张借钱,这就是请求重定向。请求转发你只发出了一次请求,请求重定向你就发出了两次请求。你说多丢人,所以如果能转发就尽量转发。
特殊情况:需要重定向
1.登入模块
2.防止刷新重复提交表单
JSP中文乱码解决方案
解决方案:
第一处理级别:修改jsp的编码模板 使 pageEncoding和charset都为utf-8;(修改jsp模板) ---jsp页面显示中文
第二处理级别:获取参数时使用request.setCharset("utf-8"); 对于post请求有用 ---获取参数时候
第三处理级别:修改tomcat的server.xml文添加useBodyEncodingForURI="true" 属性。---全局处理
中文乱码问题最好是使用过滤器来解决。
JSP: page指令、include指令、JSP标签
比较简单随便了解即可。
总结: / 代表的含义:
1.如果是服务器发起的: /代表web 根目录
2.如果是浏览器发起的: /代表站点