JavaWeb应用程序的基础目录结构如下:
web.xml文件:web项目描述文件.
WEB-INF目录下的文件都是安全的。不可以直接通过在地址栏输入地址的方式访问。
发布第一个web应用程序:
在tomcat的虚拟目录中webapps中建立个符合上述结构的文件结构,即是一个JavaWeb应用
将项目发布成默认项目
在tomcat\webapps目录下,包含一个ROOT目录,此目录就是Tomcat的默认项目。
1)将自己的项目发布以后,修改成ROOT即可以作为默认项目使用。
2)或是建立一个新的虚拟目录,然后在将自己的项目部署到新的虚拟目录下,并修改为ROOT。
HTTP协议
HTTP协议:(HyperTextTransferProtocol)
超文本传输协议,是关于如何在网络上传输超级文本HTML的协议。
在分层的网络体系结构中,HTTP协议属于应用层,建立在TCP/IP传输层协议的基础之上。
HTTP协议默认使用80端口。
HTTP协议的版本为1.0和1.1,目前广泛使用的是1.1版本。
URL:Uniform Resource Locator 统一资源定位。是专门为网络上的资源位置而设置的一种编址方式。url一般包含3个部分组成:
应用层协议。
主机IP地址或是域名。
资源所在的路径或是文件名。http://ip域名
如:协议://Ip或是域名[:端口]/资源名
示例:http://www.baidu.com/index.html
示例:http://127.0.0.1:8080/index.jsp
客户机通过HTTP与服务器一次通讯
HTTP请求/响应
HTTP请求/响应格式:
通过HTTP请服务器请求数据,有严格的定义,称之为请求的格式。
服务器返回的数据,也有严格的定义,称之为响应格式。
HTTP请求类型
HTTP常用的请求方式包括:
GET-最为常见,但发送的数据量很小,发送的数据直接包含到url的后面。4K
POST-包含大量数据,数据在请求正文中通过表单进行提交。
HEAD,PUT,DELETE三种Tomcat服务器默认都不支持。常用的只有前两种。
GET与POST请求的区别:
GET:发送到服务器的数据出现在URL的后面。最多不能超过1K.如:http://localhost:8080/helloWeb?name=itcast&sex=man&..
POST:发送到服务器的数据会出现有请求的正文部分。数据量不受限制。如:
Http请求的格式:
Http请求有三部分组成:
请求首行 GET /helloWeb?name=Jack HTTP/1.1
请求头 …..
请求的正文。name=Jack&age=90
POST /a.html HTTP/1.1 //请求行
Accept: / //客户端支持的返回类型
Referer: http://localhost:2046/b.html //客户端的网址
Accept-Language: zh-cn //客户端的语言类型
User-Agent: Mozilla/4.0 //客户端的浏览器类型
Accept-Encoding: gzip, deflate //客户端支持的数据压缩类型
Host: localhost:2046 //服务器的地址
Connection: Keep-Alive //是否保持连接,可选的值为Keep-alive|close
[必须的一行空行]
name=itcast&pwd=1234 //请求的正文,如果是POST请求则
请求头讲解:所有的信息都在request中
Accept: / 说明支持的数据类型
Referer: http://localhost:9999/itcast/a.html //从哪儿来的,可以防止非法引用连接
Accept-Language: zh-cn //支持的语言
User-Agent: Mozilla/4.0 //说明使用的浏览器的版本信息
Accept-Encoding: gzip, deflate //客户端支持压缩格式
Host: localhost:9999 //访问的主机
Connection: Keep-Alive //在请求完成后是否断开连接。可选值另有,HTTP/1.1 :close
Cookie : //缓存在客户端的数据(数据量最大4K)
Content-Length: 8 //发送的字节长度
Cache-Control: no-cache //是否缓存数据
Content-Type: application/x-www-form-urlencoded //内容类型,此意为表单
http响应的格式:
HTTP响应的格式也有三部分组成
响应首行,也叫状态行。 HTTP/1.1 404(状态码) not found
响应头
[空行]
响应正文(Response Content)。
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=D6241588E2D14A562CB5BD6ECD0B3DF3
Content-Type: text/html;charset=GBK
Content-Length: 200
Date: Mon, 30 May 2011 09:02:03 GMT
< html>< head>Itcast< head>…
响应头格式讲解:
HTTP/1.1 200 OK //状态码200是正常返回数据
Location:http://localhost:8080/aa/abc.jsp //跳到哪个页面即重定向。等同于sendRedirect(),状态码为302
Server: Apache-Coyote/1.1 //服务器类型
Content-Type: text/html //正文类型
Content-Length: 8 //返回字节的长度
Content-Encoding:gzip //服务器端的压缩格式,用于通知客户端如何解压
Date: Tue, 24 May 2011 10:42:28 GMT
Refresh:1;url=http://www.baidu.com //1秒钟以后刷新到某个地址
Content-Disposition:attchment;filename=“car.jpg” //下载文件时指定下载的文件
Transfer-Encoding: chunked //数据是一块一块的方式发送给客户端的
Expires:-1 //不需要缓存本次响应的数据
Cache-control:no-cache //针对不同版本的浏览器所以必须三个都用
Pragma:no-cache
index.jsp主页:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>第一个web项目的主页</title>
</head>
<body>
<h2>主页主页</h2>
<h2>湖南长沙</h2>
<h3>发布方式一......</h3>
<hr/>
<h2>表单提交的GET/POST方式</h2>
<!-- 默认的是get方式
<form action="HelloServlet">
-->
<form action="HelloServlet" method="post">
姓名:<input type="text" name="name"/><br/>
密码:<input type="password" name="pwd"/> <br/>
<input type="submit" value="登陆"/>
</form>
<h3>非WEB-INF安全目录内的文本可以以访问路径直接访问文本,早期的jsp</h3>
<form action="jsps/reg.jsp">
姓名:<input type="text" name="name"/><br/>
密码:<input type="password" name="pwd"/> <br/>
<input type="submit" value="登陆" />
</form>
<h2>HTTP协议演示:利用referer属性实现防止盗链</h2>
<a href="show">欣赏图片</a>
<br/><br/><br/><br/>
</body>
</html>
HelloServlet.java
package cn.hncu.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String name=req.getParameter("name2");
String pwd=req.getParameter("pwd");
resp.getWriter().print(name+","+pwd);
}
}
reg.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>结果注册页面</title>
</head>
<body>
<h2>结果登陆页面</h2>
<%
//GET方式:表单提交信息显示在url处(也可以在url直接添加Parameter),从url处获取Parameter
//POST方式:表单提交信息显示在请求文本处,从表单处获取Parameter
String name=request.getParameter("name");
String pwd=request.getParameter("pwd");
out.print("登录信息:<br/>");
out.print(name+","+pwd);
%>
<br/>
<!-- 网页内的"/"代表helloWeb外面的目录,所以网页文本路径一定要加项目根目录:"/helloWeb/" -->
<!-- 而java代码内的"/"代表项目根目录,所以只要写文本存在目录就好了 -->
<img alt="" src="/helloWeb/images/1.jpg">
</body>
</html>
ShowServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShowServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// resp.setContentType("text/html;charset=utf-8");
resp.setHeader("Content-Type", "text/html;charset=utf-8");
//获取请求头中的referer信息--来源于哪里
String strRef=req.getHeader("referer");
System.out.println(strRef);
PrintWriter p=resp.getWriter();
p.print("<html><head>湖南城院</head><body>");
String str="";
if(strRef==null){
str="请先去看广告...";
}else{
if(strRef.contains("helloWeb")){
// 网页内的"/"代表helloWeb外面的目录,所以网页文本路径一定要加项目根目录:"/helloWeb/"
// 而java代码内的"/"代表项目根目录,所以只要写文本存在目录就好了
str="<img src='images/1.jpg'/>"+
"<img src='images/2.jpg'/>"+
"<img src='images/3.jpg'/>"+
"<img src='images/4.jpg'/>";
}else{
str="来自盗链...";
}
}
// resp.getWriter().print(str);
p.print("湖南益阳...<br/>");//如果没有设置协议,,这里就会显示乱码
p.print(str);
p.print("<br/>湖南益阳...<br/>");//如果没有设置协议,,这里就会显示乱码
p.print("</body></html>");
}
}
配置文件web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name></display-name>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>cn.hncu.servlet.HelloServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>ShowServlet</servlet-name>
<servlet-class>cn.hncu.servlet.ShowServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello.asp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ShowServlet</servlet-name>
<url-pattern>/show</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>