简单的JSP入门知识,涉及虚拟路径与虚拟主机等预备知识。request和response内置对象,请求转发与重定向的应用和区别
预备知识
JSP要在相关容器中运行,我用的是Tomcat服务器。在Tomcat文件的结构中,WEB-INF/web.xml 设置访问的首页。
一、虚拟路径和虚拟主机
-
虚拟路径
项目默认访问地址为 E:\Tomcat\apache-tomcat-8.5.58\webapps ,可以修改,既将web项目配置在其他目录下(虚拟路径)。
打开 conf文件夹下的server.xml文件 ,找到
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
显然,主机名为localhost,默认访问的文件夹为webapps。想要访问其他路径下的文件夹的项目,此时需要再 </Host> 上写虚拟的路径(既实际访问其他路径,该路径虚拟出现在webapps下),
在下面添加
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"><Context docBase="F:\view" path="/view" />
</Host>
path="/view" 为虚拟路径,表示在webapps下虚拟出一个view的文件夹,docBase="F:\view" 表示项目实际存在的路径。
在 F:\view 目录下,粘贴一份 WEB-INF 文件夹。将其中的web.xml文件中 <welcome-file-list> 进行重新编辑,如下:
<welcome-file-list>
<welcome-file>MySQLJOIN.html</welcome-file>
</welcome-file-list>
重启Tomcat后在浏览器输入 http://127.0.0.1:8080/view/MySQLJOIN.html
回车,即可展示保存到 F:\view 下的网页文件。
如果不想重启Tomcat直接实现,在 \apache-tomcat-8.5.58\conf\Catalina\localhost 文件夹下新建
项目名.XML,将上文中的Context 写入即可。
-
虚拟主机
本机在使用自有的 hosts文件 解析为指定的IP地址。 打开 conf/server.xml 文件,在 </Engine> 节点中,defaultHost="localhost" 改为 defaultHost="DShost" ,
<Engine name="Catalina" defaultHost="localhost">
---------------------------------------------------------------------
<Engine name="Catalina" defaultHost="DShost">
在Host 节点上新建一个同级别的Host节点,内容如下:
<Host appBase="F:\view" name="DShost" >
<Context docBase="F:\view" path="/" />
</Host>
C:\Windows\System32\drivers\etc,以管理员权限打开hosts文件,添加一行
127.0.0.1 DShost
重启Tomcat, 输入网址即可实现虚拟主机的效果(端口号改为80就可以不必输入端口号)http://localhost:8080http://localhost:8080
注意 ,path 如果写成 Path 就会报错 462.
二、JSP页面简单分析
1.JSP基础分析
代码如下(示例):
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
helleo this is JSP 03
<%
//想回车,在后面加 “<br/>” out.print(<br/>+" --this is jsp code***--->");
out.print(" --this is jsp code***--->");
%>
</body>
</html>
看起来像在HTML中加入<% %> 中,在其中输入Java脚本语言,可以在其中定义局部变量。也可以使用 <%! ...%>,用以定义全局变量和方法。或者纯粹的输出表达式 <%= ...%>,在其中直接写输出表达式 (不必加“;”)。但实际上,JSP不是直接转换为Java而是转换为格式为serverlet的Java, 在 E:\Tomcat\apache-tomcat-8.5.58\work\Catalina\localhost\ROOT\org\apache\jsp 的路径下,可以看到:
打开Java文件,即可看到:
所以JSP本质还是Java,是符合一定规范的Java脚本文件(serverlet)。
2.指令
JSP头部代码如下 :
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.Date"
%>
以page指令为例。在网页开头,有诸多属性。包括 import (导包指令)。导入Date包,在body中写入如下代码:
<body>
hello this is JSP 03
<%!
Date date = new Date();
%>
<%
out.print("<br>"+"--this is jsp code***--->"+date);
%></body>
显示效果如下:(没有 import会报错)
3.JSP内置对象
上述的 date 是导包进入文件还有通过new方式创建出来的。JSP 有九大内置对象。
request对象: 存储客户端向服务端发送请求信息。
String getParameter(String s) | 获取请求信息 |
String[] getParameterVaues(String s) | 获取多个请求信息 |
setCharacterEncoding(String encode) | 设置(post方式)编码格式,Tomcat8之后默认为utf-8 |
String getRequestDispatcher(".jsp").forward(request,response). | 请求转发等 |
ServerletContext getServerletContext() | 获取项目的ServerletContext对象 |
此外还有 response对象,session对象,application对象,out对象,pageContext对象,config对象,page对象,exception对象
response对象
void addCookie(Cookie cookie) | 服务端向客户端增加cookie对象 |
void sendReditect("*.jsp") | 重定向到指定的文件下 (throws IOException) |
void setContentType("encoding") | 设置服务端响应的编码 |
总结
通过对比 request和response的方法(请求转发 与 重定向),二者都是以服务端为中心工作的。无论是request的(服务端将客户端的)请求转发,还是(服务端将客户端)的请求重新定向,都需要理解 服务端--客户端 之间的关联。
response.sendRedirect("sucess.jsp"); 重定向
request.getRequestDispatcher("sucess.jsp").forward(request,response); 请求转发
请求转发 | 重定向 | |
地址栏是否改变 | 不变 | 变 |
是否保留第一次请求时的数据 | 保留 | 不保留 |
请求次数 (响应次数) | 1 | 2 |