JavaEE--JavaWeb应用程序

来源:互联网 发布:诺维斯基体测数据 编辑:程序博客网 时间:2024/05/18 18:20

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 0