Servlet学习总结

Servlet

servlet技术

概念

狭义的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

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即可。

servlet生命周期

1.从第一次调用到服务器关闭

2.在web.xml中servlet标签下添加1在都武器启动的时候启动,关闭时失效。

service和doGet,doPost的区别

​ service方法:可以处理Get/Post请求,如果servlet中有service方法,会优先调用 service方法进行处理。 如果service方法中有super.service(arg0,srg1)语句,则会根据请求方式调用父类中的 doGet/doPost方法。因此一般不添加该语句。

​ doGet方法:处理get请求

​ doPost方法:处理Post请求

servlet常见错误

404错误:资源未找到

原因一:在请求地址中华servlet别名书写错误。

原因二: 虚拟项目名称拼写错误。

500错误:内部服务器错误

错误一:Java.lang.ClassNotFoundException

​ 解决方法:在web.xml文件中检验servlet类的全限定路径是否拼写错误。

错误二:因为service方法体的执行代码错误导致。

​ 解决方法:根据错误提示对service方法的代码进行修改。

405错误:请求方式不支持

原因:请求方式和servlet的方法不匹配造成的。

解决方法;尽量使用service方法进行请求处理,并且不要在service方法中调用父类的service方法。

request对象的和获取请求头信息

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)

request对象的作用域

问题:不同发servlet之间怎么共享,或者说数据怎么从一个。

解决:使用request对象的作用域

req.setAttribute("name", "value");
req.getAttribute("name");

作用域:解决了一次请求内的不同servlet的数据共享问题。基于请求转发,一次请求中的所有servlet共享。

注意:使用request对象进行数据流转,数据只有在一次请求内有效。

Response学习

//设置响应头
				resp.setHeader("name", "vlaue");
				//resp.addHeader()可以追加响应头,如果使用resp.setHeader()会覆盖原有的数据
				resp.addHeader("name1","value2");
//设置响应编码格式
				resp.setHeader("cnntent-type", "tetx/html;charset=utf-8");
				//或者是resp.setContentType("text/html;charset=utf-8");
		//设置响应实体
				resp.getWriter().write("hello");

请求转发

作用;实现多个servlet联动操作处理请求,避免代码冗余。让servlet的职责更加明确。

特点:一次请求,浏览器地址栏信息不变。

注意,请求转发后直接return。

req.getRequestDispatcher("目标servlet").forward(req, resp);

ServletContext学习

//获取servlecontex对象
				//第一种方式
				ServletContext sc=this.getServletContext();
				//第二种方式
				ServletContext sc2=this.getServletConfig().getServletContext();
				//第三种方式
				ServletContext sc3=req.getSession().getServletContext();
				//获取项目web.xml的全局变量值
				//如果数据不存在,返回值为null
				//sc.getInitParameterNames(),返回键名的枚举
				String initParameter=sc.getInitParameter("string name");
				//获取webroot下的资源绝对路径
				String path=sc.getRealPath("文件的相对路径");
				//获取项目根目录下资源的的流对象
					//sc.getRealPath("相对路径");
					//此种方式只能获取根目录下的资源对象,class文件的流对象需要使用类加载器获取

web.xml文件全局变量配置格式

作用:将静态代码和数据解耦

<context-param>
     <param-name>name</param-name>
    <param-value>value</param-value>
</context-param>

ServletConfig

作用: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>

web.xml总结

作用:存储相关的配置信息,保护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这个顺序加载组件,这些元素可配置在文件中的任意位置。加载时机 :服务器启动

session

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tsm99ta1-1603358023966)(C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20200414150531069.png)]

jsp

概念:jsp全名为Java server Pages,中文名为Java服务器页面,其根本是一个简化的servlet设计。

特点:本质还是servlet,跨平台,一次编写,处处运行,组件跨平台,,健壮性和安全性。

jsp访问原理:浏览器发起请求,请求jsp,请求被tomcat服务器接受,执行jspservlet将请求的jsp文件转译成对应的Java文件,(也是servlet),然后执行转译后的Java文件(即执行转义后的servlet文件)。

jsp的语法和指令:

jsp的page指令

​ <%@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文件要继承的父类(包名+类名)

jsp的taglib指令
jsp的局部代码块

特点:局部代码块中的Java代码会被原样转移到jsp对应的servlet文件的service方法中。代码块声明变量都是局部变量。

使用:<% java 代码>

缺点:使用局部代码块在jsp中进逻辑判断,书写麻烦,阅读困难。

开发:servlet进行逻辑判断,使用jsp进行页面展示。

Java全局代码块

特点:声明的Java代码作为全局变量转移到servlet类中

使用:<! 全局代码>

注意:全局代码块申明的代码,需要使用局部代码块调用。

jsp脚本段语句

特点:帮助我们快速地获取变量或者方法的返回值作为数据响应给浏览器。

使用:<= 变量名或方法名>

注意:不要在 变量名或方法名后使用分号。

jsp的注释:
  1. 前端语言注释:会被转译,也会被发送,但不会被浏览器执行。
  2. Java语言注释:会被转译,但不会被servlet执行。
  3. jsp注释:不会被转译。
jsp的静态引入

<@include file=“jsp文件的相对路径”>

特点:会引入jsp文件和当前文件转译成一个Java文件使用。在网页中也就显示了合并后的效果。

注意:静态引入的jsp文件不会单独转译成Java文件。当前文件和静态引入的jsp文件不能使用Java代码块声明同名变量。

jsp的动态引入

<jsp:include page=“要引入jsp文件的相对路径”> </jsp:include>

特点:会将引入的jsp文件单独转译,在当前转译好的Java文件中调用引入的jsp文件。在网页中合并后显示。

注意:动态引入允许文件中声明同名变量。

页面转发

<jsp:forward page=“目标jsp”></jsp:forward>

请求路径不变,转发一次请求。

注意:在转发标签的两个标签之间除了写<jsp:param value=“值” name=“键”/>之外的任意字符均会报错。

通过request.getParameter("")访问数据。

jsp的内置对象

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

什么是Ajax

Ajax是一种创建交互式网页应用的网页开发技术。

不是一种新技术,是如下几种技术的组合应用

  1. 基于web标准XHTML+CSS的表示

  2. 使用DOM进行动态显示及交互。

  3. 使用XML和和XSLT进行数据交换和相关操作。

  4. 使用XMLHttpRequest进行异步数据查询,检索。

  5. 使用JavaScript将所有的东西绑定在一起

    Ajax本质上是一个浏览器技术

为什么需要Ajax

使用Ajax

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值