servlet简单注解开发,jsp简介

javaWeb

一、课程目标

【掌握】servlet注解开发
【理解】jsp原理
【了解】jsp标签指令
【掌握】jsp脚本书写

二、servlet注解开发

servlet的jar包是由tomcat进行提供,用于处理客户端发送至服务器的请求,随着技术的不断发展进行版本的更新,现一般使用的版本为3.0之前版本与3.0之后的版本,功能是一样的,只不过对配置与书写上进行了更新,但是实际使用时根据不同的需求进行选择,本质执行原理是一样的

servlet3.0为了简化配置 提供了相应的注解开发的功能

语法:

书写在类声明之上。标注当前类为servlet指定servlet的name与url

@WebServlet(name="my",urlPatterns={"/my","/my1"})
等价于配置文件中的
  <servlet>
    <servlet-name>my</servlet-name>
    <servlet-class>class地址</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>my</servlet-name>
    <url-pattern>/my</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>my</servlet-name>
    <url-pattern>/my1</url-pattern>
  </servlet-mapping>

name可以省略默认会使用当前类名当做name

urlPatterns是数组形式的地址,可以书写多个地址执行同一个servlet

简写

当只进行url配置且,url只有一个时可以简化注解的书写

@WebServlet("/my")

注意:注解形式虽然简化了配置,但使得项目进行维护时更加繁琐,所以在实际开发过程中根据实际需求进行书写。本质注解开发与配置开发是一样的,只不过在加载时发现相应注解后会执行相应的配置

三、jsp

在使用servlet返回页面过程中,虽然可以返回动态页面,但是如果页面拥有各种样式与功能,那么servlet中的代码就会很多,而且会出现在java中书写html字符串的形式,对于后台开发很不友好,所以,开发出了jsp(java server page)java书写的服务页面用于解决这个问题.

jsp的执行流程

客户端请求jsp,在第一次请求时,服务器会将jsp解析为servlet,创建servlet进行处理,再次请求时如果jsp已经被解析且没有被修改,则直接返回之前解析的servlet进行处理,否则重写解析

3.1 创建jsp页面

开发工具一般都提供jsp页面的创建

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- 相当于在servlet页面书写  contentType=text/html; charset=UTF-8 -->
<title>Insert title here</title>
</head>
<body>
<!-- 默认编码为ISO-8859-1  需要将页面编码修改为UTF-8 -->
</body>
</html>

jsp通过特殊的语法,将servlet变为了可以直接书写html代码的文件,只需要在首行标识这本质是一个servlet页面即可,之后可以完全按照html页面书写的语法进行书写,在执行过程中会自动创建输出流对象将html代码输出至页面

可以让前台将静态页面书写完毕后通过添加<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>指令的形式使其变为可执行的java代码并书写相应的java命令

3.2 page指令

书写在jsp首行用于jsp页面设置的指令,拥有很多的属性

语法:

<%@ page 属性1="属性值" 属性2="属性值1,属性值2"… 属性n="属性值n"%>
属性描述默认值
language指定JSP页面使用的脚本语言java
import通过该属性来引用脚本语言中使用到的类文件
contentType用来指定JSP页面所采用的编码方式text/html,UTF-8

在jsp中拥有大量的指令操作通过设置完成不同的功能

3.3 脚本

由于jsp是通特殊语法可以直接书写html代码并通过out对象输出到客户端,但是本质是java代码,为了与直接输出到客户端的html代码区分,所以需要使用脚本块将书写在jsp页面的java代码进行包裹,这样在将html页面输出到客户端的过程中,就不会讲java代码当做html代码进行输出

语法:

<% java代码  %>
<!-- html注释 -->
<%-- jsp注释 脚本:书写在jsp中进行java逻辑的执行 --%>
<%-- jsp注释 就是在java中书写的注释 由于html中的注释会发送至客户端  所以jsp中不会发生至客户端 --%>
<% int a=1;int b=2; %>
<% System.out.print(a+b); %>

<% response.getWriter().print(a+b); %>
<% out.print(a+b); %>

<%-- 可以直接将书写的内容输出到页面  --%>
<%="可以直接将书写的内容输出到页面"%>
<%=(a+b)%>

虽然jsp本质是servlet可以直接书写java代码进行逻辑操作,但是页面出现大量的java代码会影响书写,所以一般在进行书写时都会将逻辑操作交由servlet进行处理

3.4 方法声明

语法:

由于jsp可以理解为servlet中的某一个请求,所以不能直接进行方法的声明,需要通过特殊的声明语法

<%!
//代表声明一个方法  
//一般会将这样语法书写在servlet中  jsp只负责数据的展示 
public int add(int a,int b){
	return a+b;
}
%>

<%=add(1,2) %>

3.5 其他指令

在这里插入图片描述

3.5.1 编译指令

指的是书写在jsp页面中不会进行直接显示与功能的指令,在jsp被请求编译时进行使用的指令

语法格式:

<%@deriective   attr1=val1  attr2=val2......   %>
<%@ 指令  属性名="值"  属性名="值" 属性名="值"%>
page指令

主要设置jsp相关属性,如:页面编码、缓存大小、错误处理页面等,page指令中除了import属性之外,其他属性只能出现一次;

<%@ page language="java" contentType="text/html,ISO-8859-1" import="java.util.*,java.sql.*,java.io.*" 
         session="true|flase" buffer="none|8kb|sizekb" autoFlush="true|false" info="一段字符串内容" 
         pageEncoding="ISO-8859-1"%>
        1、language 指定JSP页面使用的脚本语言,默认值为java
        2、contentType 用来指定JSP页面的文件类型和所采用的编码方式,建议修改为“text/html,UTF-8”
        3、import 通过该属性来引用脚本语言中使用到的类文件,导入多个类或包用逗号分隔。
           JSP引擎自动导入java.lang.*;java.servlet.*;javax.servlet.jsp.*;javax.servlet.http.*
        4、pageEncoding 指定JSP页面的编码方式, 默认值为“ISO-8859-1”,建议修改为UTF-8
        5、session,用来说明是否创建session对象,默认为true   ,页面中可以不写
        6、buffer,用来指定out对象是否创建buffer缓冲区,并指定缓冲区大小。默认为8kb,none表示不创建缓冲区。--也可以不写
        7、autoFlush,缓冲区是否自动刷新,默认为true,如果为false,缓冲区满后不手动刷新会报异常。--不写
        8、info,定义一个字符串常量,servlet使用getServletInfo方法可以打印。(如作者、版本、版权)
        9、errorPage,指定异常处理页。也可以在web.xml中使用<error-page>元素为整个WEB应用程序设置处理页面,
          其中的<exception-type>子元素指定异常类的完全限定名,<location>元素指定以"/"开头的错误处理页面的路径。
          如果设置了某个JSP页面的errorPage属性,那么在web.xml文件中这是的错误处理将不对该页面起作用。
include指令

在jsp开发当中,为了避免代码冗余(重复),可以把jsp开发当中多次使用的功能代码封装成一个独立的jsp文件。

include指令:用于引入其他JSP页面,如果使用include指令引入了其他JSP页面,那么JSP引擎将把这两个JSP翻译成一个Servlet,所以include指令引入通常也成为静态引入。

 <%@include file=“被包含组件的绝对URL或相对URL"%>

被引入的文件必须遵循JSP语法。被引入的文件可以是任意扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见名知意,JSP规范建议使用.jspf(JSP fragments)作为静态引入文件的扩展名。由于使用include指明将会涉及到2个JSP页面,并会把JSO翻译成一个Servlet,所以这两个JSP页面的指令不能冲突(pageEncoding和导包除外)

就是在jsp编译之前将指定的jsp页面加载到当前页面中,相当于将指定jsp页面代码复制到指定位置

taglib指令

通过使用taglib指令,开发者可以导入其他的标签库,来完成特定的功能。
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

虽然后期jsp仅仅用于数据的展示,但是仍然会书写java代码,所以提供了第三方标签库,通过taglib指令可以在jsp页面中引入标签库,通过特定的标签实现原本java的代码(在jsp页面通过这些标签完成不写任何java代码)

3.5.2 动作指令

指的是在jsp编译为servlet后执行过程中提供功能的指令(可以理解为将java的代码进行了指令的封装,减少页面中java代码出现的频率)

语法格式:

<%jsp:deriective   attr1=val1  attr2=val2......   %>
<%jsp:指令  属性名="值"  属性名="值" 属性名="值"%>
param指令

用于传递参数,必须与其他支持参数指令的标签一起使用。

<jsp:forward page="index.jsp">----传到index.jsp页面
    <jsp:param name="name" value="心雨"/> 
    <jsp:param name="password" value="123"/>
</jsp:forward>
forwoad指令

执行页面跳转,将请求的处理转发到下一个页面。可以使用参数指令进行数据的传输
<jsp:forward page=“date.jsp” />

a.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
a.jsp<br>
<jsp:forward page="b.jsp">
	<jsp:param value="admin" name="username"/>
	<jsp:param value="123456" name="password"/>
</jsp:forward>
</body>
</html>

b.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

b.jsp<br>
<input type="text" value="<%=request.getParameter("username") %>">
<input type="text" value="<%=request.getParameter("password") %>">

</body>
</html>

指令就是通过标签实现原本java代码书写的功能

<% 
request.setAttribute("username","admin");
request.setAttribute("password","123456");
request.getRequestDispatcher("b.jsp").forward(request, response); %>
<input type="text" value="<%=request.getAttribute("username") %>">
<input type="text" value="<%=request.getAttribute("password") %>">  
useBean指令

用于调用指定类无参构造方法创建对象

<jsp:useBean id="s1" class="javabean.Student" scope="page" />
<%-- 等价于  Student s1 =new Student() 
id就是创建对象的变量
class就是创建对象的类
scope是创建对象作用域
--%>
<%=s1 %>
setProperty指令

用于设置指定对象指定属性的值

<jsp:useBean id="s1" class="javabean.Student" scope="page" />
<jsp:setProperty name="s1" property="name" value="张三"/>
<jsp:setProperty name="s1" property="age" value="18"/>
<%-- 等价于s1.setName("张三")
注意一定要书写set方法的属性才能进行使用
 name就是进行赋值的对象
 property就是赋值的属性
 value就是对应的值
 --%>
<%=s1 %>
getProperty指令

用于获取指定对象指定属性的值

<jsp:useBean id="s1" class="javabean.Student" scope="page" />
<jsp:getProperty name="s1" property="name"/>
<jsp:getProperty name="s1" property="age"/>
<%-- 等价于<%= s1.getName() %>
 name就是进行取值的对象
 property就是获取那个属性的值
--%>
include指令
<jsp:include page="index.jsp"/>
<%--将指定页面导入当前页面--%>

include编译指令与include动作指令的区别

在这里插入图片描述

<div>
   <%@ include file="index.jsp" %>
</div>

<div>
    <jsp:include page="index.jsp"/>
</div>

3.6 jsp执行流程

在这里插入图片描述

当客户端请求指定jsp时,首先在已经翻译好的文件中查找,是否修改,如果已存在并且没有修改则直接进行操作,如果不存在或进行了修改,那么现将jsp翻译为servlet,之后编译servlet初始化创建servlet对象,将请求交由servlet对象进行处理.

翻译阶段:当服务器中没有对应servlet实例或对jsp进行修改时,进入翻译阶段,将jsp翻译成对应的setvlet

编译阶段:将对应的serlvet.java编译为对应的.class执行文件

执行阶段:调用对应servlet初始化方法创建对应的servlet实例对象并保存至服务器中,并通过配置获取注解的形式将实例与url请求进行关联.再次请求时直接使用对应的实例进行服务的处理

3.7 jsp组成

在这里插入图片描述

静态内容:

指的是在jsp中书写的html相关的静态页面数据(包含html、css、js以及前端相应的代码)

注释:

<%- 注释内容 -%>

书写在jsp中在编译时不会进行编译的内容

小脚本 :

<% java代码 %>

直接在jsp中书写的java代码,在编译成servlet进行执行的代码

声明:

<%! 声明方法 %>

用于在jsp中声明方法(属于声明脚本)

表达式:

<%= 拥有返回值的表达式 %>

将表达式的结果直接输出到页面上等价于out.print(表达式)(属于表达式脚本)

指令:

编译指令<%@指令 属性=值%>

page/include/taglib

动作指令<jsp:指令 属性=值/.>

forward/param/include/useBean/setProperty/getProperty

模仿html标签样式,用于减少在jsp页面书写大量的java代码

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值