WEB-INF是Java的Web应用的安全目录。所谓安全就是客户端没法访问,只有服务端能够访问的目录。php
web.xml文件是项目的部署文件css
classes文件夹,用于放置*.class文件html
lib文件夹,用于存放须要的jar包java
如图:web
在Tomcat的安装目录下,找到conf-->server.xml文件数据库
找到Connector标签编程
修改port属性的值便可,端口修改完成后要记得保存,而且重启Tomcat服务器。浏览器
JSP全名为Java Server Pages,其根本是一个简化的Servlet设计,他实现了再Java当中使用HTML标签。JSP是一种动态网页技术标准也是JavaEE的标准。JSP与Servlet同样,是在服务器端执行的。缓存
JSP实际上就是Servlet。JSP这门技术的最大的特色在于:写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术容许在页面中嵌套java代码,为用户提供动态数据。安全
缺点:不适合设置HTML响应体,须要大量的
response.getWriter().print("<html>");
优势:动态资源,能够编程。
缺点:HTML是静态页面,不能包含动态信息;
优势:不用为输出html标签而发愁。
优势:在原有HTML的基础上添加java脚本,构成jsp页面。
做为请求发起页面,例如显示表单、超连接。
做为请求结束页面,例如显示数据。
做为请求中处理数据的环节
jsp=html+java脚本+jsp标签(指令)
jsp中无需建立便可使用的对象一共有9个,称为九大内置对象。
3种java脚本:
jsp实际上是一种特殊的Servlet
一、IE浏览器在访问JSP页面时,Web服务器是如何调用并执行一个jsp页面的?(Servlet)
二、Web服务器在执行jsp页面时,是如何把Jsp页面中的html排版标签发送到客户端的?
三、Jsp页面中的java代码服务器是如何执行的?
四、Web服务器在调用jsp时,会给jsp提供一些什么java对象(内置对象)?
一、JSP的模版元素:简言之就是网页的静态内容
例如:html标签和普通文本。
二、JSP的脚本
<%= 2 + 3 %> 等价于out.print(2 + 3);
三、注释
JSP注释:<%-- 被注释的内容 --%> 特色:安全,省流量
网页注释:<!-- 网页注释 --> 特色:不安全,费流量
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其他部分。
在JSP 2.0规范中共定义了三个指令:
例如:
1、page
做用:page指令用于定义JSP页面的各类属性,不管page指令出如今JSP页面中的什么地方,它做用的都是整个JSP页面。
为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。
属性:
<%@ page import="java.util.Date, java.util.List" %>
或者:
<%@ page import="java.util.Date" %>
<%@ page import="java.util.List" %>
JSP会自动导入(默认导入)如下的包:
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
errorPage="/uri"
若是写"/"则表明当前应用的目录下,绝对路径。
若是不写"/"则表明相对路径。
例如:<%@ page pageEncoding="gbk" %>
例如:${1+1} 等价于out.print(1+1);
2、include
include指令用于引入其它JSP页面,若是使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。因此include指令引入一般也称之为静态引入。
<%@ include file="/include/header.jsp" %>
<jsp:include page="/include/header.jsp"></jsp:include>
二者的区别:转译(翻译)的时间段不一样
使用原则:能用静的就不用动的。缘由之一是:能够省略一些代码的书写。
3、taglib
JSP API容许用户自定义标签,一个自定义标签库就是自定义标签的集合。
Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。
Taglib指令的语法:
<%@ taglib uri="uri" prefix="prefixOfTag" %>
uri属性肯定标签库的位置,prefix属性指定标签库的前缀。
等价的XML语法:
<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />
做用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片断。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> prefix:前缀(至关于从新给uri起个名字)
示例:
<% if (5 > 3) { out.print(5); } %> <%-- 上下二种方式是等价的 --%> <c:if test="${5>3}"> aaa </c:if>
下面的这种方式很好用!后面慢慢体会。
使用标签的形式来表示一段java代码。
JSP行为标签使用XML语法结构来控制servlet引擎。它可以动态插入一个文件,重用JavaBean组件,引导用户去另外一个页面,为Java插件产生相关的HTML等等。
行为标签只有一种语法格式,它严格遵照XML标准:
<jsp:action_name attribute="value" />
行为标签基本上是一些预先就定义好的函数,下表罗列出了一些可用的JSP行为标签:
指在JSP的<%=%> 和<% %>中能够直接使用的对象,服务器给咱们建立好的对象,直接拿过来用就好了。
例如:
<%=request.getParameter("name") %> <% Student stu = new Student(); stu.setName("tom"); out.print(stu.getName()); // request.getRequestDispatcher("/7.jsp").forward(request, response); %>
request对象是javax.servlet.http.HttpServletRequest类的实例。每当客户端请求一个页面时,JSP引擎就会产生一个新的对象来表明这个请求。
request对象提供了一系列方法来获取HTTP信息头,包括表单数据,cookies,HTTP方法等等。
接下来将会介绍一些在JSP编程中经常使用的获取HTTP信息头的方法。详细内容请见下表:
在这个例子中,咱们会使用HttpServletRequest类的getHeaderNames()方法来读取HTTP信息头。这个方法以枚举的形式返回当前HTTP请求的头信息。
获取Enumeration对象后,用标准的方式来遍历Enumeration对象,用hasMoreElements()方法来肯定何时中止,用nextElement()方法来得到每一个参数的名字
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.*" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body> <h2>HTTP 头部请求实例</h2> <table width="100%" border="1" align="center"> <tr bgcolor="#949494"> <th>Header Name</th><th>Header Value(s)</th> </tr> <% Enumeration headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) { String paramName = (String)headerNames.nextElement(); out.print("<tr><td>" + paramName + "</td>\n"); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>\n"); } %> </table> </body> </html>
response 对象是 javax.servlet.http.HttpServletResponse 类的一个实例。就像服务器会建立request对象同样,它也会建立一个客户端响应。
response对象定义了处理建立HTTP信息头的接口。经过使用这个对象,开发者们能够添加新的cookie或时间戳,还有HTTP状态码等等。
下表列出了用来设置HTTP响应头的方法,这些方法由HttpServletResponse 类提供:
接下来的例子使用setIntHeader()方法和setRefreshHeader()方法来模拟一个数字时钟:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.*" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body> <h2>自动刷新实例</h2> <% // 设置每隔5秒自动刷新 response.setIntHeader("Refresh", 5); // 获取当前时间 Calendar calendar = new GregorianCalendar(); String am_pm; int hour = calendar.get(Calendar.HOUR); int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); if(calendar.get(Calendar.AM_PM) == 0) am_pm = "AM"; else am_pm = "PM"; String CT = hour+":"+ minute +":"+ second +" "+ am_pm; out.println("当前时间: " + CT + "\n"); %> </body> </html>
此篇是我在学习过程当中参考菜鸟教程以及笔记和别人博客(黑泽君)完成
Java匹马行天下依旧在更新中,欢迎你们关注,感受能够的能够点击一下推荐,若若有误,感谢指正,谢谢!