JavaWeb02.JSP基本语法&表单提交方式
目录初识TomcatTomcat目录结构服务器的URLURL的组成认识JSPJSP简单介绍什么是JSP关于JSPjsp运行原理jsp常见错误B/S和C/S技术关于B/SJSP内置对象及常用方法JSP注释方法request(请求)对象request的一般get方法请求中文乱码处理request获得主机和客户端的信息response(响应)对象response对象常用方法out(输出)对象out对象的
目录
初识Tomcat
Tomcat介绍
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目 ,Tomcat 服务器还是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
Tomcat目录结构
目录 | 说明 |
/bin | 存放Windows或Linux平台上用于启动和停止Tomcat的脚本文件 |
/conf | 存放Tomcat服务器的各种配置文件 其中最重要的是server.xml |
/server/lib | 存放Tomcat服务器所需的各种JAR文件 |
/server/webapps | 存放Tomcat自带的两个Web应用:admin应用程序和manager应用程序 |
/commom/lib | 存放Tomcat服务器以及所有Web应用都可以访问的JAR文件 |
/work | Tomcat把由JSP生成的Servlet放于此目录下 |
/webapps | 当发布Web应用时,默认情况下会将Web应用的文件存放于此目录中 |
服务器的URL
URL的组成
url由三个部分组成:协议、主机、端口
例如Tomcat服务器的url是:http://localhost:8080,其中http:是协议,localhost是主机,8080是端口号(如何修改tomcat的端口号在下方关于JSP中有具体方法)
认识JSP
JSP简单介绍
JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。简单来说JSP就是Java+HTML+css+JavaScript的结合,JSP就是Java文件。
什么是JSP
JSP(Java Server Pages)是指:
- 在HTML中嵌入Java脚本代码
- 由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本代码
- 然后将生成的整个页面信息返回给客户端
关于JSP
Q:JSP文件必须运行在Tomcat上吗?可以直接运行在浏览器中吗?
A:不一定是tomcat,其他的应用服务器也可以。tomcat是比较常用的一个,jsp是解析成servlet在后台进行编译,最终向客户端输出普通html代码的。浏览器是客户端,能够解读从服务器端传送过来的html代码,而tomcat是服务器端运行的servlet容器,用来解读jsp成html。jsp在二者层面上的运行不是一个概念。
Q:如何将javaweb项目部署在Tomcat上呢?
首先在server中找到安装好的Tomcat,其中Tomcat必须是Stopped状态,双击进入
在Server Locations中可以设置使用哪个部署(第二个Use Tomcat installation 就是使用Tomcat部署),当设置了Tomcat部署后还需要在下方的Deploy path中设置为webapps。还可以在Ports中设置端口号(Port Number第二行设置端口号,默认为8080)
设置完成之后,项目运行至Tomcat会自动移动到webapps目录下
jsp运行原理
一共通过三个阶段,先翻译,即.jsp翻译成.java,再编译,将.java编译成.class,然后才能执行。
jsp常见错误
404:路径有误 找不到页面
500:代码有误
B/S和C/S技术
B/S和C/S技术比较
BS:(Browser/Server,浏览器/服务器模式),web应用 可以实现跨平台,客户端零维护,但是个性化能力低,响应速度较慢。CS:(Client/Server,客户端/服务器模式),桌面级应用 响应速度快,安全性强,个性化能力强,响应数据较快
关于B/S
Q:为什么需要基于B/S技术的动态网页?
A:使用动态网页,可以动态输出网页内容、同用户进行交互、对网页内容进行在线更新
Q:B/S技术的特点是什么?
A:如图所示
JSP内置对象及常用方法
JSP注释方法
<%--注释内容--%>( 相当于out.print() )
html的注释方式是:<!--html的注释:在源代码中可见 -->,而jsp注释在源代码中不可见
request(请求)对象
request对象代表的是来自客户端的请求,例如在form表单中填写的信息等是最常见的对象。
request的一般get方法
getParameterValues() 将同名的参数一次性读入String类型的数组中
getParameterNames() 获取参数名称,返回枚举类型 getMethod() 获得用户提交方式,post或get getServletPath() 获得JSP文件所在项目的路径 getRemoteAddr() 获取客户的IP地址 getParameter() 获取到客户端通过表单或url请求参数发送过来的参数值。 getServerName() 获取服务器名称 getSserverPort() 获取服务器的端口号 getContextPath() 获取项目名,与getServletPath类似 getHeader(str) 获取HTTP投文件中的指定值 getHeaders(str) 获取表头信息 请求中文乱码处理
request.setCharacterEncoding("UTF-8") 设置request请求字符编码 String uname=new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
String upwd=new String(request.getParameter("pwd").getBytes("ISO-8859-1"),"UTF-8");
取得参值后,通过转码方式将值转成合适的字符集 request获得主机和客户端的信息
getRemoteAddr()
获得客户主机的IP getRemoteHost() 获得客户主机的名字 getLocalAddr() 获得本地主机的IP getLocalHost() 获得本地主机的名字 getServerName() 获得服务器主机的IP getServerPort() 获得服务器端口 提示:
(1)setAttribute与getAttribute方法都是在服务器端内部执行的,客户端不知道服务器端是否执行过这两个方法。
(2)没有与getParameter方法对应的setParameter方法。
(3)request对象内数据的存活范围:当客户端想服务器端发送一个请求,服务器向客户端返回一个响应后,该请求对象就被销毁了。
response(响应)对象
response对象代表的是对客户端的响应,也就是说可以通过response对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议一般人使用。需要向客户端发送文字时直接用out对象即可。
response对象常用方法
addHeader(String arg0,String arg1) 向页面中添加头和对应的值 addCookie(Cookie arg0) 添加Cookie信息 sendRedirect(String arg0) 实现页面重定向,URL重写 setStatus(int arg0) 设定页面的响应状态代码 setContentType(String arg0) 设定页面的MIME类型和字符集 setCharacterEncoding(arg0) 设定页面响应的编码类型
session(会话)对象
session对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。HTTP是无状态协议,Web Server对每一个客户端请求都没有历史记忆,session用来保存客户端状态信息。提示:打开一个浏览器就意味着打开了一个session对象,浏览器不关闭,session对象会一直存在(姑且这样认为),且session对象只有一个。如果浏览器关闭重启,会创建新的session对象。session对象生命周期:创建--执行--失效(务必要理解)
session对象常用方法
setAttribute("key",value) 将参数名和参数值存放在session对象中 getAttribute("key") 获取参数值 getAttributeName() 获取参数名 getId() 获取session对象的ID removeAttribute("key") 移除指定session中参数 getCreateTime() 获得session对象创建的时间,单位毫秒 getMaxInactiveInterval() 获得session对象的有效时间 setMaxInactiveInterval() 设置session对象的有效时间 isNew() 判断是否为一个新客户 invalidate() 使session对象失效
application(应用程序)对象
application对象负责提供应用程序在服务器中运行时的一些全局信息。类似于系统的“全局变量”,用于实现用户之间的数据共享。application的生命周期是从application创建到服务器关闭。application的存活范围比request和session都要大。只要服务器没有关闭,application对象中的数据就会一直存在,在整个服务器的运行过程当中,application对象只有一个,它会被所有的用户共享。application常用方法
getRealPath(String arg0) 获得指定文件的路径 getMimeType(String arg0) 获取指定的文件格式 setAttribute(String arg0,Object obj) 将参数及参数值保存到application对象 getAttribute(String arg0) 获得application对象属性的值 getAttributeNames() 获得application中所有参数的名字 removeAttribute(String arg0) 移除application对象中指定的参数值 getServletInfo() 获取Servlet的当前版本信息 getContext(String arg0) 获得指定路径的context内容 etContextPath() 获得指定context的路径 提示:application对象运行是一直存在服务器中,因此保存这种全局变量相对来说比较占资源,因此不推荐使用。
out(输出)对象
out对象代表了向客户端发送数据的对象,与response对象不同,通过out对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过out对象直接向客户端写一个由程序动态生成的HTML文件。
常用的方法除了print和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为out对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。
作用:输出内容到HTML中。
out对象的方法
append(char c) 将字符添加到输出流中 clear() 清空页面缓存中的内容 close() 关闭网页流的输出 flush() 网页流的刷新 println() 将内容直接打印在HTML中 write() 与println()方法相似,区别在于println()可以输出各种类型的数据,
而write()只能输出与字符相关的数据。提示:在调用clear()之前,不要调用flush(),否则会抛出IO异常。
page(页面)对象
page对象是指当前的JSP页面本身,在实际开发中并不常用。
getClass() 返回当时Object的类 hashCode() 返回此时Object的哈希代码 toString() 将此时的Object类转换成字符串 equals(Object obj) 比较此对象是否与指定的对象相等 clone() 对此对象进行克隆 copy(Object obj) 将此对象复制到指定的对象中
config(配置)对象
config对象一般用于页面初始化时传递参数。一般而言很少在页面中使用config对象。
getServletContext() 获得servletContext值 getInitParameter(String arg0) 获得指定的初始化值 getInitParameterNames() 获得初始化的所有参数,返回枚举值 getServletName() 获得servlet名字 equals(Object obj) 比较此时的对象是否与指定的对象相等 toString() 获得此时对象的值
exception(异常)对象
exception对象用来处理页面出现的异常错误。通常在某个页面(比如A.jsp)中加入page指令的errorPage属性来将其指向一个专门处理异常错误的页面(doError.jsp)。
getMessage() 返回exception对象的异常消息字符串 getLocalizedMessage() 返回exception对象的本地化语言的异常错误。 printStackTrace() 显示异常的栈跟踪轨迹。 toString() 返回关于异常错误的简单消息描述。 fillInStackTrace() 重写异常错误的栈执行轨迹。
pageContext(页面上下文)对象
pageContext内置对象是一个比较特殊的对象,它相当于页面中所有其他对象功能的最大集成者,即使用它可以访问到本页面中所有其他的对象。例如前面已经描述的request、response、out和page对象等。由于在JSP中request和response等对象本来就可以通过直接调用方法使用,所以pageContext对象在实际JSP开发中很少使用到。
pageContext常用方法
getRequest() 返回当前页面中的request对象 getResponse() 返回当前页面中的response对象 getSession() 返回当前页面中的session对象 getServletContext() 返回当前页面中的application对象 getPage() 返回当前页面中的page对象 getOut() 返回当前页面中的out对象 getException() 返回当前页面中的exception对象 getServletConfig() 返回当前页面中的config对象 setAttribute(String name) 给指定的属性名设置属性值 getAttribute(String naem) 根据属性名找到相应的属性值 setAttribute(String name, Object obj, int scope) 在给定的范围内设置相应的属性值 etAttribute(String name, int scope) 在给的范围内获取相应的属性值 findAttribute(String name) 寻找一个属性并返回,如果查找不到则返回null removeAttribute(String name) 通过属性名删除掉某个属性 removeAttribute(String name, int scope) 在指定的某个范围里删除某个属性 getAttributeScope(String name scope) 返回某属性的作用域 getAttributeNamesInScope(int scope) 返回指定范围内的所有属性名的枚举 release() 释放pageContext占据的所有资料 forward(String relativeURLpath) 使用当前页面重导到另一个页面 include(String relativeURLpath) 使用当前位置包含的另一个页面
表单查询功能的实现
登录界面(表单验证)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--
表单(from)
action 表单提交的地址
method 提交的方式
* get【默认】 显示在地址栏上面的,数据长度有限制
* post 不显示在地址栏上面的,数据长度无限制
输入框上面必须携带 name
-->
<form action="doLogin.jsp" method="get">
<p>
<input type="text" name="username" placeholder="请输入用户名">
</p>
<p>
<input type="password" name="password" placeholder="请输入密码">
</p>
<p>
<input type="number" name="age" placeholder="请输入年龄">
</p>
<p>
<input type="checkbox" name="habit" value="打球">A
<input type="checkbox" name="habit" value="打妹">B
<input type="checkbox" name="habit" value="打给">C
<input type="checkbox" name="habit" value="打游戏">D
</p>
<p>
<button>登录</button>
</p>
</form>
</body>
</html>
处理登录请求界面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 处理请求 -->
<h1>界面</h1>
<%
//内置用户:sa 123
//获取到用户提交过来的表单信息
//瑞块死特
String username=request.getParameter("username");//从请求中取数据
String password=request.getParameter("password");
//从请求中取数据(类型全都是string,必须自己做一个转换)
String age=request.getParameter("age");
//从string类型转成int类型
Integer.parseInt(age);//将字符串变成数字
String[] ts=request.getParameterValues("habit");//接收到多个具备相同name的值
//遍历
String my_habit="";
for(String habit:ts){
System.out.print(habit);
my_habit+=habit+",";//字符串的拼接操作
}
//存到数据库中 应该是一个数据
out.print(my_habit);//存到数据库
my_habit.split(",");
//String habit=request.getParametervalues("habit");
//System.out.print(habit);
//可以做登录验证了
if("sa".equals(username)&&"123".equals(password)){
out.print("登录成功");
}else{
out.print("登录失败");
}
%>
执行效果:
技术总结:通过request得到数据,将数据进行判断,打印是否成功
总结:喜欢看的小伙伴可以点点关注博主会持续更新一些JavaWeb的内容
更多推荐
所有评论(0)