如何浏览器如何通过地址访问服务器定位到webapps目录下?
localhost:8080/项目名/servlet别名
localhost与8080(服务器端口号)定位到webapps;项目名在IDE中定义;servlet别名在xml中配置。
---------------------------------------------------------------------------------------------------------------
Jsp三种注释
前端语言注释:
会被转译,会被发送,但不会被浏览器执行
java注释:
会被转译,但不会被servlet执行
jsp注释:
不会被转译。
--------------------------------------------------------------------
Jsp的page指令学习:
<%@page 属性名="属性值" 属性名="属性值"%>
language:声明jsp要被转译的语言
import: 声明java文件导入的包,不同的包用逗号隔开
pageEncoding:设置当前jsp文件的编码格式(注意:pageEncoding不仅设置了jsp文件的编码方式,也包含设置了响应给浏览器的编码)
contentType:设置了jsp数据响应给浏览器时,浏览器的解析和编码格式。
session:设置转译的servlet中是否开启session支持,默认开启,true表示开启,false表示关闭
errorPage:设置JSP的运行错误跳转页面(出现逻辑错误,即编译错误时跳转)
extends:设置jsp转译的java文件要继承的父类(报名+ 类名)。
作用:配置jsp文件的转译相关参数。
--------------------------------------------------------------------
Jsp局部代码块:(表面在写html,实际上写的servlet程序)
特点:
局部代码块中声明的java代码块(用<% ... %>来表示)被原样转译到jsp对应的servlet文件的JspService文件里了
代码块中声明的变量都是局部变量。
使用:<% java代码 %>
缺点:使用局部代码块在jsp中进行逻辑判断,书写麻烦,阅读困难
因此,逻辑判断一般不再jsp中写,而在servlet中实现。
开发:servlet进行请求逻辑处理,使用jsp进行页面展现。
Jsp全局代码块:
特点:声明java代码作为全局代码转译到对应的servlet类中
使用:<%! 全局代码 %>
开发:全局代码块声明后,在局部代码块中使用。
Jsp的脚本段语句:
特点:帮助我们快速的获取变量或者方法的返回值作为“数据响应!!”给浏览器
使用:<%= 变量名或方法%>
注意:不要在变量名或者方法后使用分号
位置:除了Jsp语法要求外的任意位置
--------------------------------------------------------------------
Jsp静态引入和动态引入 (jsp的include指令)
Jsp静态引入:<%@include file="要引入的jsp文件的相对路径">
特点:
会将引入的jsp文件和当前jsp文件转译成一个java(servlet)文件使用
在网页中也就显示了合并后的显示效果
注意:
静态引入的jsp文化不会单独转译成java(Servlet)文件
当前文件和静态引入的jsp文件不能使用java代码块声明的同名变量
Jsp动态引入: <jsp:include page="要引入的jsp文件的相对路径"></jsp:include>
特点:
会将引入jsp文件单独转译,当前文件转译好的java文件中调用引入的jsp文件转译文件
在网页中显示合并后的显示效果。
注意:
动态引入允许文件中声明同名变量。
引入的优点:降低代码的冗余性,便于维护。
--------------------------------------------------------------------
jsp的转发标签forward:
使用:
<jsp:forward page = "要转发的jsp文件相对路径"></jsp:forward>
特点:
一次请求
地址栏信息不改变
注意:
在转发标签的两个标签中除了写<jsp:param name= value= >以外,其他任意字符都报错。
name为附带数据的键名
value为附带的数据内容
一组标签表示一个键值对
会将数据以?的形式拼接在转发路经后面
--------------------------------------------------------------------
jsp的内置对象
内置对象:
jsp文件在转译成其对应的servlet文件的时候,自动生成的并声明的对象,我们在jsp页面中直接使用即可。
注意:
内置对象在jsp页面中使用,使用局部代码块或者脚本段语句来使用。不能够在全局代码块中使用。
内容:九个对象
1、pagecontext:页面上下文对象,封存了其他内置对象。
eg: pageContext = _jspxFactory.getPageContext(this, request, response,
"error.jsp", true, 8192, true);
注意:每个jsp只有一个pagecontext对象。
作用域范围:当前页面
**2、request:封存当前请求数据的对象,由tomcat服务器创建。---一次请求(生命周期)
**3、session:此对象用来存储用户不同请求的共享数据。-----一次会话(生命周期)
**4、application:也就是servletcontext对象,一个项目只有一个;
存储用户共享数据的对象,以及完成其他操作。----项目内
**5、response:响应对象,用来响应请求处理结果给浏览器的对象;设置响应头;重定向
6、out:响应对象,jsp内部使用(servlet中没有)。带有缓冲区的响应对象,效率高于response对象。
7、page:代表当前servlet对象。
eg: final java.lang.Object page = this;
8、exception:异常对象。存储当前运行的异常信息。
注意:使用此对象需要在page指令中使用属性isErrorPage="true"开启
9、config:也就是servletconfig,主要用来获取web.xml中的配置数据,完成一些初始化数据读取。
--------------------------------------------------------------------
Jsp的四个作用域对象:
pageContext:当前页面。解决了当前页面内的数据共享问题。它作用用来获得其他内置对象。
request:一次请求。一次请求的servlet数据共享问题。通过请求转发,将数据流转给下一个servlet。
session:一次会话。一个用户不同请求的数据共享。将数据从一次请求流转给其他请求。
application:项目内。不同用户的数据共享问题。将数据从一个用户流转给其他用户。
--------------------------------------------------------------------
Jsp的路径:
在Jsp中资源路径,可以使用相对路径完成跳转
1、相对路径遇到的问题:
1、资源位置不可随意更改
2、需要使用../进行文件夹的跳出。使用起来比较麻烦。
2、使用绝对路径:
/虚拟项目名/项目资源路径
注意:在jsp中资源的第一个"/"表示的是服务器的根目录,相当于localhost:8080。
3、使用jsp中自带全局路径声明:
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
<base href="<%=basePath%>">
其作用:给资源前面添加项目路径
注释: Servlet重定向路径总结:
1、相对路径:从当前请求的路径查找资源路径
相对路径如果servlet别名中包含目录,会造成重定向失败。
2、绝对路径:
/虚拟项目名/资源路径(一般用绝对路径)
Servlet请求转发总结:
/ 表示项目根目录。
req.getRequestDispatcher("/资源路径").forward(req,resp);