Servlet之JSP_01概述

一、什么是JSP

JSP (Java Server Pages) 提供一种简便、快速的方式以生成动态的(dynamic)网页内容。

JSP运行原理
JSP 是 Servlet 的模板文件。
JSP最终由 Web 容器解析生成 Servlet 类( .java 文件),并编译成为 .class 文件,最后执行。

植入 JAVA 代码
可以告诉解析器,JSP 模板中的哪一部分是原生的 JAVA 代码,不需要解析。
在JSP中使用 <% %> 嵌入 JAVA 代码。

被 web 容器基于 JSP 文件而解析生成的 Servlet 类,具有特定的格式。在这个类中放入了几个可以直接方便使用的 java 内置对象。可以在 <% %> 中直接使用。这需要了解 jsp ,这种特定的 servlet 的生命周期与构成。详细的请参阅[1]

二、JSTL 标签 与 EL 表达式

JSTL 标签
把一些具有特殊功能的方法(比如:打印 java 对象的值、遍历一个序列、条件判断 等),封装成为类库。
并在 JSP 中以标签的的形式使用。这就是 JSTL (JSP Standard Tag Library)。

当Web容器解析JSP时,遇到 JSTL 标签,Web容器会将 JSTL 标签转换为 调用其对应类库的方法的 java 代码。这些类库的方法,会根据传递过来的变量,对变量进行处理(或 输出其值,或循环遍历、或条件判断 等等),最后返回 String 类型的 html 样式的字符串。
—— 这样,JSTL 标签就把输入的 JavaBean 对象,变成了JSP 想要的 HTML 文本。
—— JSTL 标签是代替 <% %> 而简写的 function 。

使JSP呈现动态结果的,正是这些基于服务端的(server-based resources) JavaBean 对象。因为它们的值可以动态的改变。

EL(Expression Language)表达式
EL 表达式,${},最初在 JSTL 标签内部使用(JSTL 1.0 - 2002/06)。
用于向 JSTL 标签输入一个 JavaBean 对象,并调用其 get 方法。

例如:
       <c:out value="${user.name}"/>
       调用 user 对象的 getName() 方法,并将返回值赋值给 c:out 标签的 value 属性。

后来 EL 表达式脱离 JSTL,被移动到 javax.servlet.jsp.el 包下,可以在 .jsp 文件中单独使用(JSP 2.0/JSTL 1.1 - 2003/11)。

三、使用 JSP 需要用到哪些类库?

JSP 最终被解析为 servlet 类,所以当然需要 servlet 的类库。
如果在 JSP 中使用 JSTL 标签库,也需要导入相应的 JSTL 类库。

需要的类库:
        1. servlet 的类库
        2. jstl 标签类库

四、在 eclipse 中配置类库

● 在eclipse中使用jsp,不需要导入任何包。
    因为负责解析 jsp 的是 web 容器。
    如 Tomcat 已把 jsp-api.jar 和 servlet-api.jar 内置到 lib 文件夹中。

● 在 jsp 中使用 JSTL 标签,需要导入的包:
       
    1. jstl 标签库

        jstl 1.0, 1.1:  ( servlet-api 2.0 及以前版本)
                standard.jar (JSTL API)   
                jstl.jar     (JSTL Implementation)

        jstl 1.2:( servlet-api 2.5/3.0)
                jstl-1.2.jar (JSTL API & JSTL Implementation)
     

通常我们还要自己写很多的 Servlet 类,也需要导入 servlet-api:

    1. servlet 的类库
        javax.servlet-api-3.1.0.jar


使用 maven:

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>



web.xml
<?xml version="1.0" encoding="utf-8"?>
<web-app 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
  <display-name>Archetype Created Web Application</display-name>
</web-app>



五、在 Eclipse 中使用 Tomcat

    1. 在 windows -> show view -> servers 中,可以打开 servers 视图。   
    2. 在 server 视图空白处,单击鼠标右键,选择: new -> server
    3. 添加好后,Tomcat 就会出现在 servers 视图中。
    4. 双击添加好的 Tomcat,可以打开 Tomcat 配置面板,对其进行参数设置。
   
   


六、部署运行

上面只是在 eclipse 开发环境下配置好了类库的路径。

当web容器运行时,如何去引用那些类库?
原来有这么一项规定[2]:运行时所需要的类库都需要放在 WEB-INF/lib 下面。

其实 eclipse 已经为我们设置好了(运行时自动部署):
右键点击工程名称 -> Properties -> Deployment Assembly 进行查看。




-

引用:

[1]
JSP Architecture:
https://www.tutorialspoint.com/jsp/jsp_architecture.htm

JSP Implicit Objects:
https://www.tutorialspoint.com/jsp/jsp_implicit_objects.htm


[2]
Web Application Directory Structure - DefaultWebApp/WEB-INF/lib:
https://docs.oracle.com/cd/E17904_01/web.1111/e13712/configurewebapp.htm#WBAPP162

jsp -
http://www.oracle.com/technetwork/java/javaee/jsp/index.html

jstl & EL -
http://stackoverflow.com/questions/15848251/exact-difference-and-relation-between-jstl-and-expression-language
http://stackoverflow.com/questions/4812755/difference-between-jsp-el-jsf-el-and-unified-el

jstl -
https://jstl.java.net


-
转载请注明
原文出处:http://lixh1986.iteye.com/blog/2324557






-

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
最近有遇到一个问题就是接口放提供的接口密文为PHP的sha256sum加密的内容 在网上找了半天没找到java相应的加密方式 最后迫不得已使用程序执行linux命令来加密 echo -n '123456bzGI9IZAaheT8LtAvhlYNnpDgwuy4hvw' | sha256sum | xxd -r -p | base64 -w0 java程序为: public static String getSHA256Value(String password){ String result = ""; I

聊天室java - 2016-09-17 14:09:07

最近写了一段聊天室java代码 /* dkplus专业搜集和编写实用电脑软件教程,搜集各种软件资源和计算机周边(java网络编程,seo网站优化,web开发,lnmp,java网络编程,毕业论文设计),独立制作视频和ppt和音频微信公众号,点击进入 dkplus官方博客http://dkplus.iteye.com 微信搜索dkplus关注公众号可获取海量计算机周边资源。 */ package com.server;import javax.swing.JButton;import javax.swing

Servlet之JSP概述 - 2016-09-16 14:09:06

一、什么是JSP JSP (Java Server Pages) 提供一种简便、快速的方式以生成动态的(dynamic)网页内容。 JSP运行原理 JSP 是 Servlet 的模板文件。 JSP最终由 Web 容器解析生成 Servlet 类( .java 文件),并编译成为 .class 文件,最后执行。 植入 JAVA 代码 可以告诉解析器,JSP 模板中的哪一部分是原生的 JAVA 代码,不需要解析。 在JSP中使用 % % 嵌入 JAVA 代码。 被 web 容器基于 JSP 文件而解析生成的
    最近项目遇到一个问题     要求项目对外提供的接口要保证每秒接受报文的能力达到  40个/秒(项目架构用的spring mvc),     而目前我这个接口不做任何操作,接受请求后直接返回,也才70个/秒的样子,如果收到报文做一次存储处理的话 就只有30个/秒的样子,求教下哪位有什么好的优化方案,可以从哪些方面做优化

3d文字 - 2016-09-15 17:09:05

最近写了一段代码 /* dkplus专业搜集和编写实用电脑软件教程,搜集各种软件资源和计算机周边(java网络编程,seo网站优化,web开发,lnmp,java网络编程,毕业论文设计),独立制作视频和ppt和音频微信公众号,点击进入 dkplus官方博客http://dkplus.iteye.com 微信搜索dkplus关注公众号可获取海量计算机周边资源。 */import java.applet.Applet;import java.awt.*;public class Text3DApplet ex

学习SSH框架 - 2016-09-15 17:09:05

1.SSH框架的认知 在做相关的java的网页的开发制作时,良好的层次分解是十分有比要的,所以我们在云涌第三方的框架之下来简化还有名了我们相关的网站的开发。 SSH框架实则为Struct + spring + hibernate 的三个组成的,其中 struct ,专注与前台的相关的请求的所对应的ActionForm还有其相关跳转的Action来处理得到相关的JSP页面,从而来更新或是条状到相关用户的请求的服务页面,或是信息页面。而 Hibernate 的作用是体现在数据的持久化的层次中,我们对于页面,通
package com.erp.util;   import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.io.StringWriter; import java.net.HttpURLC
如题,大家可以参考参考 package lesson12;import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class lesson12 {/** * 输入两个正整数m和n,求其最大公约数和最小公倍数 */public static void main(String args[]) {// ListInteger list=new ArrayList();Scanner scan = new S
private File file; private String fileFileName; private String picture; InputStream is = new FileInputStream(file); //引入一个IO流的输入流String root = ServletActionContext.getRequest() .getRealPath("/bookpicture"); //通过REQUEST来得到相对地址,并在后面加上/bookpictureFile f = ne

java-选择排序 - 2016-09-15 14:09:03

public class ChoiceSort {//选择排序public static void choiceSort(int[] a){int i,j,temp;int min=0;for(i=0; ia.length;i++){min=i; //将当前下标定义为最小值下标for(j=i+1;ja.length;j++){if(a[min]a[j]){/* 如果有小于当前最小值的关键字 */ min=j;/* 将此关键字的下标赋值给min */ }}if(i!=min){/* 若min不等于i,说明找