计算机通过统一资源定位符实现资源访问,URL:Uriform Resource Locator
Tomcat服务器的目录结构
- /bin:存放各种平台下用于启动和停止Tomcat的脚本文件
- /conf:存放Tomcat服务器的各种配置文件
- /lib:存放Tomcat服务器所需要的各种JAR文件
- /logs:存放Tomcat的日志文件
- /temp:Tomcat运行时用于存放临时文件
- /webapps:当发布Web应用时,默认情况下会将Web应用的文件存放于此目录中
- /work:Tomcat把由JSP生成的Servlet放于此目录下
web应用的目录结构
- /:Web应用的根目录,该目录下所有文件在客户端都可以访问(JSP、HTML等)
- /WEB-INF:存放应用使用的各种资源,该目录及其子目录对客户端都是不可以访问
- /WEB-INF/classes:存放Web项目中所有的class文件
- /Web-INF/lib:存放Web项目使用的JAR文件
在Tomcat的运行过程中,首先加载classess目录下的class文件,再加载lib目录下的类。如果两个目录下存在同名的类,classes目录下的类具有优先权。
JSP(Java Server Pages)是运行在服务器端的Java页面,使用HTML嵌套Java代码实现。
其工作原理可以总结为:Java代码嵌入在JSP页面,然后JSP页面编译执行到服务器端,与服务器进行数据交互,然后返回页面信息到客户端。
Web容器处理JSP请求的三个阶段
- 翻译阶段:生成Java文件
- 编译阶段:生成class文件
- 执行阶段
当二次请求页面时,Web容器会直接执行上次编译好的字节码文件,而不会重复编译。
JSP中的page指令
- 通过设置内部的多个属性定义整个页面的属性
- 语法:
<%@page 属性1=“属性值” 属性2=“属性值1,属性值2”...属性值n=“属性值n”%>
- 实例
%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
常用属性
- language:指定JSP页面使用的脚本语言,默认值为java
- import:通过该属性来引用脚本语言使用到的类文件,没有默认值
- contentType:用来指定JSP页面所采用的编码方式,默认值为text/html,ISO-8859-1
JSP中的小脚本和表达式
小脚本语法:<% 代码 %>
表达式语法:<%= 代码 %
小脚本实例:
<% //嵌套的是java代码 int sum=10+20; //输出到控制台 System.out.println("sum="+sum); //输出到页面 out内置对象 out.println("sum="+sum); %>
其中,System.out.println()为输出到控制台,out.println()为输出到页面
表达式实例:
<%=sum %>
此例sum的值为30,表达式输出的值为30。
输出当前日期的小脚本和表达式实例:
<% SimpleDateFormat format=new SimpleDateFormat("yyyy年MM月dd日"); String time=format.format(new Date()); %> <br/> <!-- 输出当前时间 --> <%=time %>
在上例中,simpleDateFormat方法对日期进行格式化,使其格式成为yyyy年MM月dd日。
JSP页面中定义方法
语法:
<%! Java代码%>
与小脚本不同的是多了一个感叹号。
小实例:编写jsp页面,计算1-100之间的所有偶数之和
<% int oushusum=0; for(int a=0;a<=100;a=a+2){ oushusum=a+oushusum; } %><br> <%="1-100偶数的和:"+oushusum %>
对以上“输出当前时间”的页面进行改进,使格式化时间的代码封装到一个方法中。如下:
<%! public String formatDate(Date d){ SimpleDateFormat fma=new SimpleDateFormat("yyyy-MM-dd"); return fma.format(d); } %> <%=formatDate(new Date())%>
当方法有返回值的时候,可以使用表达式进行输出,当方法没有返回值时,可以用小脚本进行直接调用。方法声明以后,可以在页面中进行多处调用。
注释
页面中HTML代码的注释是可以在客户端看到的,而JSP注释在客户端不可见。
<!--客户端可以查看到--> <%--客户端不能查看到--%>
JSP内置对象
JSP内置对象是Web容器创建的一组对象,比如out对象,没有出现new关键字,但可以使用。
<% int[] value={56,65,45,65}; for(int i:value){ out.println(i); } %>
常用的JSP内置对象
out、request、response、session、application、pageContext(页面上下文对象)、config(配置对象)、page(页面对象)、exception(异常对象)
- out对象
out对象是JSP的内置对象,无需实例化就可以使用,可以实现数据的输出显示。其方法有:print(向页面输出显示),println(向页面输出显示,在结尾处添加换行)
- request对象
request对象主要用于处理客户端的请求
常用的方法
- String getParameter(String name):根据表单组件名称获取提交数据
- String[] getParameterValues(String name):获取表单组件对应多个值时的请求数据
- void setCharacterEncoding(String charset):指定每个请求的编码
- RequestDispatchergetRequestDispatcher(String path):返回一个RequestDispatcher对象,该对象的forward()方法用于转发请求
实例:
获取用户表单用户提交的信息(用户名、密码、多选框的值),用到的方法:String getParameter(String name),String[] getParameterValues(String name)
//获得用户名 String username=request.getParameter("username"); //获得密码 String pwd=request.getParameter("password"); //获得爱好 String[] hobbys=request.getParameterValues("hobby");
乱码处理
无论使用get方法或post方法传值,值为中文,页面都会产生乱码。get方法乱码的处理方法之一是修改tomcat服务器的配置文件。路径为:Tomcat目录结构\conf\server.xml,追加URLEncoding="UTF-8"。见下方代码块:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
post方法乱码的处理方式之一是在处理表单的java代码最前面,增添以下代码,指定为UTF-8。
request.setCharacterEncoding("UTF-8");
使用属性保存数据
语法
request.setAttribute(String name, Object obj);
其中,name为属性名称,obj为属性的值,实例:
request.setAttribute("name", username);
从属性中读取数据
语法
request.getAttribute(String name);
其中,name为属性名称,实例:
request.getAttribute("name");
使用属性存取数据时,要确保数据在保存时必须是Object类型,而在取出时还要转换为原先自己的类型。
- response对象
response对象用于响应客户请求并向客户端输出信息
常用的方法
- void sendRedirect(String localtion):将请求重新定位到一个不同的URL,即页面重定向
实例:
response.sendRedirect("login.jsp");
页面转发
利用转发可以携带信息到其他页面,在登录案例中,利用页面转发可以实现在登录成功页面输出相关信息。
语法
request.getRequestDispatcher(到达的页面地址).forward(request, response);
实例
request.getRequestDispatcher("success.jsp").forward(request, response);
转发与重定向的比较
转发:Web服务器调用内部方法实现请求处理,在同一个Web应用中,共享request请求数据。
重定向:Web服务器返回一个响应后,浏览器再次发送一个新的请求,重定向后数据无法共享。
转发:服务器端发挥作用,通过forward()方法在多个页面间传递数据。
重定向:在客户端发挥作用,通过新的请求完成页面跳转。
转发:内部控制的转移,地址栏不会发生变化。
重定向:新的请求导致地址栏会发生变化。