2014-08-08 日志

本文详细介绍了Tomcat的使用、HTTP协议的基础知识,包括客户端/服务器结构、静态与动态资源的区别、Web服务器的选择与配置,以及如何通过MyEclipse创建并部署Web项目。此外,还讲解了如何配置外部应用、设置虚拟主机以及使用MyEclipse进行Web项目管理。重点突出了HTTP协议在请求与响应过程中的关键要素,如请求与响应的内容、常见头信息与状态码的解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天讲了Tomcat的使用和Http协议。

软件体系结构


1. C/S:Client/Servlet,例如QQ就是CS结构
需要编写服务器端程序和客户端程序。
缺点:更新需要两端,总要求客户下载新的客户端程序
优点:安全性比较好


2. B/S:Browser/Server
缺点:安全性较差
优点:只需要编写服务器端程序


3. Web资源
 * 静态资源:html、css、javascript、图片等;
 * 动态资源:javaweb的动态资源有jsp/servlet,其他web程序动态资源有asp、php等。


4. 静态资源和动态资源的区别
 * 客户端访问服务器静态资源,服务器直接响应;
 * 客户端访问服务器动态资源,服务器需要先把动态资源转换成静态资源,再响应。


5. 客户端通过浏览器访问服务器
 * http://主机名:端口号/路径,例如:http://www.itcast.cn:80/index.html


6. Web服务器
 * Tomcat(Apache):当前应用最广的JavaWeb服务器,支持servlet规则,不支持JavaEE规范;
 * JBoss(Redhat红帽):支持JavaEE规则;
 * GlassFish(Orcale):支持servlet规则,应用不是很广;
 * Resin(Caucho):支持JavaEE规则,应用越来越广;
 * Weblogic(Orcale):要钱的!支持JavaEE规则,适合大型项目;
 * Websphere(IBM):要钱的!支持JavaEE规则,适合大型项目;


===================================
===================================
===================================


Tomcat


tomcat6支持servlet2.5
tomcat7支持servlet3.0


1. 启动关闭tomcat
  需要先配置JAVA_HOME
  * 双击%CATALANA_HOME%\bin\startup.bat
  * 双击%CATALANA_HOME%\bin\shutdown.bat


 访问服务器:http://localhost:8080/index.jsp
  因为服务器在本机上,所以主机名为localhost,表示本机
  tomcat的默认端口为8080
  index.jsp是主页


2. 修改端口号
  * 修改端口号,%CATALANA_HOME%\conf\server.xml,修改<Connector port="8080">,把8080修改了即可。
  * http协议默认端口为80,也就是说http://localhost,等同与http://localhost:80


  如果把Tomcat端口号修改成80,那么访问服务器就可以无需再给出端口号。


3. tomcat目录结构


 * bin:二进制可执行文件,例如startup.bat和shutdown.bat
 * conf:配置文件,例如:server.xml、context.xml、web.xml、tomcatusers.xml
 * lib:tomcat所需jar包
 * logs:日志文件
 * temp:存放tomcat运行时产生的临时文件,当tomcat关闭后,这个目录中的文件可以删除
 * webapps:这个目录下的每个文件夹对应一个JavaWeb应用程序
 * work:webapps下的应用程序在运行时会自动生成文件,就在work目录下。work目录删除了也没问题,但再次运行应用程序还要再生成work目录和文件。


4. 创建JavaWeb目录:hello
 * 在webapps目录下创建一个hello目录,hello目录就是项目目录了;
 * 在hello目录下创建WEB-INF
 * 在WEB-INF下创建web.xml
 * 在WEB-INF下创建classes目录
 * 在WEB-INF下创建lib目录
 * 在hello目录下创建index.html


  在web.xml文件中添加如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
</web-app>


  在index.html中添加如下内容:
<html>
  <head><title>index.html</title></head>
  <body>
    <h1>hello主页</h1>
  </body>
</html>
  启动tomcat,打开客户端访问http://localhost:8080/hello/index.html


===================================


配置外部应用
  外部应用既是把应用程序不放到Tomcat的wabapps目录下!而已放在外面,例如:F:/hello


1. 在conf/server.xml下配置,指定外部应用的路径。


<Host name="localhost" appBase="webapps"
      unpackWARs="true" autoDeploy="true">
      <Context path="itcast_hello" docBase="F:/hello"/>
</Host>


  * 在<Host>元素下添加<Context>元素,path为URL访问路径,docBase为外部应用的目录。
  * 在浏览器地址栏中访问:http://localhost:8080/itcast_hello/index.html


2. 在conf/catalana/localhost下添加配置文件,指定外部应用路径
  * 在conf/catalana/localhost目录下创建itcast_hello.xml文件,其中itcast_hello就是URL访问路径
  * 在itcast_hello.xml文件中添加:<Context docBase="F:/hello"/>,docBase指定外部应用的目录。


3. 缺省web应用
  * 在webapps目录下有一个ROOT目录,它是缺省web应用,访问这个应用的路径:http://localhost:8080/index.jsp
  * 如果把web应用的内部放到webapps/ROOT下,访问URL路径中不用给出应用名称。


4. 配置虚拟主机
  希望:http://www.itcast.cn访问web应用。
  * 这需要把域名http://www.itcast.cn映射成IP地址:127.0.0.1
  * 需要把tomcat端口号修改为80
  * 需要在server.xml中配置主机,并指定主机的应用目录
  * 在应用目录中添加名为ROOT的web应用。


  1). 找到C:\WINDOWS\system32\drivers\etc\hosts文件,添加127.0.0.1 http://www.itcast.cn
  2). 在conf/server.xml中修改端口为80
  3). 在conf/server.xml中添加<Host>元素
<Host name="www.itcast.cn" appBase="F:/myapps" unpackWARs="true" autoDeploy="true">
</Host>
    * name:指定该主机域名为www.itcast.cn
    * appBase:指定该主机的应用目录为F:/myapps
  4). 在F:/myapps下创建名为ROOT的web应用。


  访问:http://www.itcast.cn/index.html
  其中www.itcast.cn在本机上会被解析为127.0.0.1,但其他电脑访问时无效。


===================================


使用MyEcipse创建Web项目


1. MyEclipse指定Tomcat
2. MyEclipse创建Web项目
3. MyEclipse发布Web项目到Tomcat下
4. MyEclipse启动关闭Tomcat
5. MyEclipse对已发布项目的修改会对tomcat下项目的进行修改


  MyEcipse是JavaWeb应用的开发环境,而不是运行环境!运行还是在Tomcat下运行。


  使用MyEclipse打war包,把war包发布到Tomcat下。


===================================


Tomcat管理页面


===================================
===================================
===================================


HTTP协议


1. 安装HttpWatch


2. http协议
  * 即超文本传输协议。它规定了浏览器与服务器之间的通讯规则。
  * http是基于请求/响应模式的,所以分为请求协议和响应协议


===================================


请求


  请求内容就是客户端发送给服务器的数据!


1. 请求格式:
  * 请求首行
  * 请求头
  * 空行
  * 请求体(或称之为请求正文)


2. 请求方法
  * 常见请求方法有GET和POST
  * 在浏览器地址栏中发送请求,以及点击超链接都是GET请求
  * 提交表单可以发送GET请求,以及POST请求
  * GET请求没有请求体,但空行是存在的
  * POST请求是存在请求体的


3. 使用HttpWatch获取请求信息
  * 请求行:请求方法 请求路径 请求协议及版本,例如:GET /hello/index.jsp HTTP/1.1
  * 请求头:请求头就是一些键值,格式为:头:值,例如:Host:localhost
  * 空行:就是一个空行,用来与请求体分隔
  * 请求体:GET方法没有请求体,POST才有请求体,请求体内容为:参数名=参数值&参数名=参数值,其中参数值为中文,会使用URL编码。


4. 常见请求头
  * Host:请求的服务器主机名
  * User-Agent:客户端浏览器与操作系统相关信息
  * Accept-Encoding:客户端支持的数据压缩格式
  * Connection:客户端支持的连接方式
  * Cookie:客户端发送给服务器的“小甜点”,它服务器寄存在客户端的。如果当前访问的服务器没有在客户端寄存东西,那么就不会存在它!
  * Content-Length:请求体的长度
  * Referer:当前发出请求的地址,例如在浏览器地址栏直接访问服务器,那么没有这个请求头。如果是在www.baidu.com页面上点击链接访问的服务器,那么这个头的值就是www.baidu.com
    > 作用1:统计来源
    > 作用2:防盗链
  * Content-Type:如果是POST请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码。


===================================


响应


  响应就是服务器发送给客户端的数据!


1. 响应格式:
  * 响应首行
  * 响应头
  * 空行
  * 响应体(或称之为响应正文)


2. 状态码
  响应首行的结构:协议及版本 状态码 状态码说明,例如:HTTP/1.1 200 OK


  * 200:请求成功
  * 302:请求重定向
  * 304:请求资源没有改变
  * 404:请求资源不存在,属性客户端错误
  * 500:服务器内部错误


3. 响应头
  * Content-Type:响应正文的MIME类型,例如image/jpeg表示响应正文为jpg图片,例如text/html;charset=utf-8表示响应正文为html,并且编码为utf-8编码。浏览器会通过这一信息来显示响应数据
  * Content-Length:响应正文的长度
  * Set-Cookie:服务器寄存在客户端的“小甜点”,当客户端再次访问服务器时会把这个“小甜点”还给服务器
  * Date:响应时间,可能会有8小时的误差,因为中国的时区问题


  通知客户端浏览器不要缓存页面的响应头:
  * Expires:-1
  * Cache-Control: no-cache
  * Pragma: no-cache


  自动刷新响应头,浏览器会在3秒钟后自动重定向到传智主页
  * Refresh: 3;url=http://www.itcast.cn


4. 状态码304
 相关头信息
  * Last-Modified:响应头,表示当前资源的最后修改时间;
  * If-Modified-Since:请求头,表示缓存的资源最后修改时间;


 状态码304:表示访问的资源没有改变


  1. 客户端首次访问服务器的静态资源index.html,服务器会把index.html响应给客户端,而且还会添加一个名为Last-Modified的响应头,它说明了当前index.html的最后修改时间
  2. 客户端收到响应后,会把index.html缓存在客户端上,而且还会把Last-Modified缓存起来。
  3. 客户端第二次请求index.html时,会添加名为If-Modified-Since的请求头,它的值是上次服务器响应头Last-Modified,服务器获取到客户端保存的最后修改时间,以及当前资源的最后修改时间进行比较,如果相同,说明index.html没有改动过,那么服务器不会发送index.html,而是响应状态码304,即通知客户端资源没有改变,你可以使用自己的缓存。




















<think>好的,我现在需要帮助用户在Spring Boot中创建一个WebService接口,接收和解析特定的XML结构数据,并通过Postman测试。首先,我得回顾一下用户提供的引用内容,看看里面有哪些有用的信息。 用户提到引用了三个关于Spring Boot、CXF和Postman测试的资料。引用[1]和[2]都提到了添加依赖,特别是spring-boot-starter-web-services和cxf-spring-boot-starter-jaxws。引用[3]则涉及Postman测试时发送的SOAP XML请求结构。所以,我需要确保在项目中正确配置这些依赖,并设置WebService端点。 首先,项目的依赖配置。根据引用[1]和[2],用户需要添加Spring Boot的WebServices starter和CXF的依赖。可能需要检查CXF的版本,引用[2]中用的是3.2.7,所以需要确认当前是否可用或者是否需要更新。 接下来是创建WebService接口。通常,使用JAX-WS注解来定义服务端点和操作。例如,@WebService注解标记类,@WebMethod注解方法。然后,需要配置CXF的Servlet,以便发布服务。引用[2]提到了启动类的配置,可能需要在Spring Boot启动类中添加@EnableWebService,或者通过配置类注册端点。 然后是关于处理特定的XML结构。用户希望接口接收特定的XML数据,这意味着需要定义对应的请求和响应对象,这些对象需要使用JAXB注解进行XML绑定。例如,@XmlRootElement、@XmlElement等注解,确保Java对象和XML之间的正确转换。 在服务实现中,需要解析传入的XML到Java对象,处理业务逻辑,然后返回响应对象,由CXF自动转换为XML响应。这里需要注意命名空间的处理,可能与引用[3]中的示例类似,需要确保XML的命名空间与JAXB生成的匹配。 Postman测试部分,引用[3]展示了如何发送SOAP请求:设置POST请求,Content-Type为text/xml,Body中使用raw XML格式,并按照SOAP Envelope的结构构造请求。用户需要根据自己定义的WSDL结构来调整XML内容,可能涉及到操作名称、命名空间等。 可能还需要考虑WSDL的生成和访问。CXF通常会自动生成WSDL,通过访问服务的URL加上?wsdl参数。用户可能需要查看WSDL来确认请求的结构是否正确。 另外,配置CXF的Servlet路径,比如在application.properties中设置cxf.path,确保服务端点正确暴露。然后,在Postman中发送请求到正确的URL,例如http://localhost:8080/ws/api,并附上正确的SOAP XML。 需要验证各个步骤是否正确:依赖是否添加、端点配置是否正确、JAXB注解是否正确使用、Postman请求的格式是否正确。如果有错误,可能需要查看日志,检查是否缺少依赖或配置错误。 最后,生成相关问题,可能涉及性能优化、异常处理、安全配置等,帮助用户进一步了解WebService的开发。</think>以下是Spring Boot创建WebService接口并接收XML数据的完整实现步骤: ### 一、依赖配置(POM.XML) 必须添加CXF和WebService核心依赖: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.5.5</version> </dependency> </dependencies> ``` > 注意:建议使用CXF 3.5.x版本保证兼容性[^2] ### 二、定义数据模型 创建接收XML结构的Java对象: ```java @XmlRootElement(namespace = "http://example.com/demo") @XmlAccessorType(XmlAccessType.FIELD) public class UserRequest { @XmlElement(namespace = "http://example.com/demo") private String username; @XmlElement(namespace = "http://example.com/demo") private Integer userid; // getters/setters } ``` ### 三、创建服务端点 ```java @WebService(targetNamespace = "http://example.com/demo") public class UserServiceEndpoint { @WebMethod public String processUser(@WebParam(name = "userRequest") UserRequest request) { return "Received: " + request.getUsername() + " (ID:" + request.getUserid() + ")"; } } ``` ### 四、配置CXF端点(关键配置) ```java @Configuration public class WebServiceConfig { @Autowired private Bus bus; @Bean public Endpoint endpoint() { EndpointImpl endpoint = new EndpointImpl(bus, new UserServiceEndpoint()); endpoint.publish("/userService"); return endpoint; } } ``` 配置服务访问路径: ```properties cxf.path=/ws ``` ### 五、Postman测试步骤 1. **请求地址**:`POST http://localhost:8080/ws/userService` 2. **Headers**: - `Content-Type: text/xml` - `SOAPAction: ""` 3. **Body**(选择raw/XML): ```xml <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:demo="http://example.com/demo"> <soapenv:Header/> <soapenv:Body> <demo:userRequest> <demo:username>测试用户</demo:username> <demo:userid>1001</demo:userid> </demo:userRequest> </soapenv:Body> </soapenv:Envelope> ``` ### 六、验证结果 成功响应示例: ```xml <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns2:processUserResponse xmlns:ns2="http://example.com/demo"> <return>Received: 测试用户 (ID:1001)</return> </ns2:processUserResponse> </soap:Body> </soap:Envelope> ``` ### 注意事项 1. 命名空间必须与注解定义一致 2. 使用`@XmlElement`明确字段映射关系 3. CXF 3.5.x版本默认支持Spring Boot 2.x[^2] 4. WSDL可通过`http://localhost:8080/ws/userService?wsdl`获取
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值