计算机通过统一资源定位符实现资源访问,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. JS扫雷小游戏

    HTML代码 <title> 扫雷 </title> <!-- ondragstart:防拖拽生成新页面 oncontextmenu:屏蔽右键菜单--> <b ...

  2. Netty源码分析--内存模型(上)(十一)

    前两节我们分别看了FastThreadLocal和ThreadLocal的源码分析,并且在第八节的时候讲到了处理一个客户端的接入请求,一个客户端是接入进来的,是怎么注册到多路复用器上的.那么这一节我们 ...

  3. 【原创】微信小程序支付java后台案例(公众号支付同适用)(签名错误问题)

    前言 1.微信小程序支付官方接口文档:[点击查看微信开放平台api开发文档]2.遇到的坑:预支付统一下单签名结果返回[签名错误]失败,建议用官方[签名验证工具]检查签名是否存在问题.3.遇到的坑:签名 ...

  4. NFS Debian 服务器,CentOS 客户端

    0x00 事件 最近买了一台 500G 储存的 VPS,但是与国内的连接.下载速度都比较差,于是想了个「曲线救国」的方式. 另外有一台 GIA 与 VPS-500G 通信比较理想,同时 GIA 与国内 ...

  5. Sublime Text 3 使用手册

    Ctrl+Shift+P:打开命令面板 Ctrl+P:搜索项目中的文件 Ctrl+G:跳转到第几行 Ctrl+W:关闭当前打开文件 Ctrl+Shift+W:关闭所有打开文件 Ctrl+Shift+V ...

  6. 【模板】树链剖分(Luogu P3384)

    题目描述 众所周知 树链剖分是个好东西QWQ 也是一个代码量破百的算法 基本定义 树路径信息维护算法. ž将一棵树划分成若干条链,用数据结构去维护每条链,复杂度为O(logN). 其实本质是一些数据结 ...

  7. springboot 整合shiro

    参考:        https://blog.csdn.net/fuweilian1/article/details/80309192(推荐)       https://blog.csdn.net ...

  8. 再见 Spring Boot 1.X ,Spring Boot 2.X 走向舞台中心

    2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束. 其实早在2018年7月30号,Spring 官方就已经 ...

  9. tensorflow如何继续训练之前保存的模型

    https://blog.csdn.net/qq_23981335/article/details/81480220

  10. 从 View 的四个构造方法说起

    View 类的四个构造函数 写过自定义 View 的都知道,View 有四个构造函数,一般大家都知道第一个构造方法是简单的在代码中new View 的时候调用的,第二个构造方法使用最广泛,是对应的生成 ...