JSP实现系统登录

计算机通过统一资源定位符实现资源访问,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对象主要用于处理客户端的请求

常用的方法

  1. String getParameter(String name):根据表单组件名称获取提交数据
  2. String[] getParameterValues(String name):获取表单组件对应多个值时的请求数据
  3. void setCharacterEncoding(String charset):指定每个请求的编码
  4. 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对象用于响应客户请求并向客户端输出信息

常用的方法

  1. 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()方法在多个页面间传递数据。

重定向:在客户端发挥作用,通过新的请求完成页面跳转。

转发:内部控制的转移,地址栏不会发生变化。

重定向:新的请求导致地址栏会发生变化。

发表评论

您的电子邮箱地址不会被公开。