基于servlet网络编程
1.我们知道了基于http协议的网络编程模型和基于套接字的网路编程模型(相对于我的博客上写的),那么我们将使用更加便捷的servlet网络编程。
基于http协议的网络编程,我的博客上面需要我们自己写客户端,基于套接字的网络编程我的博客上面需要我们自己写客户端和服务器端,现在我们用servlet编程,不需要我们写客户端和服务器端,我们只需要在tomcat容器里写我们的处理程序就行,响应请求由tomcat来完成。
2.如何在tomcat上部署项目。打开tomcat文件,找到webapp文件里面的例子(既然我们需要tomcat来帮助我们响应请求,那么我们需要遵循tomcat中的规则)
一个web应用程序需要一个web-inf文件。web-inf中有三个文件不能少
除了web-inf,还需要有meta-inf文件(见hostmanager文件夹)
3.我们可以先直接在webapp文件夹下建立一个html文件,然后在浏览器端访问(尝试一下不用编写请求和回应请求的程序)
4.建立servlet程序。(servlet编程需要的api是javaee的api,我们可以在网上下载)
1 import javax.servlet.http.HttpServlet; 2 import javax.servlet.http.HttpServlet;import java.io.IOException; 3 import java.io.*; 4 import javax.servlet.http.HttpServletRequest; 5 import javax.servlet.http.HttpServletResponse; 6 public class httpservlet extends HttpServlet { 7 8 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException{ 9 PrintWriter out =resp.getWriter(); 10 out.println("<html><head><head/><body><h1>hello<h1><body/><html/>"); 11 out.flush(); 12 out.close(); 13 } 14 15 16 17 18 19 20 }
5.编译这段代码我们会发现报错,找不到类。因为javase的jdk不能满足javaee的类,我们要找的jar包可以在tomcatlib文件中找到。
6.将这个jar包配置环境
将这个jar包的绝对路径放入classpath中
将这个jar包复制粘贴到jdk-jre-lib-ext文件夹中
7.再有问题就是自己写的代码有错误了(这个问题很常见,我经常这样,以为环境配置错了,最后发现代码中少import了包)
8.建立web项目
Web-inf文件是
9.这时从浏览器找资源(用于测试一下)(web.xml需要写内容)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 5 http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 6 version="4.0" 7 metadata-complete="true"> 8 9 </web-app>
10.浏览器中输入
http://127.0.0.1:8080/myweb/test3.html 测试是否能用
11.找到我们编译好的class文件,放入我们建好的web项目的classes文件夹下面(tomcat自动帮我们调用)
12.配置web-xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 5 http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 6 version="4.0" 7 metadata-complete="true"> 8 9 10 11 <servlet> 12 <servlet-name>myservlet</servlet-name> 13 <servlet-class>httpservlet</servlet-class> 14 </servlet> 15 16 17 <servlet-mapping> 18 <servlet-name>myservlet</servlet-name> 19 <url-pattern>/happy</url-pattern> 20 </servlet-mapping> 21 </web-app>
13.则可以通过浏览器端访问http://127.0.0.1:8080/myweb/happy ,就可以访问到我们在java文件中编写的html文件
14.那为什么不直接访问html文件呢,通过http://127.0.0.1:8080/myweb/test3.html,为什么要将页面写在我们编写的类里面呢。因为我们需要在客户访问页面之前做一些判断,如果将文件直接暴露出来让任何人都能使用,这就只是一种简单的垃圾存储了,没有任何的意思。所以servlet的意义就在于一种模型,能进行客户判断,选择合适的页面发送给客户。Web.xml文件的作用就在于tomcat不可能完全帮助我们来响应客户的请求,因为它不知道我们给客户什么,所以我们需要跟tomcat之间有信息交流,告诉tomcat它需要做什么,响应什么样的请求,还有我们是谁,什么时候去调用我们自己。