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对象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章