计算机通过统一资源定位符实现资源访问,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()方法在多个页面间传递数据。

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

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

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

JSP实现系统登录的更多相关文章

  1. 使用JSP实现用户登录

    本文讲述使用JSP实现用户登录,包括用户登录.注册和退出功能等. 1.系统用例图 2.页面流程图 3.数据库设计 本例使用oracle数据库 创建用户表 包括id,username,password和 ...

  2. Java中SSM+Shiro系统登录验证码的实现方法

    1.验证码生成类: import java.util.Random; import java.awt.image.BufferedImage; import java.awt.Graphics; im ...

  3. $.post系统登录校验

    AJAX方式:$.post系统登录校验 https://blog.csdn.net/woshisangsang/article/details/66560238?utm_source=blogxgwz ...

  4. 苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转

    昨天下午,测试提了一个bug,问题是:在苹果手机Safari无痕浏览模式下系统登录成功但是页面不跳转. 思前想后找了半天没思路,后来经过同事的点拨,说可能是禁用了cookie之类的,反正我也没思路就顺 ...

  5. 从其它系统登录到SharePoint 2010系统的单点登录

    以前做的只是使用SharePoint的单一登录,用SharePoint去登录其他的系统,现在要反过来,用Form认证的系统来登录SharePoint. 我们都知道,SharePoint使用的是域认证系 ...

  6. Winform开发框架之权限管理系统改进的经验总结(3)-系统登录黑白名单的实现

    在一般的权限系统里面,可能经常会看到系统的黑名单或者白名单的拦截功能.在一般权限系统里面,常见的黑名单就是禁止用户在某些IP上登录系统,白名单就是允许用户只在某些IP上登录系统.本随笔主要介绍在我的权 ...

  7. VB.NET版机房收费系统---七仙女之系统登录

    VB.NET第一版机房收费系统,告一段落,验收的时候.问题也是大大的存在,没实用上设计模式,什么触发器.存储过程,都没实用上.看看其她小伙伴的,七层实现登录?那是什么东东,相比較我的三层而言,多了两倍 ...

  8. 服务器windows2008系统登录报错:由于远程桌面服务当前正忙,因此无法完成您尝试的任务。请在...

    1.问题描述:windows server 2008服务器通过远程桌面登录时很慢,登录不进去,把远程桌面关掉后,再用远程桌面登录时,出现下图提示. 把服务器接上显示器键盘鼠标后,卡在系统登录的欢迎界面 ...

  9. 单系统登录机制SSO

    一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关 ...

随机推荐

  1. golang常用的http请求操作

    之前用python写各种网络请求的时候写的非常顺手,但是当打算用golang写的时候才发现相对来说还是python的那种方式用的更加顺手,习惯golang的用法之后也就差别不大了,下面主要整理了常用的 ...

  2. 「雕爷学编程」Arduino动手做(9)——火焰传感器模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  3. LeetCode_62_不同路径

    /** * @author jianw.li * @date 2019/1/22 11:11 PM * @Description: 不同路径 * 一个机器人位于一个 m x n 网格的左上角 (起始点 ...

  4. GoAccess 分析 Nginx 日志

    0x00 事件 帮助朋友搭建了博客,运行过了一段时间,准备发个网站分析报告给他. 有效的数据只有 Nginx 的访问日志,于是使用决定 GoAccess 工具对这个日志进行分析, 0x01 安装 吾使 ...

  5. 【数据结构】线段树(Segment Tree)

    假设我们现在拿到了一个非常大的数组,对于这个数组里面的数字要反复不断地做两个操作. 1.(query)随机在这个数组中选一个区间,求出这个区间所有数的和. 2.(update)不断地随机修改这个数组中 ...

  6. https理论及实践

    什么是https协议? http协议以明文的方式在网络中传输,安全性难以保证,https在http协议的基础上加入SSL/TLS层.TLS是SSL协议的最新版本,SSL使用SSL数字证书在通信两端建立 ...

  7. Yii2 登录Model

    <?php namespace app\models; use Yii; class User extends \yii\db\ActiveRecord implements \yii\web\ ...

  8. 通过Blazor使用C#开发SPA单页面应用程序(4) - Ant Design Button

    前面学习了Blazor的特点.环境搭建及基础知识,现在我们尝试的做个实际的组件. Ant Design是蚂蚁金服是基于Ant Design设计体系的 UI 组件库,主要用于研发企业级中后台产品.目前官 ...

  9. Hbase多版本(version)数据写入和读取

    1. 首先创建一个支持多版本的hbase表 create }   2.put几条测试数据 put ','f1:name','jack1' put ','f1:name','jack2' 3.读取多版本 ...

  10. [HEOI2013]SAO(树上dp,计数)

    [HEOI2013]SAO (这写了一个晚上QAQ,可能是我太蠢了吧.) 题目说只有\(n-1\)条边,然而每个点又相互联系.说明它的结构是一个类似树的结构,但是是有向边连接的,题目问的是方案个数,那 ...