整站seo哪家服务好,网站开发大体流程图,江苏河海建设有限公司官方网站,天津建设网工程信息网创建项目
新建项目
Java Enterprise JDK1.8 Web Application Tomcat JAVA 默认 过程需要联网
Maven的配置
IDEA内置Maven 修改本地仓库位置#xff0c;因为以后会越来越大 替换配置文件#xff1a; 阿里云镜像下载
Servlet基础 1.动态Web资源开发
2.Servlet是使用J…创建项目
新建项目
Java Enterprise JDK1.8 Web Application Tomcat JAVA 默认 过程需要联网
Maven的配置
IDEA内置Maven 修改本地仓库位置因为以后会越来越大 替换配置文件 阿里云镜像下载
Servlet基础 1.动态Web资源开发
2.Servlet是使用Java语言编写的运行在服务器端的程序Servlet由Servlet容器提供所谓的Servlet容器是指提供了Servlet 功能的服务器本书中指TomcatServlet容器将Servlet动态的加载到服务器上。
3.Servlet是指任何实现了这个Servlet接口的类Servlet主要用于处理客户端传来的HTTP请求并返回一个响应它能够处理的请求有doGet()和doPost()等方法。
请求静态资源图片文档等读出来后直接返回响应
请求Servlet Servlet的请求首先会被HTTP服务器接收HTTP服务器只负责静态HTML页面的解析对于Servlet的请求转交给Servlet容器Servlet容器会根据web.xml文件中的映射关系调用相应的ServletServlet将处理的结果返回给Servlet容器并通过HTTP服务器将响应传输给客户端。
Servlet容器:一段内存空间
Servlet技术特点
Servlet技术具有如下特点 1.方便Servlet提供了大量的实用工具例程如处理很难完成的HTML表单数据、读取和设置HTTP头以及处理Cookie和跟踪会话等。 2.跨平台Servlet用Java类编写可以在不同操作系统平台和不同应用服务器平台下运行。 3.灵活性和可扩展性采用Servlet开发的Web应用程序由于Java类的继承性及构造函数等特点使得应用灵活可随意扩展。 4.除了上述几点外Servlet还具有功能强大、能够在各个程序之间共享数据、安全性强等特点。
抽象类与接口
抽象类与接口抽象类只能单继承接口可以多继承。
相同点
1都不能被实例化 2接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。
不同点
1接口只有定义不能有方法的实现java 1.8中可以定义default方法体而抽象类可以有定义与实现方法可在抽象类中实现。
2实现接口的关键字为implements继承抽象类的关键字为extends。一个类可以实现多个接口但一个类只能继承一个抽象类。所以使用接口可以间接地实现多重继承。
3接口强调特定功能的实现而抽象类强调所属关系。
4接口成员变量默认为public static final必须赋初值不能被修改其所有的成员方法都是public、abstract的。抽象类中成员变量默认default可在子类中被重新定义也可被重新赋值抽象方法被abstract修饰不能被private、static、synchronized和native等修饰必须以分号结尾不带花括号。
Servlet抽象方法
SUN公司提供了一系列接口和类其中最重要的接口是javax.servlet.Servlet。在Servlet接口中定义了5个抽象方法
1.servlet生命周期由servlet容器自动调用所以返回值为void init(),service(),destory()
2.servletCofig():一个servlet类对应一个servlet实例有一个servletCofig(),所以每个servletCofig()都不同
3.void service():servletRequest请求对象serveltResponse()请求响应 其中init()、service()和destroy()这三个方法可以表现Servlet的生命周期它们会在某个特定的时刻被调用。另外getServletInfo()方法用于返回Servlet的相关信息。getServletConfig()方法用于返回ServletConfig对象该对象包含Servlet的初始化信息。需要注意的是表中提及的Servlet容器指的是Web服务器。
service被具体化为其他不同需要的调用方法如GenericServletHttpServlet
servlet接口实现类
针对Servlet的接口SUN公司提供了两个默认的接口实现类GenericServlet和HttpServlet。 GenericServlet是一个抽象类该类为Servlet接口提供了部分实现它并没有实现HTTP请求处理。
HttpServlet是GenericServlet的子类它继承了GenericServlet的所有方法并且为HTTP请求中的POST、GET等类型【总共8种常用两种】提供了具体的操作方法。【编程直接使用! !】
HttpServlet的常用方法及其说明如下表所示 HttpServlet示例
IDEA中创建Servlet
1.新建servlet: new-servlet 2. 虚拟地址映射java servlet–》URL 1)基于注解的方式
2)使用webapp-WEB-INF-web.xml中配置,[xml文件方式]
注意使用新建servlet的方式会在web.xml中创建servlet
3.写好之后启动Tomcat http://localhost:端口号/当前工程根路径/
http://localhost:8082/WebServletProject_war_exploded/ 要访问的具体servlet http://localhost:8082/WebServletProject_war_exploded/servlet_1
http://localhost:端口号/当前工程根路径/value的值 修改样式后要重启Tomcat
报错servlet不能映射为一个url模式
Caused by: java.lang.IllegalArgumentException: 名为 [servlet_2]和 [Servlet_1] 的servlet不能映射为一个url模式(url-pattern) [/servle]
注意注解配置的value和web.xml中的配置
启动程序时自动加载Servlet程序
适用于数据库servlet加载 web.xml代码
servlet请求的分发处理-get()和post()
get_post.html:
!DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
!--get方法--
form actionhttp://localhost:8082/WebServletProject_war_exploded/servlet_2 methodgetinput typesubmit
/form
!--post方法--
form actionhttp://localhost:8082/WebServletProject_war_exploded/servlet_2 methodpostinput typesubmit
/form
/body
/htmlServlet_2.java: Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println(3.访问);//类型转换使用ServletRequest 子类 HttpServletRequest的getMethod()方法HttpServletRequest httpServletRequest (HttpServletRequest) servletRequest;//获取请求的方式GET POSTString method httpServletRequest.getMethod();//打印System.out.println(method);if (method.equals(GET)) {System.out.println(get方式);} else if (method.equals(POST)) {System.out.println(post方式);}}
使用
通过继承HttpServlet实现Servlet程序 案例
package nsu.edu.cn.WebServletProject;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;// value /servlet_1[类名首字母小写]--URL路径
// name不重要,可以省略value【默认】如WebServlet(/servlet_1)
WebServlet(name Servlet_1, value /servlet_1)
//响应实体内容-展示在客户端所有的响应使用HttpServletResponse response
//获取用户请求--HttpServletRequest request
public class Servlet_1 extends HttpServlet {//用户敲回车--是get方式Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//输出一个字符串//response.getWriter().write(hello world!);// html5标签response.getWriter().write(h2hello world!!!!!!!/h2);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//调用dogGet,在post时也输出字符串doGet(request, response);}
}
//虚拟地址映射java servlet--》URL
//1.基于注解的方式
//2.使用webapp-WEB-INF-web.xml中配置
Servlet常见错误 Servlet-url定位servlet程序访问 servlet生命周期
将Servlet的生命周期分为三个阶段分别是初始化阶段、运行阶段和销毁阶段。
第一次访问才会创建实例和初始化【34】 如果不是第一次访问则没有34步骤 ServletConfig使用1
public class Servlet_2 implements Servlet {public Servlet_2() {System.out.println(1.构造器);}Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println(2.初始化);}Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println(3.访问);}Overridepublic void destroy() {System.out.println(4.销毁);}
在Tomcat运行时可以把工程移除但服务器没关闭工程一直在容器中 1.初始化阶段 当客户端向Servlet容器发出HTTP请求要求访问Servlet时Servlet容器首先会解析请求检查内存中是否已经有了该Servlet对象如果有直接使用该Servlet对象如果没有就创建Servlet实例对象然后通过调用init()方法实现Servlet的初始化工作。需要注意的是在Servlet的整个生命周期内它的init()方法只被调用一次。
2.运行阶段 这是Servlet生命周期中最重要的阶段在这个阶段Servlet容器会为这个请求创建代表HTTP请求的ServletRequest对象和代表HTTP响应的ServletResponse对象然后将它们作为参数传递给Servlet的service()方法。service()方法从ServletRequest对象中获得客户请求信息并处理该请求通过ServletResponse对象生成响应结果。在Servlet的整个生命周期内对于Servlet的每一次访问请求Servlet容器都会调用一次Servlet的service()方法并且创建新的ServletRequest和ServletResponse对象也就是说service()方法在Servlet的整个生命周期中会被调用多次。
3.销毁阶段 当服务器关闭或web应用被移除出容器时Servlet随着web应用的销毁而销毁。在销毁Servlet之前Servlet容器会调用Servlet的destroy()方法以便让Servlet对象释放它所占用的资源。在Servlet的整个生命周期中destroy()方法也只被调用一次。需要注意的是Servlet对象一旦创建就会驻留在内存中等待客户端的访问直到服务器关闭或web应用被移除出容器时Servlet对象才会销毁。
Servlet类的继承体系 ServletConfig类的使用 在Servlet运行期间经常需要一些辅助信息例如文件使用的编码、使用Servlet程序的共享等这些信息可以在web.xml文件中使用一个或多个init-param元素进行配置。
当Tomcat初始化一个Servlet时会将该Servlet的配置信息封装到一个ServletConfig对象中通过调用init(ServletConfig config)方法将ServletConfig对象传递给Servlet。
ServletConfig类的方法 web.xml代码
java代码 Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println(2.初始化);//1.获取servlet程序的别名servlet-name的值: servlet-nameservlet_1/servlet-nameSystem.out.println(别名servletConfig.getServletName());
//2.获取初始化参数init-param init-param中的参数名和参数值System.out.println(参数servletConfig.getInitParameter(username));System.out.println(参数servletConfig.getInitParameter(userport));System.out.println(参数servletConfig.getInitParameterNames());//3.获取servletContext对象System.out.println(对象servletConfig.getServletContext());}ServletConfig使用2
重写了init()方法一定要调用super.init(config),调用父类的init()方法
ServletContext类的使用
介绍 当Servlet容器启动时会为每个Web应用创建一个唯一的ServletContext对象代表当前Web应用该对象不仅封装了当前Web应用的所有信息而且实现了多个Servlet之间数据的共享。 操作范围整个web工程
作用 存取数据先存入否则为null; 1.获取Web应用程序的初始化参数
在web.xml文件中不仅可以配置Servlet的初始化信息还可以配置整个Web应用的初始化信息。 context-param元素位于根元素中它的子元素param-name和param-value分别用来指定参数的名字和参数值。 要想获取这些参数信息可以使用ServletContext接口该接口中定义的getInitParameterNames()getInitParameter(String name)方法分别用来获取参数名和参数值。 2.实现多个Servlet对象共享数据
由于一个Web应用中的所有Servlet共享同一个ServletContext对象因此ServletContext对象的域属性可以被该Web应用中的所有Servlet访问。
在ServletContext接口中定义了分别用于增加、删除、设置ServletContext域属性的四个方法 3.读取Web应用下的资源文件
在实际开发中有时候可能会需要读取Web应用中的一些资源文件比如配置文件图片等。
为此在ServletContext接口中定义了一些读取Web资源的方法这些方法是依靠Servlet容器来实现的。
Servlet容器根据资源文件相对于Web应用的路径返回关联资源文件的IO流、资源文件在文件系统的绝对路径等。
示例 web.xml
!--SerletContext的上下文参数属于整个工程,可以配置多组--context-paramparam-namename/param-nameparam-valuedq/param-value/context-paramcontext-paramparam-nameage/param-nameparam-value20/param-value/context-param!--不同的url映射在同一个xml上--Servlet_3.java
public class Servlet_3 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.获取web.xml中配置的上下文参数//获取上下文对象//写法2 getServletConfig().getServletContext();ServletContext servletContext getServletContext();//获取上下文参数String name servletContext.getInitParameter(name);String age servletContext.getInitParameter(age);System.out.println(context:name name age age);//2.获取当前的工程名路径/工程路径System.out.println(当前工程路径servletContext.getContextPath());//3.获取工程部署后在服务器硬盘上的绝对路径/*/被服务器解析地址为http://ip:port/工程名/映射到IDEA代码的web目录* */System.out.println(工程部署的路径:servletContext.getRealPath(/));System.out.println(工程下css目录的绝对路径servletContext.getRealPath(/css));System.out.println(工程下jsp1目录的绝对路径servletContext.getRealPath(/jsp/jsp1.js));// context:namedq age20
// 当前工程路径/WebServletProject_war_exploded
// 工程部署的路径:D:\CodeProject\JavaWeb_DQ\WebServletProject\target\WebServletProject-1.0-SNAPSHOT\
// 工程下css目录的绝对路径D:\CodeProject\JavaWeb_DQ\WebServletProject\target\WebServletProject-1.0-SNAPSHOT\css
// 工程下jsp1目录的绝对路径D:\CodeProject\JavaWeb_DQ\WebServletProject\target\WebServletProject-1.0-SNAPSHOT\jsp\jsp1.js//4.像Map一样存取数据servletContext.setAttribute(key1,v1);servletContext.setAttribute(key2,u);//唯一的上下文对象System.out.println(servletContext);System.out.println(v1servletContext.getAttribute(key1));System.out.println(v2servletContext.getAttribute(key2));}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}
Servlet_4.java
public class Servlet_4 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//所有工程类都可以获取Context的存取数据ServletContext contextgetServletContext();//唯一的上下文对象System.out.println(context);System.out.println(v1context.getAttribute(key1));System.out.println(v2context.getAttribute(key2));}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}ServletContext读取配置文件类中信息properties
新建my.properties 写入内容 ReadProperties .java代码
public class ReadProperties extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置服务器与客户端的字符集为UTF-8response.setContentType(text/html; charsetUTF-8);ServletContext context getServletContext();//获取my.properties资源的真实路径//HTTP状态 500 - 内部服务器错误:路径/my.propertiesString RealPath context.getRealPath(/WEB-INF/classes/my.properties);//字符输入流,读取my.properties资源FileReader fileReader new FileReader(RealPath);//初始化配置文件类Properties properties new Properties();//加载my.properties文件properties.load(fileReader);//properties.getProperty(name)获取my.properties资源中的信息通过键值对方式String print name properties.getProperty(name) address properties.getProperty(address) age properties.getProperty(age);response.getWriter().write(print);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}
使用的地址
String RealPath context.getRealPath(/WEB-INF/classes/my.properties);浏览器中
HTTP协议
介绍
请求的HTTP协议格式 1GET请求 【】表示可选
GET请求的HTTP协议内容 2POST请求
POST请求的HTTP协议内容 HTTP常用请求头说明
HTTP的GET与POST请求
响应的HTTP协议格式 常见的响应码
MIME类型说明
RTF文本 浏览器中查看HTTP协议
谷歌 检查-网络-Headers MricoSoft Edge浏览器 检查-网络-全部-标头
IE浏览器 在IE浏览器-查看源-网络