1.JAVAWEB入门
本章目标:
- Web开发的基本概念
- 安装配置Tomcat
- 开发第一个JavaWeb项目
- Servlet的入门应用
本章内容:
一、 Web开发的基本概念
1、什么是Web开发
Web开发是相对于传统的Windows应用程序开发而言的。Web程序一般以浏览器为运行平台,我们可以把制作一个网站理解为Web开发。
Web开发的特点:
- Web是图形化的和易于导航的(navigate)
- Web与平台无关
- Web是分布式的
- Web是动态的
2、Web开发常用技术
技术 | 介绍 |
---|---|
PHP | 1994年,Rasmus Lerdorf发明了专用于Web服务器端编程的PHP(Personal Home Page Tools)语言。PHP语言将HTML代码和PHP指令合成为完整的服务端动态页面,Web应用的开发者可以用一种简便、快捷的方式实现动态Web功能。 |
ASP | 1996年,Microsoft借鉴PHP思想,在其Web服务器IIS 3.0中引入了ASP技术。ASP使用的脚本语言是我们熟悉的VBScript和JavaScript。借助Microsoft Visual Studio等开发工具在市场上的成功,ASP迅速成为了Windows系统下Web服务端的主流开发技术。 |
JSP | 以Sun公司为首的Java阵营于1997年推出了Servlet技术,1998年,JSP技术诞生。Servlet和JSP的结合(还可以加上JavaBean技术)让Java开发者同时拥有了类似CGI程序的集中处理功能和类似PHP的HTML嵌入功能。此外,Java的运行时编译技术也大大提高了Servlet和JSP的执行效率,这也正是Servlet和JSP被后来的J2EE平台吸纳为核心技术的主要原因之一。 |
3、Web应用概述
随着Internet的发展,基于HTTP协议和HTML标准的Web应用的迅速增长,人们的生活不知不觉中被网络改变了。在网络普及之前,我们购买图书要去书店,给亲人汇钱要去邮局或者银行……而现在,一切都是这么便捷,你可以在网上购买图书,汇款,交电话费等等,而支撑这些网上业务的就是各种各样的Web应用。
过去: | 现在 |
---|---|
写 信:邮票 + 信封 + 信纸 + 漫长的等待 缴话费:去营业厅排队交钱 买 书:去书店找书,找到书后排队付账…… | 写 信:电子邮件几分钟就搞定 缴话费:网上银行/通信公司网上营业厅 买 书:网上书店+送货上门…… |
4、服务架构
4.1、C/S
C/S 是 Client/Server 的缩写。服务器通常采用高性能的 PC、工作站或小型机,并采用大型数据库系统,如 Oracle、Sybase、InFORMix 或 SQLServer。客户端需要安装专用的客户端软件;
4.2、B/S
B/S是 Brower/Server 的缩写,客户机上只要安装一个浏览器(Browser),如 Firefox 或 IE,服务器安装 Oracle、Sybase、InFORMix 或 SQLServer 等数据库。在这种结构下,用户界面完全通过 WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过WebServer 同数据库进行数据交互;
4.3、C/S 与 B/S 区别
1、硬件环境不同
C/S 一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务; B/S 建立在广域网之上的,不必是专门的网络硬件环境,例与电话上网,租用设备.信息自己管理.有比 C/S 更强的适应范围,一般只要有操作系统和浏览器就行;
2、对安全要求不同
C/S 一般面向相对固定的用户群,对信息安全的控制能力很强.一般高度机密的信息系统采用 C/S 结构适宜.可以通过 B/S 发布部分可公开信息; B/S 建立在广域网之上,对安全的控制能力相对弱,可能面向不可知的用户;
3、对程序架构不同
C/S 程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑; B/S 对安全以及访问速度的多重的考虑,建立在需要更加优化的基础之上比 C/S 有更高的要求 B/S 结构的程序架构是发展的趋势,从 MS 的.Net系列的 BizTalk2000Exchange2000 等,全面支持网络的构件搭建的系统.SUN和 IBM 推的 JavaBean 构件技术等,使 B/S 更加成熟;
5、Web应用开发模式
web应用的开发主要有两种模式:前后端不分离、前后端分离
5.1、前后端不分离
在互联网早期,web应用开发采用前后端不分离的方式。它是以后端直接渲染模板完成响应的一种开发模式。
浏览器向服务器发起请求,服务器接收到请求后去数据库中获取数据,然后渲染html模板并返回渲染后的html数据,或者返回一个重定向。
绝大部分工作都在后端进行处理,客户端(浏览器)只负责页面的展示和用户交互。
这种开发方式有如下特点:
- 一般一个应用只需要一个后台服务器
- 客户端只需要请求不同的页面,服务器会完成页面上的所有数据逻辑,所以http请求次数较少
- 每个请求都是一个html,会有大量的冗余数据
- 开发时,前后端代码耦合高,出了问题责任不明确
- 在开发单纯的网站时,效率非常高,有利于seo
- 响应数据是html,只能适应单一客户端,当需要多端支持时如要单独开发
5.2、前后端分离
随着ajax技术的出现,可以在不刷新页面向服务器发送http请求,所以又出现了前后端分离的开发模式。
后端只要开发接口即可,前端可以通过发起ajax请求,拿到后端的数据,渲染和怎样调用接口的事情,交给前端。
这种开发方式有如下特点:
- 是目前web开发的主流模式
- 需要静态文件服务器和后端接口服务器
- 后台服务器只提供的数据接口的服务,响应的往往是json数据
- 页面是动态渲染的,爬虫无法爬取页面的有效信息,不利于seo
- 开发时,前后端责任分工明确
- 前后端解耦合,可以同时开发,提高开发效率
- 一个后台即可满足网站、app、小程序等多种应用的需要
6、HTTP协议
6.1、HTTP协议:
定义服务器端和客户端之间文件传输的沟通方式(RFC 2616描述了HTTP协议的具体信息),这个协议已经成为浏览器和Web站点信息交换之间的标准http传输过程:
可以看作客户端的请求者向服务器请求一个文件
6.2、HTTP最基本的过程是:
- 客户端连接一个主机;
- 服务器接收连接;
- 客户端请求一个文件;
- 服务器发送一个应答;
- 断开连接(因此http协议属于无状态协议,在客户端与服务器之间不保持连接状态)
- http协议的默认端口80
6.3、IP/域名
- 本地主机:localhost
- 局域网域名:机器名
- Internet域名:DNS
- 本地IP:127.0.0.1
6.4、HTTP协议请求方式
HTTP协议可以使用多种方式发送请求信息,常见的有:
- GET 方法:用于检索信息(如文档、图表或数据库请求结果),请求的页面可以被设置为书签和使用电子邮件发送请求信息,常作为查询字符串发送。
- POST 方法:用于发送敏感信息(如信用卡号)或要保存到数据库中的信息,请求的页面不能设置为书签或不能通过电子邮件发送,发送的数据没有大小限制。
- 状态代码:在服务器发回的响应信息中包含一些状态代码,说明响应的内容,例如:200(访问成功)、404(请求的Web资源不存在)、500(应用程序内部错误)
7、JavaWeb的相关技术
1997年,Sun公司推出了Servlet技术,用以实现动态网页功能,次年推出了Jsp技术,此时允许在HTML页面中嵌入Java脚本代码,Jsp简化了Servlet开发动态网页的繁杂编码过程。
JavaWeb主要包含以下:
- Servlet :Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。
- JSP :(Java Server Pages)是由Sun Microsystems公 司倡导、许多公司参与一起建立的一种动态网页技术 标准 JavaBean :
- JavaBean: 是一种JAVA语言写成的可重用 组件
- ……
8、Java Web服务器
WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务;
Web服务器具体以下功能:
- Web服务器传送页面供客户的浏览器浏览,然而通常情况下Web服务器专门处理HTTP请求(request),还需要使用附加的应用程序服务器是通过各种程序来为客户提供商业逻辑;
- Web服务器可以解析HTTP协议,当Web服务器接收到一个HTTP请求,会返回一个HTTP响应(response),例如送回一个静态的HTML页面或者图片;
- 但更多时候为了处理一个请求(request),Web服务器把产生动态响应的工作交给其它一些程序,例如CGI(公共网关接口)程序,JSP(JavaServer Pages),Servlets,ASP(Active Server Pages)或者一些其它的服务器端(server-side)技术。
- 无论是哪一种,这些服务器端的程序都需要产生一个HTML格式的响应来让浏览器可以浏览。
二、安装配置Tomcat
1、Tomcat简介
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。
下载地址:http://tomcat.apache.org/
下载之后直接解压就可以了,解决之后目录如下:
2、Tomcat目录结构
bin:存放windows或Linux平台上启动和关闭Tomcat的脚本文件
webapps:Tomcat的主要Web发布目录,默认情况下把Web应用程序放于此目录下,可以包含多个Web应用程序的目录
conf(配置文件所在的目录)
log(日志信息所在目录)
lib(jar包所在的目录)
work(存放项目在运行过程中产生的文件)
temp(临时文件所在的目录)
3、启动Tomcat
进入到bin文件夹,会看到如下两个命令,双击即可启动Tomcat
启动之后不要关闭黑窗口,要保留,不然服务就停止了
4、访问Tomcat服务器
Tomcat的默认端口是8080
请求方式为:协议://ip地址:端口号
请求路径为:http://localhost:8080/
启动Tomcat出现的问题与解决方式:
- 运行startup.bat时一闪而过。解决方法:需要在环境变量中配置JAVA_HOME
- 访问不到项目中的页面
- tomcat启动被停掉了,不要关闭启动窗口
5、Tomcat端口号的配置
- Tomcat的配置文件:Tomcat安装目录.xml
- 修改8080为8090
- 保存,并重新启动tomcat
6、设置用户(了解)
在tomcat-users.xml中可以设置用户管理:
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>
</tomcat-users>
7、Web.xml
Web应用的部署描述文件是在Servlet规范中规定提供的,用来提供JavaWeb应用的配置信息。服务器在启动和加载Web应用时会首先读取这个文件,其中可以定义的内容包括:Servlet、过滤器、欢迎文件列表、标签库、会话超时等等
……
<session-config>
<session-timeout>30</session-timeout>
</session-config>
……
<welcome-file-list>
<welcome-file>first.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
……
8、解决控制台乱码问题
三、开发第一个JavaWeb项目
1、创建新项目
Archetype->maven-archetype-webapp
2、Tomcat中部署项目
1、给项目配置tomcat,如下:
2、在带出的弹出框中点击【+】号,如下图:
注意:这里要找到的是tomcat Server而不是tomEE Server
3、在idea给出的新界面中配置tomcat:
4、下面就是将我们的项目下添加到这个服务器中,如下:
5.同时选择【artifact】后,是可以修改项目访问时的上下文的,如下图:
至此,项目就配置tomcat。点击【ok】就可以发布项目了。如下:
访问地址为:http://localhost:8080/helloWeb/
3、替换Web.xml文件内容
小坑,创建maven项目默认的Dynamic Web Module版本为2.3;但在2.5之前的web.xml文件中的头定义中,el表达式默认是忽略不解析的,故需要自己声明解析el表达式,或者将web.xml文件的跟标记进行修改
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
</web-app>
4、运行web项目
RUN AS RUN ON SERVER—>发布项目并启动tomcat服务
开发环境下本地的目录结构
访问路径(URL):协议://ip地址:端口号/项目根目录/具体资源的路径
5、部署后位置
C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2023.3\tomcat
四、Servlet的入门应用
Servlet作用:是一个运行在服务器上的java程序,处理请求和响应
1、添加依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
2、建立servlet
继承HttpServlet
/** * 1,作用:接收请求,处理,给客户端进行响应
* 2.就是一个java类,是继承了HttpServlet的java类
* 3.必须配置一个访问路径,在web.xml中配置
* 4.使用url进行访问,在地址栏中输入url的时候,会根据web.xml文件中配置的信息定位到应该去执行哪一个Servlet中的方法
* * */
public class HelloServlet extends HttpServlet{
//处理get请求
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("服务器端收到了来自于客户端的请求");
}
//处理post请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
3、配置 servlet(在web.xml中配置)
Servlet程序必须在部署描述符文件中正确配置才能被Servlet容器加载、调用。配置时需要使用<servlet>
、<servlet-mapping>
两个元素。前者在Servlet容器中注册Servlet类文件,并通过一个名字进行标识;或者指定对那些样式的URL请求路径调用该Servlet。
<servlet>
<servlet-name>helloServlet</servlet-name>
<!-- HelloServlet的全名-->
<servlet-class>com.woniuxy.controller.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 映射的servlet的name-->
<servlet-name>helloServlet</servlet-name>
<!-- 访问时为http://localhost:8080/项目名/hello-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
注意:url-pattern最前面的/代表的是web项目的根目录
4、给客户端浏览器响应内容
public class HelloServlet extends HttpServlet{
//处理get请求
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
//System.out.println("服务器端收到了来自于客户端的请求");
//设置响应的内容的类型和编码
resp.setContentType("text/html;charset=utf-8");
//得到一个给客户端浏览器写内容的流对象
PrintWriter out=resp.getWriter();
//写
out.print("<h1>你好,客户端</h1>");
out.print("<h1>你好,客户端</h1>");
out.flush();
out.close();
}
//处理post请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
采用第一种配置方式方式进行请求
请求路径为:http://localhost:8080/shop/hello
<servlet>
<servlet-name>hs</servlet-name>
<!-- HelloServlet的全名-->
<servlet-class>com.woniuxy.servlets.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hs</servlet-name>
<!-- /:代表的是web项目的根目录。在开发环境下相当于webcontent目录 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
5、@WebServlet
为了简化 Servlet 的配置,Servlet 3.0 中增加了注解支持,例如:@WebServlet、@WebInitParm 、@WebFilter 和 @WebLitener 等,这使得 web.xml 从 Servlet 3.0 开始不再是必选项了
@WebServlet用于将一个类声明为 Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为 Servlet。该注解具有下表给出的一些常用属性(:
属性名 | 类型 | 标签 | 描述 | 是否必需 |
---|---|---|---|---|
name | String | <servlet-name> |
指定 Servlet 的 name 属性。 如果没有显式指定,则取值为该 Servlet 的完全限定名,即包名+类名。 | 否 |
value | String[ ] | <url-pattern> |
该属性等价于 urlPatterns 属性,两者不能同时指定。 如果同时指定,通常是忽略 value 的取值。 | 是 |
urlPatterns | String[ ] | <url-pattern> |
指定一组 Servlet 的 URL 匹配模式。 | 是 |
loadOnStartup | int | <load-on-startup> |
指定 Servlet 的加载顺序。 | 否 |
initParams | WebInitParam[ ] | <init-param> |
指定一组 Servlet 初始化参数。 | 否 |
asyncSupported | boolean | <async-supported> |
声明 Servlet 是否支持异步操作模式。 | 否 |
description | String | <description> |
指定该 Servlet 的描述信息。 | 否 |
displayName | String | <display-name> |
指定该 Servlet 的显示名。 | 否 |
vlaue 或者 urlPatterns 通常是必需的,且二者不能共存,如果同时指定,通常是忽略 value 的取值)
3、注解配置
-
注解配置
@WebServlet(urlPatterns = {"/simple"}, asyncSupported = true, loadOnStartup = -1, name = "SimpleServlet", displayName = "ss", initParams = {@WebInitParam(name = "charset", value = "utf-8")},asyncSupported = true) public class SimpleServlet extends HttpServlet{ … }
注意:路径必须以/开头
也可以配置多个路径
urlPatterns = {"/simple", "/*" }
如此配置之后,就可以不必在 web.xml 中配置相应的
和 元素了,容器会在部署时根据指定的属性将该类发布为 Servlet。它的等价的 web.xml 配置形式如下
-
xml配置
<servlet> <display-name>ss</display-name> <servlet-name>SimpleServlet</servlet-name> <servlet-class>com.woniuxy.controller.SimpleServlet</servlet-class> <load-on-startup>-1</load-on-startup> <async-supported>true</async-supported> <init-param> <param-name>charset</param-name> <param-value>utf-8</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>SimpleServlet</servlet-name> <url-pattern>/simple</url-pattern> </servlet-mapping>
本文来自博客园,作者:icui4cu,转载请注明原文链接:https://www.cnblogs.com/icui4cu/p/18843133