JavaEE--JavaWeb应用程序

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>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值