【JavaWeb】-MVC、Servlet学习,快速上手,迎接五一吧(三)

24 篇文章 6 订阅

JavaWeb

大家五一几天假期呢,昨天晚上写完今天打算发给大家,看到了活动,这里也简短的向大家表示辛苦,特别是当你五一看到我这篇文章时,你可能还处于工作学习状态respects,那也需要抽出时间放松一下,休息一下!

前情回顾:
【JavaWeb】-Tomcat、Eclipse使用项目搭建(一)
【JavaWeb】-mysql、jdbc、dbcp使用(二),看完你还不会吗

都非常的简单,如果小伙伴跟上来了,那我们继续往下学习吧,虽然这些都是讲解,最后可能还是会出一个综合例子,然后可能会更好,看到这里了就点个赞吧!

MVC

介绍

mvc同样也是一种概念,来自百度百科:

在这里插入图片描述

其实就是下面的逻辑图

在这里插入图片描述

在编码上我们将自己的代码也做成了这层;

Servlet

介绍,来自百度百科:

在这里插入图片描述

服务器程序,servlet只是一直接口,凡是继承了这个接口的都是servlet,但是我们一般只使用httpServlet进行http请求,所以现在一般说的servlet指的是继承了httpServlet的类,我们可以写程序通过servlet映射出去可以访问;

在这里插入图片描述

下面我们来了解下servlet;

生命周期

首先就是servlet生命周期:

在这里插入图片描述

三个生命周期,init()、service()、destroy();

init() 方法

init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化,就像 Applet 的 init 方法一样。

service() 方法

service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

destroy() 方法

destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。destroy 方法定义如下所示:

  public void destroy() {
    // 终止化代码...
  }

那这里我们主要使用service(),但是我们不去实现这个方法,而是通过service() 方法由容器调用,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。所以,您不用对 service() 方法做任何动作,您只需要根据来自客户端的请求类型来重写 doGet() 或 doPost() 即可。

我们主要实现doGet和doPos方法体,接收用户请求;

快速上手

我们来快速新建一个servlet来看看,右键新建servlet:

在这里插入图片描述

那一个servlet我们就创建好了,这是代码自己生成的,我们来看下他给我们创建的都是什么代码以及怎么使用:

在这里插入图片描述

package servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloServlet
 * 这里的注解,就是我们的请求路径
 */
@WebServlet("/HelloServlet")
//继承HttpServlet ,而HttpServlet实现了servlet接口
public class HelloServlet extends HttpServlet {
    
    //序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloServlet() {
        //构造方法
        super();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 * doGet方法体
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
        //默认给请求的响应,这里我们注释了,写我们自己的响应
		//response.getWriter().append("Served at: ").append(request.getContextPath());
        response.getWriter().print("hello World");
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 * doPost方法体
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
        //调用了doGet方法,这里我们可以这么使用,这样我们都使用doPost
		doGet(request, response);
	}

}

我们运行项目并访问HelloServlet请求,ok测试成功:

在这里插入图片描述

这是注解的方式配置请求路径,我们可以通过web.xml配置请求路径:

我们新建项目时的web.xml

在这里插入图片描述

打开,我们可以通过xml配置请求路径:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	id="WebApp_ID" version="3.1">
	<display-name>xuexiriji</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>

	<!-- 配置一个servlet -->  <!-- servlet的配置 -->
	<servlet>  	<!-- servlet的内部名称,自定义。尽量有意义 -->
		<servlet-name>HelloServlet</servlet-name>  	<!-- servlet的类全名: 包名+简单类名 -->
		<servlet-class>servlet.HelloServlet</servlet-class>
	</servlet>      <!-- servlet的映射配置 -->
	<servlet-mapping>  	<!-- servlet的内部名称,一定要和上面的内部名称保持一致!! -->
		<servlet-name>HelloServlet</servlet-name>  	<!-- servlet的映射路径(访问servlet的名称) -->
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>



</web-app>

我们把WebServlet注解注释掉,再次运行,访问配置的hello路径,访问成功:

在这里插入图片描述

四大作用域

优先级从小到大

  • PageContext : 页面作用域范围有效,jsp页面内置对象
  • Requset : 一次请求作用域范围有效
  • Session :一次会话作用域范围有效
  • ServletContext :一次服务作用域,web应用加载起来,就一直在,管理多个servlet

下面总结使用方法:

其实四大作用域不管哪个对象最常用的,90%都是这三个getAttribute()、setAttribute()、removeAttribute()

PageContext

pageContext对象是javax.servlet.jsp.PageContext类的实例对象,用来代表整个JSP页面。它代表页面上下文,该对象主要用于访问 JSP 之间的共享数据,使用pageContext可以访问page、request、session、application范围的变量。

方 法说 明
forward(java.lang.String.relativeUtlpath)把页面转发到另一个页面
getAttribute(String name)获取参数值
getAttributeNames(int scope)获取某范围的参数名称的集合,返回值为java.util.Enumeration对象
getException()返回exception对象
getRequest()返回request对象
getResponse()返回response对象
getSession()返回session对象
getOut()返回out对象
getApplication()返回application对象
setAttribute()为指定范围内的属性设置属性值
removeAttribute()删除指定范围内的指定属性

在页面使用中我们很少使用,在jsp中我们再使用几次;

HttpRequest

//设置请求编码格式
requset.setCharaterEncoding("utf-8");

//获取请求参数
requset.getParameter();

//获取属性
request.getAttribute();

//设置属性
request.setAttribute();

//请求转发
request.getRequestDispatcher("/login.jsp").forward(request, response);


HttpRespones

//设置响应编码
response.setContentType( "text/ html; charset=utf-8");


//设置响应状态重定向,一般不这么用
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", site);    

//我们通常使用这个进行重定向
response.sendRedirect()

// 设置刷新自动加载的事件间隔为 5 秒
response.setIntHeader("Refresh", 5);

//获得网页写对象
PrintWriter out = response.getWriter();
out.print()  //像屏幕输出数据,一般不这么用,我们后面直接用jsp

这里需要注意:

一般情况下的页面跳转就用sendRedirect , 用的不是同个request对象,而另一个则是

request.getRequestDispatcher()是请求转发,前后页面共享一个request ;
response.sendRedirect()是重新定向,前后页面不是一个request。

request.getRequestDispather();返回的是一个RequestDispatcher对象。

RequestDispatcher.forward()是在服务器端运行;
HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.
所以RequestDispatcher.forward()对于浏览器来说是“透明的”;
而HttpServletResponse.sendRedirect()则不是。

ServletContext

servletContext,是Servlet中最大的一个接口,呈现了web应用的Servlet视图。

ServletContext实例是通过 getServletContext()方法获得的,由于HttpServlet继承GenericServlet的关系,GenericServlet类和HttpServlet类同时具有该方法。

没有太多东西,主要是还是这三个:getAttribute()、setAttribute()、removeAttribute()

小结

其实就是那么几个常用方法而已,这次博主没有给大家例子,大家可以自己去尝试做一下,自己动手就都是自己的,希望这篇文章对你有帮助,都看到这里了还确定不关注下吗
下期预告:Cookie、Session;

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值