Servlet(1)之Servlet技术应用

单词

●Request —请求

●Response —响应、回应

●Config —配置

●Context —上下文,环境

●Attribute —属性

●Encoding —字符编码

●Parameter —参数

●Dispatcher —分派员、调度员

Servlet简介

什么是Servlet

什么是Servlet
Servlet是在服务器.上运行的小程序。一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问的这个驻留在服务器内存里的Servlet程序。

●Servlet是Java语言提供的用于开发动态网站的编程技术,厲于JavaEE的组成部分

●Servlet是用于开发服务器端程序的Java技术,该技术可以用于处理用户请求,为用户返回动态网站内容,Servlet程序由Web服务器负责加载执行,是独立于平台与协议的Java动态网站开发技术。

在这里插入图片描述
●Servlet是JavaEE规范的一部分

狭义上讲Servlet仅仅用于指代javax. servlet. Servlet接口或者它的子类型,如javax. servlet. http. HttpServlet等。

广义上讲Servlet不仅仅包含Servlet接口和它的子类型,也包含了Servlet规范中所有的接口API,如ServletRequest、 ServletResponse接口等。

●Servlet接口

Servlet接口定义在javax. servlet包下,该接口定义三个核心抽象方法:

void init(ServletConfig config) ---Servlet对象创建时调用该方法进行初始化。

void service (ServletRequest req ,ServletResponse resp) ---用于处理用户请求。

void destroy() ---Servlet对象被销毁时调用该方法执行销毁前操作。

HttpServlet

HttpServlet
●该抽象类定义在javax. servlet. http包下

●Servlet API提供该抽象类的目的是: 便于开发人员能够快速开发适用于HTTP协议、处理HTTP请求的自定义Servlet。

●一般情况下,如果开发时自定义Servlet被用来处理HTTP请求, 那么建议让自定义Servlet继承HttpServlet类。

●HttpServlet类实现了Servlet接口
-java. lang.Object
–javax. serMet GenericSerlet
—javax. serMlet.http. HttpSerMet

HttpServlet为提供七个核心方法用于处理不同方式的HTTP请求

在这里插入图片描述
常用的有4个,POST(增加)、DELETE(删除)、PUT(修改)、GET(查询)。

总结

Servlet接口:

  • init() :初始化servlet对象
  • destroy():用于销毁servlet对象
  • web服务器负责创建和销毁servlet对象用的。
  • service(ServletReqeust req, ServletResponse res):处理用户请求和响应服务器的。

HttpServlet类:

  • 抽象类:实现了Servlet接口
  • 主要用于处理用户发送的请求,响应服务器端对客户端的数据发送。
  • 提供七个核心方法用于处理不同方式的HTTP请求:
    Get()
    Post()
    delete()
    put()
    header()
    trace()
    options()

第一个Servlet程序

Servlet页面中文乱码问题
第一个Servlet程序
创建Servlet程序有两个方法:
一、
采用注解的方法:

  • 一般情况下处理HTTP请求的自定义Servlet都继承HttpServlet类,重写对应的doXxx()方法即可,一般只重写doGet和doPost方法
    目录:
    在这里插入图片描述

创建动态的Web项目:

  1. 创建一个动态的Web项目
    在这里插入图片描述
    勾选web.xml配置文件选项
    在这里插入图片描述
  2. 在src中创建servlet
    在这里插入图片描述
    这里添加了Get和Post
/**
 * 自定义Servlet类
 */
@WebServlet("/hello.do") // 这是自定义servlet的注解:指定该自定义servlet的URL路径
public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 *  构造器
	 */
	public HelloServlet() {
		super();
	}

	/**
	 *  doGet方法,用于接收用户发送的get请求:<from method="get"> 默认是get请求
	 */
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 *  doPost方法,用户接受用户发送的post请求:<from method="post">
	 */
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
  1. 将servlet添加到Tomcat服务器中运行或直接在eclipse中右键类运行
    在这里插入图片描述
    运行成功
    这里打印的就是doGet方法的字段也可以自己添加自己想要输入的字段
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.getWriter().append("Served at: ").append(request.getContextPath()).append("java");
	}

如果要添加中文需添加:setCharacterEncoding(“UTF-8”);

二、
采用web.xml配置文件的方法:
servlet需要在web.xml中配置servlet,注意的是配置servlet和@WebServlet()注解是冲突的,两者不能共存。
步骤在以上的基础上添加
在web.xml中添加如下配置:

	<servlet>
		<!-- 类名 -->
		<servlet-name>HelloServlet</servlet-name>
		<!-- 类所在的路径 -->
		<servlet-class>com.servlet.HelloServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<!-- 类名 -->
		<servlet-name>HelloServlet</servlet-name>
		<!-- 访问的网址 -->
		<url-pattern>/word.do</url-pattern>
	</servlet-mapping>

运行流程是,输入url后服务器寻找匹配的mapping的name,然后寻找匹配的servlet的name,然后再寻找类路径执行class。

请求对象和响应对象

请求对象HttpServletRequest

HttpServletRequest的API
HttpServletRequest

主要用于处理用户的请求信息。

实例化: web服务 器替我们完成的HttpServletRequest对象的实例化操作。

它是作为doGet获取doPost方法的参数从客户传到服务器端。
  • HttpServletRequest的常用方法
    常用方法:
    setCharacterEncoding(“UTF-8”);设置字符编码,一般放在最上方
    getParameter(“username”); 获取参数的值
    getContextPath() :获取项目名称
    getRequestURL():获取客户请求的完整的URL路径
    getRemoteAddr():获取客户端请求的IP地址
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.getWriter().append("Served at: ").append(request.getContextPath());

		// 测试HttpServletRequest常用的方法
		String context = request.getContextPath();// 获取项目名称
		String ip = request.getRemoteAddr();// 获取访问客户端的ip地址
		String host = request.getRemoteHost();// 获取客户端的主机名称
		String url = request.getRequestURL().toString();// 获取完整的URL名称

		String name = request.getParameter("name");// 获取用户输入的参数的值

		// 通过response对象把获取到的数据打印到浏览器页面上
		PrintWriter out = response.getWriter();
		out.println(context);
		out.println(ip);
		out.println(host);
		out.println(url);
		out.println(name);

	}

在这里插入图片描述

响应对象HttpServletResponse

HttpServletResponse的常用方法

主要用于处理服务器的响应信息。

web服务器完成了对象的实例化操作。

主要方法:
setCharacterEncoding(“UTF-8”);设 置字符编码集,放在方法的最上面。

getWriter() :返回一个PrintWriter对象。

PrintWriter out = response.getWriter();

PrintWriter对象的方法:
print():把信 息打印到页面上,不带换行。
println() :把信息打印输出到页面上。
append() : 把信息打印输出到页面上。

get和post提交方式的区别

1.get是显式提交,参数和参数值在浏览器的地址栏中能够看见,它的最大长度是256个字符。
2. post是隐式提交,参数和参数值是看不到的,提交的参数个数和长度没有限制。

request和response对象的页面跳转

  • request和response对象的页面跳转:
    除了在servlet里面打印页面显示信息之外,也可以直接跳转到html页面上,也可转发到指定的servlet。
  • 页面跳转的方法:
  1. servlet的请求转发方法:
    request对象的getRequestDispatcher("* .html") . forward(request,response);方法
    不但可以将请求转发到指定的页面,也可以转发到指定的servlet中。
    可以携带参数

在这里插入图片描述
2. servlet的重定向方法:
response对象的sendRedirect("*.html");方法。
在这里插入图片描述
servlet请求转发和重定向

用途:
1.需要指定参数的时候,使用请求转发。

2.不需要指定参数,或者直接跳转到页面的时候,使用重定向。
用户名或密码错误,直接跳转到登录页面,进行重新登录。

Servlet生命周期

Servlet生命周期

●Servlet的生命周期由Servlet容器(JavaWeb服务器)控制

在这里插入图片描述
打开浏览器输入http请求—Web容器(tomcat)收到并解析找到对应的Servlet—Servlet实例化—调用对应的方法doGet或doPost进行对请求的处理(比如判断用户名或密码是否正确)—将处理的结果Web容器(tomcat)响应到客户端

  • Servlet生命周期的各个阶段

      Servlet生命周期的各个阶段,不同阶段Servlet容器会调用Servlet对象的不同方法.
    

实例化—Servlet容器创建Servlet的实例
初始化—该容器调用init()方法
服务—如果请求Servlet,则容器调用service()方法(doGet和doPost也是service()方法的二次封装)
销毁—销毁实例(关闭服务器)之前调用destroy()方法

ServletContext对象(应用上下文)

ServletContext对象详解

  • 运行在JavaWeb服务器上的每一个web应用程序都有一个与之对应的Servlet上下文(Servlet运行环境),这个Servlet上下文通过
    javax.servlet.ServletContext来表示

  • JavaWeb服务器提供商提供了对ServletContext接口的实现

  • JavaWeb服务器启动时,它会分别为每一个发布在当前服务器上web应用程序创建一个对应的ServletContext对象

  • ServletContext对象中包含它所关联的web应用程序的根路径

  • 因为每一个JavaWeb应用程序在运行时都会有一个唯一与之关联的ServletContext对象,那么在开发时,某个JavaWeb应用程序中所有Servlet和JSP共享的信息可以放置在这个web应用程序对应的ServletContext对象中,如当前Web应用程序在线访问人数。

  • 获取当前web应用程序所关联ServletContext对象的方式:
    通过Servlet对象(this)的getServletContext()方法:
    通过请求对象(this)的getServletContext()方法
    通过ServletContext对象的getContext (Stringuri)方法获取其他web应用程序所关联的ServletContext对象

ServletContext中常用方法的使用
RUI和RUL是区别

方法名方法描述
void setAttribute(String name,Obiectobi)设置共享属性
Object getAttribute(String name)读取共享属性
void remove Attribute(String name)移除共享属性
ServletContext getContext(String uri)获取指定uri的上下文对象
String getContextPath()返回web程序的上下文路径
String getlnitParameter(String param)获取上下文初始化参数
String getRealPath(String path)返回资源在服务器上的真实路径
ReauestDispatcher getRequestDispatcher(Stringpath)返回一个包装了路径信息的Dispatcher对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值