Servlet与JSP入门(1)

什么是Servlet?

      Servlet(Server Applet)是运行在服务器上的程序,主要功能用于生成动态Web内容。

Tomcat与Servlet的关系

      Tomcat 是Web应用服务器,是一个Servlet/JSP容器。Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户。而Servlet是一种运行在支持Java语言的服务器上的组件。Tomcat与Servlet是相辅相成的。Tomcat提供运行的基础,Servlet提供软件的实现,共同组建形成软件。

标准Javaweb工程结构

在这里插入图片描述

Servlet的执行过程

在这里插入图片描述

Servlet开发与基本配置

开发步骤
  • 创建Servlet类,继承HttpServlet
  • 重写service方法,编写程序代码
  • 配置web.xml,绑定URL
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 此时Tomcat还不认识这个servlet,需要在项目的配置文件中配置servlet
 * @author LiXinRong
 *
 */
public class MyFirstServlet extends HttpServlet {//HttpServlet是所有服务器小程序的父类

	@Override//重写service方法,为servlet的请求与响应提供支持。
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//接收请求的参数,暂时先记住
		String name = request.getParameter("name");
		String html = "<h1 style='color:red'>hi," + name + "!</h1><hr/>";
		System.out.println("返回给浏览器的响应数据为:" + html);
		//创建服务器对浏览器的输出流,可以将数据从服务器发送到浏览器
		PrintWriter out = response.getWriter();
		out.println(html);
	}	
}
<?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>FirstServlet</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-name>first</servlet-name>
  	<!-- 使用servlet-class指向一个具体的servlet的实现类 -->
  	<servlet-class>com.dodoke.servlet.MyFirstServlet</servlet-class>
  </servlet>
  <!-- 构建一个servlet的映射,servlet可以有其具体的地址,这个地址可以被浏览器访问,此处就来设置对应的地址 -->
  <servlet-mapping>
  		<!-- 需要和上方的first同名,这样地址映射才能和具体实现类对应 -->
  		<servlet-name>first</servlet-name>
  		<url-pattern>/hi</url-pattern>
  	</servlet-mapping>
</web-app>
访问方法

在这里插入图片描述

请求参数的发送与接收

请求参数

  • 请求参数是指浏览器通过请求向Tomcat请求的数据;
  • 请求参数通常是用户输入的数据,待servlet进行处理;
  • 请求参数的形式:参数名=值1&参数名2=值2&参数名n=值n;

在servlet中,有两个方法去接收参数:

  • request.getParameter() 接收单个参数;
  • request.getParameterValues() 接收多个同名参数;
GET和POST请求

get是将数据通过url附加数据显性的向服务器发送数据;
post 是将数据放置在请求体中隐性的向服务器发生数据;

在实际工作中,对于get和post请求是需要分开进行处理的,在servlet中提供了doGet和doPost方法。

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 RuquestMethodServlet extends HttpServlet{
	
	//处理get请求
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String name = request.getParameter("name");
		response.getWriter().println("<h1 style='color:green'>"+ name +"</h1>");
	}
	
	//处理post请求
	@Override
	protected void doHead(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String name = request.getParameter("name");
		response.getWriter().println("<h1 style='color:red'>"+ name +"</h1>");
	}
}

说明:

  • doGet() 常用于不包含敏感词信息查询
  • doPost() 用于安全性较高的功能和服务器的写操作
  • Service()方法如果不进行重写的话,就相当于一个分发器,是doGet()和doPost()的上级,将不同请求方式的请求交给不同的方法进行处理

Servlet的生命周期

Servlet从创建到死亡经历了哪些过程呢?

  1. 装载(Tomcat解析XML)此时Tomcat只是解析,并未对其做什么操作
  2. 创建 第一次访问的时候,创建servlet对象执行构造函数
  3. 初始化 调用init()方法初始化
  4. 提供服务 service( )/doGet( )/doPost( )
  5. 销毁 tomcat关闭或重启的时候执行destory( )
public class MyFirstServlet extends HttpServlet {
	
	public MyFirstServlet() {
		System.out.println("正在创建Servlet");
	}
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("正在初始化servlet对象");
	}


	@Override//重写service方法
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("servlet正在提供服务");
		//接收请求的参数,暂时先记住
		String name = request.getParameter("name");
		String html = "<h1 style='color:red'>hi," + name + "!</h1><hr/>";
		System.out.println("返回给浏览器的响应数据为:" + html);
		//创建服务器对浏览器的输出流,可以将数据从服务器发送到浏览器
		PrintWriter out = response.getWriter();
		out.println(html);
	}

	@Override
	public void destroy() {
		System.out.println("正在销毁servlet对象");
	}
	
}

说明:
创建与初始化servlet对象,只在第一次访问servlet时进行,随后的访问不会再去执行,所以在整个系统中,servlet对象有且只有一个。

使用注解简化配置servlet

     在Servlet中,有且只有一个核心的注解:@WebServlet,这个注解可以用于简化Servlet在web.xml中的配置工作。

@WebServlet("/sample")
public class SampleServlet extends HttpServlet{
	
	//service()是请求处理的核心方法 无论get和post都会被处理,service方法不区别对待
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String method = request.getMethod();//获取请求的请求方式
		String name = request.getParameter("name");
		String telphone = request.getParameter("telphone");
		String sex = request.getParameter("sex");
		String[] specs = request.getParameterValues("spec");
		PrintWriter out = response.getWriter();
		out.println("<h1>method:"+ method +"</h1>");
		out.println("<h1>name:"+ name +"</h1>");
		out.println("<h1>mobile:"+ telphone +"</h1>");
		out.println("<h1>sex:"+ sex +"</h1>");
		for(String str : specs) {
			out.println("<h2>spec:"+ str +"</h2>");
		}
	}
	
}

启动时加载Servlet

     就如同很多程序开机启动一样,servlet可以在Tomcat被启动的使用就进行加载,启动时加载在工作中常用于系统的预处理。我们可以在web.xml中进行设置,配置我们的启动加载服务。

< load-on-startup>设置该节点可以控制启动时加载

<servlet>
  	<servlet-name>first</servlet-name>
  	<servlet-class>com.dodoke.servlet.MyFirstServlet</servlet-class>
  	<!-- 设置启动加载,值越小优先级越高 -->
  	<load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
	<servlet-name>first</servlet-name>
	<url-pattern>/hi</url-pattern>
  </servlet-mapping>

也可以使用注解的形式来指定启动时加载

//可以使用属性指定不同的功能
//在@WebServlet注解中,如果只指定了loadOnStartup属性,而没有指定urlPatterns属性,该注解是不起作用的
//因为@WebServlet注解强制要求必须指定urlPatterns属性
@WebServlet(urlPatterns="/first" , loadOnStartup=0)
public class MyFirstServlet extends HttpServlet {}

什么是JSP?

Jsp:Java Server Page(Java服务器页面),是一个动态的网页技术标准。

为什么使用JSP?

     虽然我们可以使用Servlet输出动态的网页,但是Servlet本身也有着它的局限性,比如某些复杂的网页开发维护不方便,动态页面和Java代码混合到一起难以维护,Servlet利用out.println()语句输出,开发效率低下,eclipse 难调试等问题。这些问题深深的困扰着我们,于是我们决定放弃使用Servlet对于复杂网页内容的输出,将眼光投向另一门技术Jsp。

JSP与Servlet的关系

Jsp的本质就是Servlet。

JSP的特点

  • Jsp是j2ee的功能模块,由web服务器执行
  • Jsp作用就是降低动态网页开发难度
  • Jsp使用简单,有着HTML和Java基础就可以短时间上手
  • Jsp将HTML和Java代码分离,降低开发难度

JSP运行要求

  • 可正常运行的Tomcat
  • 所有Jsp的页面扩展名必须是.jsp
  • Jsp页面应放在web应用程序目录下

JSP的执行过程

在这里插入图片描述

关于JSP本质就是Servlet的证明

关于Jsp是Servlet的直接证明我们可以在Tomcat的work文件夹中找到。
在这里插入图片描述
所有我们在Jsp中所写的代码,无论是HTML还是Java都会被转译为Servlet代码。

Jsp基本语法-Scriptlet

Jsp的基本语法可以分为以下四种:

  1. Jsp代码块
  2. Jsp声明构造块
  3. Jsp输出指令
  4. Jsp处理指令

Jsp代码块
用于在JSP中嵌入Java代码,语法:<% java代码 %>

Jsp声明构造块
Jsp声明构造块用于声明变量、方法、类,语法:<%! 声明语句 %>

Jsp输出指令
用于在Jsp页面中显示java代码执行结果,语法:<%= Java代码 %>

Jsp处理指令
用于提供Jsp执行过程中的辅助信息,语法:<%@Jsp指令 %>

常用处理指令:
<%@ page %>定义当前Jsp页面全局设置;
<%@ include %>将其他Jsp页面与当前Jsp页面合并;
<%@ taglib %>引入Jsp标签库;

JSP注释
在这里插入图片描述
注意:
HTML注释和Jsp注释不同,Jsp注释不会做任何处理;
而Jsp中的HTML注释仍然会被执行,但之后不会被浏览器解释;

Jsp页面重用

     对于页面来说,可能在整个项目中,每个页面都有着相同的头部和相同的尾部内容的。这时可以通过页面复用的方式来提高效率。
include指令可以复用页面

静态包含 include
<%@include file="head.jsp" %>
<h1>content</h1>
<%@include file="foot.jsp" %>
动态包含
<%
	String str = "HELLO";
%>
<jsp:include page="head.jsp"></jsp:include>
<h1><%=str %>,CONTENT</h1>
<jsp:include page="foot.jsp"></jsp:include>

静态引入和动态引入的区别

     在静态引入中,子页面是原封不动的把页面的信息放到了父页面中,父页面把所有页面的页面信息都收集完成后,统一的进行解析,完成页面的输出。这样,如果在不同的页面中定义了相同名称的变量,那么就会产生冲突。
     但是在动态引入中,由于每一个页面都是单独的进行解析的。再交给父页面合成生成一个 HTML 页面,每个子页面和父页面中定义的 Scriptlet 是不会产生冲突的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值