JavaWeb(华清远见)
JavaWeb,是通过使用Java技术来解决相关web互联网领域的技术总和。web包括web服务器和web客户端两部分。
web开发相关知识:
- web,表示网页的意思,用于表示Internet主机上供外界访问的资源
- Internet上供外界访问的web资源分为:
- 静态web资源(如html页面):值web页面中供人们浏览的数据始终是不变的。
- 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间访问web页面,浏览的数据都不同。
- 静态web资源开发技术:jsp/Servlet、ASP、PHP等
web发展:静态和动态
静态web:
在静态WEB程序中,客户端使用WEB浏览器(IE、FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request),告诉服务器我现在需要得到哪个页面,所有的请求交给WEB服务器,之后WEB服务器根据用户的需要,从文件系统(存放了所有静态页面的磁盘)取出内容。之后通过WEB服务器返回给客户端,客户端接收到内容之后经过浏览器渲染解析,得到显示的效果。
静态WEB中存在以下几个缺点:
- web页面中的内容无法动态更新,所有的用户每时每刻看见的内容和最终效果都是一样的。
- 为了可以让静态的WEB的显示更加好看,可以加入了JavaScript以完成一些页面上的显示特效,但是这些特效都是在客户端上借助于浏览器展现给用户的,所以在服务器上本身并没有任何的变化。实现静态WEB客户端动态效果的手段:
- JavaScript(在实际的开发中JavaScript使用得最多。)
- VBScript
- 为了可以让静态的WEB的显示更加好看,可以加入了JavaScript以完成一些页面上的显示特效,但是这些特效都是在客户端上借助于浏览器展现给用户的,所以在服务器上本身并没有任何的变化。实现静态WEB客户端动态效果的手段:
- 静态WEB无法连接数据库,无法实现和用户的交互。
动态WEB
动态WEB中,程序依然使用客户端和服务端,客户端依然使用浏览器(IE、FireFox等),通过网络(Network)连接到服务器上,使用HTTP协议发起请求(Request),现在的所有请求都先经过一个WEB Server Plugin(服务器插件)来处理,此插件用于区分是请求的是静态资源(.htm或者是.htm)还是动态资源。
如果WEB Server Plugin发现客户端请求的是静态资源(.htm或者是.htm),则将请求直接转交给WEB服务器,之后WEB服务器从文件系统中取出内容,发送回客户端浏览器进行解析执行。
如果WEB Server Plugin发现客户端请求的是动态资源(.jsp、.asp/.aspx、.php),则先将请求转交给WEB Container(WEB容器),在WEB Container中连接数据库,从数据库中取出数据等一系列操作后动态拼凑页面的展示内容,拼凑页面的展示内容后,把所有的展示内容交给WEB服务器,之后通过WEB服务器将内容发送回客户端浏览器进行解析执行。
web应用程序:
WEB应用程序指供浏览器访问的程序,通常也简称为web应用。例如a.html 、b.html……多个web资源,这多个web资源用于对外提供服务,此时应把这多个web资源放在一个目录中,以组成一个web应用(或web应用程序)
一个web应用由多个静态web资源和动态web资源组成,如:html、css、js文件,Jsp文件、java程序、支持jar包、配置文件等等。
虚似目录的映射:Web应用开发好后,若想供外界访问,需要把web应用所在目录交给web服务器管理,这个过程称之为虚似目录的映射
Servlet
Servlet是sun公司制定的一种用于扩展web服务器功能的组件规范,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案。而具体的Servlet容器负责提供标准的实现。
- web服务器通常只能处理静态的资源(html , css , img , js…) , 为了解决一些动态的处理数据 ,就需要对web服务器的功能进行扩展,servlet就是用于处理动态数据的组件规范。
- 组件: 符号一定规范 ,完成部分功能的软件模块。这些软件模块需要放在容器中进行运行。比如:servlet , jsp就属于组件, tomcat就属于容器。 servlet必须放在tomcat容器中进行运行。
- 必须先启动tomcat, 然后才能访问到servlet , jsp.
- 容器:符号一定规范 , 能够运行组件的一种软件。 比如:tomcat …
- servlet规范: 使用servlet的时候,自定义的类是HttpServlet的子类 ,那么就是符合servlet的规范。
Servlet作为服务器端的一个组件,它的本意是“服务器端的小程序”。Servlet的实例对象由Servlet容器负责创建;Servlet的方法由容器在特定情况下调用;Servlet容器会在Web应用卸载时销毁Servlet对象的实例。
简单可以理解为 Servlet就是用来处理客户端的请求的.
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
Servlet开发步骤
-
新建符合java web项目的工程
-
servlet 类 继承 HttpServlet
- 重写service方法
- service(HttpServletRequest request , HttpServletResponse response)
- HttpServletRequest(请求) : 该接口是ServletRequest接口的子接口,封装了HTTP请求的相关信息,由Servlet容器创建其实现类对象并传入service(ServletRequest req, ServletResponse res)方法中。
- HttpServletResponse (响应):该接口是ServletResponse接口的子接口,封装了HTTP响应的相关信息,由Servlet容器创建其实现类对象并传入service(ServletRequest req, ServletResponse res)方法中。
-
java web工程中的web.xml文件
- web.xml 的文件名不能修改(tomcat找web.xml)
- 将java的类 和 浏览器访问的地址做一个映射
- 浏览器没法办法直接访问java类中的方法 , 所以需要java类映射到一个浏览器能访问的url地址。
-
打包(idea帮助完成)
- 把web项目运行需要的文件内容按指定文件结构保存。
-
部署(在idea中可以完成)
- 把打包好的web程序放到tomcat容器中,然后运行tomcat容器的时候,才能访问我们的web程序。
-
启动容器, 然后可以通过浏览器访问访问web程序。
Http协议和Servlet的执行
Http协议
Servlet的执行
浏览器的缓存
servlet的url映射方式
tomcat 优先查找servlet ,如果没有符合的servlet ,那么就找静态资源,如果也没有静态资源被找到,
就404.
- /life : 精确地址 ,没有扩展名, 以/开始
- /life.do: 精确地址, 有扩展名, 以 / 开始
- *.do , 通配符 + 扩展名, 所有以.do结尾的请求,都会被拦截, 不能以/开始。
- / , 拦截所有请求, 但不拦截jsp*
- / *, 拦截所有请求
servlet的生命周期
- Servlet的生命周期为init->service->doGet/doPost->destroy
- init只在容器启动或是第一次访问servlet时调用,destroy在关闭容器时调用
- Servlet每次被访问的时候,反复执行service(doGet/doPost)
Servlet的参数
-
Servlet级的参数
<servlet> <servlet-name>arg</servlet-name> <servlet-class>action.ArgusServlet</servlet-class> <!-- 初始化参数的配置: servlet标签内部配置的参数,只在当前servlet有效。--> <init-param> <param-name>dbname</param-name> <param-value>empdb</param-value> </init-param> <init-param> <param-name>dbtable</param-name> <param-value>emp</param-value> </init-param> </servlet>
@Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // --- 从web.xml中,servlet中配置的参数,获取到这些参数,然后在程序中使用。 System.out.println(this.getInitParameter("dbname")); System.out.println(this.getInitParameter("dbtable")); }
-
conext级参数
<!-- 全局参数(context级别) , 任何servlet中 都可以使用--> <context-param> <param-name>count</param-name> <param-value>100</param-value> </context-param>
@Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = this.getServletContext(); String count = servletContext.getInitParameter("count"); System.out.println("count:" + count); }
tomcat 服务器
服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息;
java web项目运行,需要运行在支持java web项目的服务器上,常见的java web服务器:
- tomcat
- JBoss
- Resin
- Jetty
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
Maven-Repository(存储库)
Maven Repository/存储库,顾名思义是一个存储JAR文件的仓库,Maven根据项目中pom.xml文件中提供的jar包依赖信息,从存储库中查找并获取需要的jar包,Maven搜索依赖项时,会按照:本地库、中央库和远程库的顺序进行。
Maven Repository有3种类型:
- Local Repository – 本地库
- Central Repository – 中央库
- Remote Repository – 远程库
bmi(身体质量指数):
Servlet:
-
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class BmiServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException { //1、设置中文编码 resp.setContentType("text/html;charset=UTF-8"); req.setCharacterEncoding("UTF-8"); //2、获取参数 String weight = req.getParameter("weight"); String high = req.getParamet