狭义的servlet是指java语言实现的一个接口,广义的servlet是指任何实现了这个servlet接口的类,一般情况下,人们将Servlet理解成后者。servlet运行于支持java的应用服务器中,从原理讲,servlet可以响应任何类型的请求,但绝大多数servlet指用来来扩展基于HTTP协议的web服务器。
运行在支持Java的应用服务器上;
servlet的实现遵循服务器能够识别的规则,也就是服务器会自动的根据请求调用相应的servlet进行请求处理。
简单方便,可移植性强。
1.创建普通的java类并继承HttpServlet
2.覆写service方法
3.在service中书写逻辑代码即可
4.在webRoot(WebContent)中的WEB-INF下的web.xml文件中配置servlet
1.新建一个web工程
file->new->Dynamic Web project->name
2.在Java Source->src下建立一个Java包,新建一个servlet类
两种方法建立。一是建立一个普通的Java类,继承HttpServlet,再覆写service方法。二是直接建立一个servlet类,命名后点击next,配置web.xml文件。在Java类中会出现一个@WebServlet("/+参数")注释,参数为次servlet的别名。
3.web.xml的一种配置方式为点击工程名->Java EE tools->Generate->Deployment Descriptor stub然后项目自动生成一个位于WEB-INF下的web.xml文件。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- The front controller of this Spring Web application, responsible for handling all application requests --> //========================等号之间的语句表示是对一个servlet类的配置 <servlet> <servlet-name>my</servlet-name>//my代表一种对应关系 <servlet-class>chap02.MyServlet</servlet-class>//标志servlet类的包 </servlet> <servlet-mapping> <servlet-name>my</servlet-name>//必须和servlet中servlet-name中的内容一致 <url-pattern>/my</url-pattern>//servlet类的别名,在浏览器访问时使用 </servlet-mapping> //========================== </web-app>servlet实例代码
package chap02; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyServlet extends HttpServlet{ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("this is my first web,hahaha"); System.out.println("this is my first web"); } }完成后加载进Tomcat服务器,访问http://localhost:8080/chap02/my即可。
1.从第一次调用到服务器关闭
2.在web.xml中servlet标签下添加1在都武器启动的时候启动,关闭时失效。
service方法:可以处理Get/Post请求,如果servlet中有service方法,会优先调用 service方法进行处理。 如果service方法中有super.service(arg0,srg1)语句,则会根据请求方式调用父类中的 doGet/doPost方法。因此一般不添加该语句。
doGet方法:处理get请求
doPost方法:处理Post请求
原因一:在请求地址中华servlet别名书写错误。
原因二: 虚拟项目名称拼写错误。
错误一:Java.lang.ClassNotFoundException
解决方法:在web.xml文件中检验servlet类的全限定路径是否拼写错误。
错误二:因为service方法体的执行代码错误导致。
解决方法:根据错误提示对service方法的代码进行修改。
原因:请求方式和servlet的方法不匹配造成的。
解决方法;尽量使用service方法进行请求处理,并且不要在service方法中调用父类的service方法。
request对象有Tomcat服务器创建的,并作为实参传递给处理请求的servlet 的service方法。
作用:request对象封存了当前请求的的所有请求信息。
使用:
1.获取请求头数据
//获取请求头 //获取请求方式 String method=req.getMethod(); //获取请求URL StringBuffer url=req.getRequestURL(); //获取URI String uri=req.getRequestURI(); //获取协议 String h=req.getScheme();2.获取请求行数据
//请求行数据 //获取请求头里的键值对数据 //括号里的数据据为Header存在的键,返回字符串类型的值 String value=req.getHeader("User-Agent"); //返回所有请求的键的枚举 Enumeration e=req.getHeaderNames(); while (e.hasMoreElements()) { System.out.println(e.nextElement()); }3.获取请求用户的数据
//获取用户数据 //参数为form表单中的name值 String name=req.getParameter("name"); String pass=req.getParameter("pass"); //返回同键不同值的请求数据(多选),返回数组 //req.getParameterValues(name)问题:不同发servlet之间怎么共享,或者说数据怎么从一个。
解决:使用request对象的作用域
req.setAttribute("name", "value"); req.getAttribute("name");作用域:解决了一次请求内的不同servlet的数据共享问题。基于请求转发,一次请求中的所有servlet共享。
注意:使用request对象进行数据流转,数据只有在一次请求内有效。
作用;实现多个servlet联动操作处理请求,避免代码冗余。让servlet的职责更加明确。
特点:一次请求,浏览器地址栏信息不变。
注意,请求转发后直接return。
req.getRequestDispatcher("目标servlet").forward(req, resp);web.xml文件全局变量配置格式
作用:将静态代码和数据解耦
<context-param> <param-name>name</param-name> <param-value>value</param-value> </context-param>作用:ServletConfig是servlet的专属配置对象,每个Servlet都单独拥有一个ServletConfig对象,用来web.xml的配置信息。
获取servletconfig
ServletConfig sc=this.getServletConfig(); String code=sc.getInitParameter(“name”);
web.xml配置格式
<init-param> <param-name>name</param-name> <param-value>value</param-value> </init-param>作用:存储相关的配置信息,保护servlet。解耦一些数据对程序的依赖。
使用位置:
每个Web项目中
Tomcat服务器(在服务器的conf目录中)
区别:
Web项目下的web.xml文件为局部配置,针对本项目。
Tomcat下的web.xml文件为全局配置,配置公共信息。
内容:
全局上下文配置;
Servlet配置;
过滤器配置;
监听器配置;
如果web项目里的xml和tomcat服务器了的xml相同使用web项目里的xml文件(就近原则)
web容器会按照Servlet Context->context-param->listener->filter->servlet这个顺序加载组件,这些元素可配置在文件中的任意位置。加载时机 :服务器启动
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tsm99ta1-1603358023966)(C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20200414150531069.png)]
概念:jsp全名为Java server Pages,中文名为Java服务器页面,其根本是一个简化的servlet设计。
特点:本质还是servlet,跨平台,一次编写,处处运行,组件跨平台,,健壮性和安全性。
jsp访问原理:浏览器发起请求,请求jsp,请求被tomcat服务器接受,执行jspservlet将请求的jsp文件转译成对应的Java文件,(也是servlet),然后执行转译后的Java文件(即执行转义后的servlet文件)。
<%@page 属性名=”属性值“ 属性名=”属性值“ … %>
language:声明jsp要被转译的语言(当前只有Java)
import:声明要转译的Java文件要导入的包,不同的包有使用逗号隔开。
pageEncoding:设置jsp文件的数据编码格式
contentType=”text/html;charset=utf-8“ 设置jsp数据响应给浏览器时,浏览器采用的解析和编码格式。
session:设置转译后的servlet是否开启session支持,默认是开启,true表示来气,false表示关闭。
errorPage:设置jsp运行错误后跳转的页面
extends:设置jsp转译的Java文件要继承的父类(包名+类名)
特点:局部代码块中的Java代码会被原样转移到jsp对应的servlet文件的service方法中。代码块声明变量都是局部变量。
使用:<% java 代码>
缺点:使用局部代码块在jsp中进逻辑判断,书写麻烦,阅读困难。
开发:servlet进行逻辑判断,使用jsp进行页面展示。
特点:声明的Java代码作为全局变量转移到servlet类中
使用:<! 全局代码>
注意:全局代码块申明的代码,需要使用局部代码块调用。
特点:帮助我们快速地获取变量或者方法的返回值作为数据响应给浏览器。
使用:<= 变量名或方法名>
注意:不要在 变量名或方法名后使用分号。
<@include file=“jsp文件的相对路径”>
特点:会引入jsp文件和当前文件转译成一个Java文件使用。在网页中也就显示了合并后的效果。
注意:静态引入的jsp文件不会单独转译成Java文件。当前文件和静态引入的jsp文件不能使用Java代码块声明同名变量。
<jsp:include page=“要引入jsp文件的相对路径”> </jsp:include>
特点:会将引入的jsp文件单独转译,在当前转译好的Java文件中调用引入的jsp文件。在网页中合并后显示。
注意:动态引入允许文件中声明同名变量。
<jsp:forward page=“目标jsp”></jsp:forward>
请求路径不变,转发一次请求。
注意:在转发标签的两个标签之间除了写<jsp:param value=“值” name=“键”/>之外的任意字符均会报错。
通过request.getParameter("")访问数据。
jsp文件在转译成对应的servlet文件的时候自动生成并声明的对象。我们在jsp页面中直接使用即可。
注意:内置对象在jsp页面中使用,使用局部代码块或脚本段语言,不能在全局代码块中使用。
pageContext:页面上下文对象,封存了其它八个内置对象,封存了当前jsp的运行信息。
注意:每个jsp文件单独有一个pageContext对象。
作用域:当前页。
request:封存当前请求数据的对象,由tomcat创建,一次请求。
session:此对象用来存储用户的不同请求的共享数据,一次会话。
application:是ServletContext对象,一个项目只有一个,存储用户共享数据的对象,以及完成其它操作。项目内。
response:响应对象,用来响应请求处理结果给浏览器的对象,设置响应头,重定向。
out:响应对象,jsp内部使用,带有缓冲区的响应对象,效率高于response。
page:代表当前jsp的对象,相当与 Java的this。
exception:异常对象,存储了当前运行的异常信息。
注意:使用对象需要在page指令中使用属性isErrorPage=”true“开启。
config:也就是ServlertConfig,主要来获取web.xml中的配置信息,完成一些初始化数据的读取。
Ajax是一种创建交互式网页应用的网页开发技术。
不是一种新技术,是如下几种技术的组合应用
基于web标准XHTML+CSS的表示
使用DOM进行动态显示及交互。
使用XML和和XSLT进行数据交换和相关操作。
使用XMLHttpRequest进行异步数据查询,检索。
使用JavaScript将所有的东西绑定在一起
Ajax本质上是一个浏览器技术
