34.javaEE-servlet/request/response

servlet(非常重要)

一.servlet是什么?

Servlet(全称为 Server Applet)是一个接口.是java服务器运行java代码的接口.类似于java连接数据库用的JDBC的接口,而java连接服务器的接口就是servlet,实现这个接口的厂商有Tomcat,jboss,webLogic等服务器.

总结:
(1)Servlet本质上一段java程序
(2)Servlet程序无法独立运行,必须放在服务器中,由服务器调用才可以执行!
(3)Servlet的作用是:接受请求、处理请求、将结果响应给浏览器。
在这里插入图片描述

二.servlet接口继承的结构.

servlet接口及子类的组织架构情况.
在这里插入图片描述
1.servlet接口.
这个接口时Tomcat提供的.不是JDK里的,这个接口提供了java代码处理网络请求的接口.

public interface Servlet {
	//这是servlet初始化执行的方法,servlet初始化是随着tomcat初始化的时候就初始化的.
    void init(ServletConfig var1) throws ServletException;

    ServletConfig getServletConfig();
	//这是每次调用本servlet,也就是请求过来一次,调用一次本方法
    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    String getServletInfo();
	//这是servlet销毁时执行的方法,但是servlet销毁时随着tomcat的停止而销毁的
    void destroy();
}

特点:
1.init()方法,这个方法是本servlet实例化时调用的类.一般只会在Tomcat启动时执行一次.
2.destory()方法:这个方法是在servlet在tomcat停止时,销毁servlet时调用本方法执行一次.
3.service()方法:这个方法是请求一次执行一次.这是一个抽象方法.业务代码就写在service方法内.

2.genericServlet
作用:实现了init()和destory()等方法,只留下具体的业务的方法service()未实现.
在这里插入图片描述

3.HttpServlet
作用:
1.继承了抽象类GenericServlet类,实现了service()方法.
2.将service方法分成了get/post/delete/put等请求方式.
在这里插入图片描述
4.XXXServlet(这是自己实现的编写的servlet类)
作用:
1.因为我们自己实现servlet接口的话,需要做的东西非常多,包括初始化方法等等,所以我们注解extends httpServlet类,站在巨人的肩膀上,代码编写更快.
例如:

/**
*这就是直接继承HttpServlet类,在get()或者post()方法中书写我们后台代码的逻辑.
*/
public class RequestDemo1 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		request.setCharacterEncoding("utf-8");
		String user = request.getParameter("user");
		String[] likes = request.getParameterValues("like");
		
		System.out.println(user);
		for (String like : likes) {
			System.out.println(like);
		}
		
		out.write("得到你的参数了");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

三.servlet开发步骤

1.添加servlet的jar包或者是添加servlet的服务器,例如Tomcat等.
在这里插入图片描述
2.自己创建类extends HttpServlet类,重写其中的方法.
3.配置web.xml中的servlet的映射路径,或者在web3.0之后,可以用注解配置url映射.
web.xml的形式

<servlet>
    <description></description>
    <display-name>HelloServlet222</display-name>
    <servlet-name>HelloServlet222</servlet-name>
    <servlet-class>com.tedu.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloServlet222</servlet-name>
    <url-pattern>/HelloServlet222</url-pattern>
  </servlet-mapping>

@webServlet注解的形式

@WebServlet("/servletDemo1")
public class ServletDemo1 extends HttpServlet {

4.运行测试
4.1 这是run as server ,在服务器中运行.
4.2 测试的url为 : ip:端口号/项目名称/servlet映射.
例如:http://localhost:80/test-dynamic-web/servletDemo1
在这里插入图片描述

request/response对象

一次请求到后台的调用过程.
在这里插入图片描述

一.request

request请求基本上封装了所有前台转发过来的信息,从ip到请求方式,到请求参数等等.
1.request对象的方法
在这里插入图片描述
2.获取请求参数

request.getParameter(String name) – 根据请求参数的名称获取参数值。返回String类型的参数值。
例如,获取用户名:String username = request.getParameter(“username”);

request.getParameterValues(String name)
根据请求参数的名称获取多个值组成的数组。返回String类型的数组。 例如获取爱好:String[] likes =
request.getParameterValues(“like”);

3.请求转发
(1)、请求转发:是指定服务器中的某一个资源(Servlet或JSP)在处理请求的过程中,将请求转发给一个其他的资源,让其他资源来处理请求。
格式:
request.getRequestDispatcher(“转发到资源的路径”).forward(req, res)
(2)域对象:能够在指定的范围内, 利用自身的map实现数据的共享
在request对象内部保存了一个map,专门用于存取数据。这个map我们可以称之为是request域

protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		//模拟通过jdbc查询当前用户的个人信息
		String name = "张鹏";
		int age = 28;
		
		//将查询到的个人信息存入到request对象的map集合中
		request.setAttribute("name", name);
		request.setAttribute("age", age);
		
		//将请求转发到show.jsp并将数据带到jsp中显示
		request.getRequestDispatcher("show.jsp")
		.forward(request, response);
		
	}

(3)请求转发的模型图
在这里插入图片描述

二.response

1.response对象的方法
在这里插入图片描述

2.向客户端发送数据

	//字符流输出
		PrintWriter out = response.getWriter();
		out.write("我爱祖国");
	//字节流输出
		OutputStream stream = response.getOutputStream();
		stream.write(121312);

3.重定向
重定向:是指当用户浏览某个网址时,将其导向到另一个网址的技术。

重定向和转发的区别:
1.转发只能在同一个Web应用内部的两个资源之间进行跳转, 不可以是不同的Web应用或者不同的服务器中进行跳转。而重定向则没有此限制
2.转发是一次请求,一次相应.重定向是多次请求,多次相应.
3.重定向会改变请求的url地址,转发不会改变请求的url地址

response.sendRedirect("/hello.jsp");
发布了42 篇原创文章 · 获赞 0 · 访问量 650

猜你喜欢

转载自blog.csdn.net/weixin_45449911/article/details/104621132