jsp旅游网站源码分享 web前端旅游网站源代码

大家好,感谢邀请,今天来为大家分享一下jsp旅游网站源码分享的问题,以及和web前端旅游网站源代码的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

1、一个简单的HTTP服务器

在Web应用中,浏览器请求一个URL,服务器就把生成的HTML网页发送给浏览器,而浏览器和服务器之间的传输协议是HTTP,那么接下来我们看下如何用Java来实现一个简单的HTTP服务器。

具体代码实现

importjava.nio.charset.StandardCharsets;\nimportjava.io.*;\nimportjava.util.*;\nimportjava.net.*;\n\n/**\n*HTTP服务\n*/\npublicclassHttpServer{\npublicstaticvoidmain(String[]args)throwsIOException{\n//监听指定端口\nServerSocketss=newServerSocket(9901);\nSystem.out.println(&34;);\nfor(;;){\nSocketsock=ss.accept();\nSystem.out.println(&34;+sock.getRemoteSocketAddress());\n//开启线程处理接收到的socket数据\nThreadt=newHandler(sock);\nt.start();\n}\n}\n}\n\n/**\n*执行类\n*/\nclassHandlerextendsThread{\nSocketsock;\n\npublicHandler(Socketsock){\nthis.sock=sock;\n}\n\npublicvoidrun(){\ntry(InputStreaminput=this.sock.getInputStream()){\ntry(OutputStreamoutput=this.sock.getOutputStream()){\nhandle(input,output);\n}\n}catch(Exceptione){\ntry{\nthis.sock.close();\n}catch(IOExceptionioe){\n}\nSystem.out.println(&34;);\n}\n}\n\n/**\n*具体执行方法\n*处理http输入数据,转换输出\n*@paraminput\n*@paramoutput\n*@throwsIOException\n*/\nprivatevoidhandle(InputStreaminput,OutputStreamoutput)throwsIOException{\nSystem.out.println(&34;);\nBufferedReaderreader=newBufferedReader(newInputStreamReader(input,StandardCharsets.UTF_8));\nBufferedWriterwriter=newBufferedWriter(newOutputStreamWriter(output,StandardCharsets.UTF_8));\n//读取HTTP请求:\nbooleanrequestOk=false;\nStringfirst=reader.readLine();\nif(first.startsWith(&34;)){\nrequestOk=true;\n}\nfor(;;){\nStringheader=reader.readLine();\nif(header.isEmpty()){//读取到空行时,HTTPHeader读取完毕\nbreak;\n}\nSystem.out.println(header);\n}\nSystem.out.println(requestOk?&34;:&34;);\nif(!requestOk){\n//发送错误响应:\nwriter.write(&34;);\nwriter.write(&34;);\nwriter.write(&34;);\nwriter.flush();\n}else{\n//发送成功响应:\nStringdata=&34;color:red&34;;\nintlength=data.getBytes(StandardCharsets.UTF_8).length;\nwriter.write(&34;);\nwriter.write(&34;);\nwriter.write(&34;);\nwriter.write(&34;+length+&34;);\nwriter.write(&34;);//空行标识Header和Body的分隔\nwriter.write(data);\nwriter.flush();\n}\n}\n}\n复制代码

我们用javacHttpServer.java命令将java文件编译成可执行类,然后运行命令javaHttpServer

可以看到server已经正常启动,我们在网页上输入127.0.0.1:9901,可以看到已经能够正常返回了,是不是很简单呀。

2、使用Tomcat处理HTTP请求

从上面我们可以看到编写HTTP服务器其实是非常简单的,只需要先编写基于多线程的TCP服务,然后在一个TCP连接中读取HTTP请求,发送HTTP响应就可以了。

但是,要编写一个完善的HTTP服务器,还要考虑更多东西例如:

识别正确和错误的HTTP请求;识别正确和错误的HTTP头;IO异常处理;…

我们一直都在强调不要重复造轮子,Java发展了这么久处理TCP连接,解析HTTP协议这些底层工作早已有了现成的API。JavaEE提供的ServletAPI,我们可以使用ServletAPI编写自己的Servlet来处理HTTP请求,

接下来我们看一个简单的例子

importjava.nio.charset.StandardCharsets;\nimportjava.io.*;\nimportjava.util.*;\nimportjava.net.*;\nimportjava.io.PrintWriter;\nimportjavax.servlet.ServletException;\nimportjavax.servlet.annotation.WebServlet;\nimportjavax.servlet.http.HttpServlet;\nimportjavax.servlet.http.HttpServletRequest;\nimportjavax.servlet.http.HttpServletResponse;\n\n//WebServlet注解表示这是一个Servlet,并映射到地址/:\n@WebServlet(urlPatterns=&34;)\npublicclassHelloServletextendsHttpServlet{\nprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)\nthrowsServletException,IOException{\n//设置响应类型:\nresp.setContentType(&34;);\n//获取输出流:\nPrintWriterpw=resp.getWriter();\nStringname=req.getParameter(&34;);\n//写入响应:\nif(null==name){\npw.write(&34;);\n}else{\npw.write(&34;+name+&34;);\n}\n//最后不要忘记flush强制输出:\npw.flush();\n}\n}

其中ServletAPI是一个jar包,我们需要通过Maven来引入它,才能正常编译。编写pom.xml文件如下

<projectxmlns=&34;\nxmlns:xsi=&34;\nxsi:schemaLocation=&34;>\n<modelVersion>4.0.0</modelVersion>\n<groupId>com.lzf.learnjava</groupId>\n<artifactId>web-servlet-hello1</artifactId>\n<packaging>war</packaging>\n<version>1.0-SNAPSHOT</version>\n\n<properties>\n<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n<maven.compiler.source>8</maven.compiler.source>\n<maven.compiler.target>8</maven.compiler.target>\n<java.version>8</java.version>\n</properties>\n\n<dependencies>\n<dependency>\n<groupId>javax.servlet</groupId>\n<artifactId>javax.servlet-api</artifactId>\n<version>4.0.0</version>\n<scope>provided</scope>\n</dependency>\n</dependencies>\n\n<build>\n<finalName>hello</finalName>\n</build>\n</project>

具体代码结构目录如下

Mavean打包出来的是war包,需要运行的话得先启动Web服务器,而Web服务我们最常用的就是Tomcat。首先我们到官网下载Tomcat服务器,解压后

Tomcat目录:

bin:存放启动和关闭tomcat脚本conf:存放不同的配置文件(server.xml和web.xml)doc:存放Tomcat文档lib:存放Tomcat运行需要的库文件(JARS)logs:存放Tomcat执行时的LOG文件webapps:Tomcat的主要Web发布目录(包括应用程序示例)work:存放jsp编译后产生的class文件

把hello.war复制到Tomcat的webapps目录下,Tomcat默认监听的8080的端口,可以通过修改conf/server.xml->Connector里的port属性来改变监听端口。然后切换到bin目录,执行startup.sh或startup.bat启动Tomcat服务器

网页上输入http://localhost:9903/hello/?name=Qc,成功访问!

接下来我们来分析Tomcat是如何处理一个HTTP请求的过程

首先我们先了解Tomcat的体系架构

参考上面的图解释下:

1.Server组件\n即服务器,每个tomcat程序启动后,就是一个server。\n\n2、Service组件\n一个Server可以包含多个Service,Service这是一种抽象的服务,它把连接器和处理引擎结合在一起。\n\n3、Connector组件:\n一个Service可以有多个Connector,Connector组件用于处理连接和并发。一般说来常见于server.xml\n中的连接器类型通常有4种:\n1)HTTP连接器2)SSL连接器3)AJP1.3连接器4)proxy连接器\n\n4、Engine组件:\nEngine是Servlet处理器的一个实例,即servlet引擎,其defaultHost属性是用来来为其定义一个接收所\n有发往非明确定义虚拟主机的请求的host组件。如前面示例中定义的:\n<Enginename=”Catalina”defaultHost=”localhost”>\n\n5、Host组件:\n位于Engine容器中,用于接收请求并进行相应处理的主机或虚拟主机.\n\n<!–自定义host,类似nginx反向代理功能/>–>\n<Hostname=&34;appBase=&34;>\n</Host>\n\n<!–如果一个主机有两个或两个以上的主机名,额外的名称均可以以别名的形式进行定义:–>\n<Hostname=&34;appBase=&34;unpackWARs=&34;>\n<Alias>bbbtc.test</Alias>\n</Host>\n\n\n6、Context组件:\nContext在某些意义上类似于apache中的路径别名,一个Context定义用于标识tomcat实例中的一个Web应用程序\n

了解了架构之后我们看请求过程

1、用户打开浏览器输入地址,请求被发送到本机端口9903,被在那里监听的CoyoteHTTP/1.1Connector获得。

2、Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。

3、Engine获得请求localhost:9903/hello/?name=Qc,匹配所有的虚拟主机Host。

4、Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)名为localhost的Host获得请求/hello/?name=Qc,匹配它所拥有的所有的Context。Host匹配到路径为/hello的Context(如果匹配不到就把该请求交给路径名为&34;的Context去处理)。

5、在它的mappingtable中寻找出对应的Servlet处理数据。

6、构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或doPost().执行业务逻辑、数据存储等程序。

7、Context把执行完之后的HttpServletResponse对象返回给Host。

8、Host把HttpServletResponse对象返回给Engine。

9、Engine把HttpServletResponse对象返回Connector。

10、Connector把HttpServletResponse对象返回给浏览器。

以上就是Tomcat处理一个HTTP请求的完整流程。

3、将Tomcat以Jar包的方式引入

Tomcat实际上也是一个Java程序,我们可以把Tomcat以Jar包的方式引入,然后自己编写一个main()方法,先启动Tomcat,然后让它加载我们的webapp就行。我们常用的SpringBoot框架采用的就是这样的方式。

首先我们需要先建一个项目web-servlet-hello-tomcat,编写pom.xml文件

<projectxmlns=&34;\nxmlns:xsi=&34;\nxsi:schemaLocation=&34;>\n<modelVersion>4.0.0</modelVersion>\n<groupId>com.lzf.learnjava</groupId>\n<artifactId>web-servlet-hello-tomcat</artifactId>\n<packaging>war</packaging>\n<version>1.0-SNAPSHOT</version>\n\n<properties>\n<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n<maven.compiler.source>8</maven.compiler.source>\n<maven.compiler.target>8</maven.compiler.target>\n<java.version>8</java.version>\n<tomcat.version>9.0.58</tomcat.version>\n</properties>\n\n<dependencies>\n<dependency>\n<groupId>org.apache.tomcat.embed</groupId>\n<artifactId>tomcat-embed-core</artifactId>\n<version>${tomcat.version}</version>\n<scope>provided</scope>\n</dependency>\n<dependency>\n<groupId>org.apache.tomcat.embed</groupId>\n<artifactId>tomcat-embed-jasper</artifactId>\n<version>${tomcat.version}</version>\n<scope>provided</scope>\n</dependency>\n</dependencies>\n\n<build>\n<finalName>hello</finalName>\n</build>\n</project>

然后,我们编写一个main()方法,启动Tomcat服务器

packagecom.lzf.learnjava.servlet;\n\nimportorg.apache.catalina.Context;\nimportorg.apache.catalina.WebResourceRoot;\nimportorg.apache.catalina.startup.Tomcat;\nimportorg.apache.catalina.webresources.DirResourceSet;\nimportorg.apache.catalina.webresources.StandardRoot;\n\nimportjava.io.File;\n\n/**\n*@authorliuzufa\n*/\npublicclassMain{\npublicstaticvoidmain(String[]args)throwsException{\n//启动Tomcat:\nTomcattomcat=newTomcat();\ntomcat.setPort(Integer.getInteger(&34;,9904));\ntomcat.getConnector();\n//创建webapp:\nContextctx=tomcat.addWebapp(&34;,newFile(&34;).getAbsolutePath());\nWebResourceRootresources=newStandardRoot(ctx);\nresources.addPreResources(\nnewDirResourceSet(resources,&34;,newFile(&34;).getAbsolutePath(),&34;));\nctx.setResources(resources);\ntomcat.start();\ntomcat.getServer().await();\n}\n}

除去前面的手动输出HTML的方法,我们还可以使用JSP。JSP是JavaServerPages的缩写,它的文件必须放到/src/main/webapp下,文件名必须以.jsp结尾,整个文件与HTML并无太大区别,但需要插入变量,或者动态输出的地方,使用特殊指令<%…%>。

JSP和Servlet有什么区别?其实它们没有任何区别,因为JSP在执行前首先被编译成一个Servlet。在Tomcat的临时目录下,可以找到一个hello_jsp.java的源文件,这个文件就是Tomcat把JSP自动转换成的Servlet源码。

4、总结

1、学会使用java编写一个简单http服务\n2、解释了Tomcat处理一次HTTP请求的完整流程\n3、将Tomcat以jar的方式引入项目中,学会了简单的JSP开发。

作者:xiao6zi470链接:https://juejin.cn/post/7067917428319223845

OK,关于jsp旅游网站源码分享和web前端旅游网站源代码的内容到此结束了,希望对大家有所帮助。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平