目录
杂七杂八
加!表示全局变量
不加表示局部变量
<% 这个中间是java代码 %>
int = Integer.parseInt(char) 把字符串char转换为int值
语法<%= %>
表达式
语法:<%= %>
作用:向浏览器输出数据
用jsp的表达式和Java输出的比较
相同点:
都是向浏览器输出数据
不同点:
1.语法范畴不同
out.println()属于Java语法范畴 <% %>
<%= %>表达式输出 属于jsp语法范畴
2. 输出特点
out.println()输出 使用out内置对象,
不符合MVC模式要求。
<%= %>表达式输出 使用response内置对象。
符合MVC模式要求。
3.使用方式
out.println()输出 比较复杂
<%= %>表达式输出 比较简单
结论:推荐使用<%= %>表达式输出
实现99乘法表0
<html>
<head>
<title>JSP</title>
</head>
<body>
<%
// 打印9×9的表格
out.println("<table border=\"1\">") ;
for(int i=1;i<10;i++)
{
out.println("<tr>") ;
for(int j=1;j<10;j++)
{
out.println("<td>"+i*j+"</td>") ;
}
out.println("</tr>") ;
}
out.println("</table>") ;
%>
</body>
</html>
优点:结构性好.
缺点:1.代码复杂 2.执行效率低.
作业
- 使用jsp实现9×9乘法表上三角型
- 使用HTML实现9×9乘法表上三角型
<html>
<head>
<title>JSP</title>
</head>
<body>
<table border="1">
<%
// 打印9×9的表格
for(int i=1;i<10;i++)
{
%>
<tr> <!-- <tr>标签定义 HTML 表格中的行。 -->
<%
for(int j=1;j<10;j++)
{
%>
<td><%=i*j%></td> <!-- <td>标签定义 HTML 表格中的列。 -->
<%
}
%>
</tr>
<%
}
%>
</table>
</body>
</html>
相对于上面的代码
优点:1.简单 2. 执行效率高
缺点 结构性不好,难以维护
结论:jsp页面尽量不要使用<% %>嵌入原生Java程序。
语法< form >(生成表单)
带有两个输入字段和一个提交按钮的 HTML 表单
<form action="demo_form.jsp" method="get">
First name: <input type="text" name="fname"><br>
<!--如果这里是 First name: <input type="text" name="fname"value = 22><br> 则会自动在text文本框中填写 22-->
<!--如果这里是 First name: <input type="text" name="fname"value = 22readonly> 则会自动在text文本框中填22 而且加了readonly 就会使在文本框里的22不能被修改-->
Last name: <input type="text" name="lname"><br>
<input type="submit" value="提交">
</form>
第一行的文本框叫 First name 获取的参数名叫 fname
第二行的文本框叫 Lastname 获取的参数名叫 lname
提交按钮叫 提交
将这些数据提交到demo_form.jsp里面
如果请求是 method=“get” 则获取的数据fname和lname会显示在协议头里面(也就是链接上 ) 不安全可见
如果请求是 method=“post” 则会不放在协议头里面 安全不可见
语法<%@ %> (静态代码)
<%@ page contentType = “text/html;charset = UTF-8” %>
完成对当前页面的汉字进行静态编码
一般在页面的开头
对 text或者html进行编码
这条指令也只能写一个
这条指令只对当前页面有效
作用: 从这个指令开始扫描 开始找汉字 对汉字变成UTF-8编码
<%@ page import = “包”%>(引入包)
page指令
1.指定当前jsp页面的属性 ( ̄︶ ̄)↗
2.设定页面MIME类型
include指令
<%@ include file = “文件名”%>(静态包含)
把file后面的文件内容包含到当前页面 例如一些jsp内容 或者txt,inc
这样可以少写很多重复内容
先包含 再执行 容易出问题 先把文件中的内容先整体放进来 再执行文件中的内容 重定义
静态问题:如果该文件中也包含了 就会出错
动态问题:如果该文件中和外部都定义了局部变量 也会报错
不识别被包含页面的类型
标签包含<jsp:include page = “文件名”>(动态包含)
如果被包含页面时动态页面则 先执行 后包含 避免动态问题 就是先执行文件中的内容 最终把结果包含进来就行
如果被包含的文件是属于静态页面则只是进行单纯的包含 不执行 会把相应代码直接发送给浏览器
<jsp:include page = “文件名”>
<jsp:param name = “ref1”
value = “2”/>//这样就向被包含的页面传了参数名为ref1的 值为2的参数
当前页面能向被包含页面传参数
可以识别被包含页面的类型
实现99乘法表
动态处理用户的请求
<html>
<head>
<title>JSP</title>
</head>
<body>
<%
// 接收参数 从表单接收用户数据(乘法表的行列)
String t_row = request.getParameter("rownum") ;
String t_col = request.getParameter("colnum") ;
System.out.println("***"+t_row);
System.out.println("***"+t_col);
// 将字符串变为整数
int row =10;
int col =10;
//row = Integer.parseInt(t_row);
try
{
row = Integer.parseInt(t_row) ;
col = Integer.parseInt(t_col) ;
}
catch(Exception e)
{
%>
Input Error!!!
<%
}
%>
<table border="1">
<%
// 打印9×9的表格
for(int i=1;i<=row;i++)
{
%>
<tr>
<%
for(int j=1;j<=col;j++)
{
%>
<td><%=i*j%></td>
<%
}
%>
</tr>
<%
}
%>
</table>
</body>
</html>
<%@taglib…%>指令:引入相应的标签库
MVC设计模式
主要是将视图组件与控制组件分离
servlet主要是接收所有客户端的请求 然后根据请求调用相应的JavaBean,并将所有的显示结果交给JSP完成
该模式被分为3个核心层:模型层(Model)、显示层(View)和控制层(Controller)
模型层:负责用户的请求参数 处理用户的数据 最后把处理好的数据交给显示层显示
显示层:接收servlet传递的内容 调用Javabean将内容显示给用户
控制层:完成一个独立的业务操作组件。一般都是以JavaBean的形式进行定义的
指令include和标签的区别
指令:<%@include file=“文件路径”%>
标签:<jsp:include page=“文件路径”/>
相同点:
把被包含页面包含到当前页面中
不同点
指令:jsp范畴 先包含再执行 主要用于静态包含 不可传参数
标签:java语言 先执行再包含 主要用于动态包含 可以传参数
客户端,服务端跳转的区别
(request.getRequestDispatcher(“跳转页面”).forward(request,response))服务端:
不会更改地址 执行到该语句的时候会立刻执行跳转 后面的代码不会执行 可以传参 不可重新传参
不改地址 执行到该语句立刻执行 后面代码不执行 可传参 不可冲重新传参
(response.sendRedirect(“跳转页面”))客户端:
会更改地址 真正是浏览器完成的跳转 执行完该语句后面还会执行 不可传参数 可以重新传参
地址会被更改 浏览器完成的跳转 后面代码还会执行 不可传参 可重新传参
理解POST 和GET请求。
Get请求:请求参数在HTTP协议头,基本都可以发get请求,但是参数可见,不安全。
Post请求:请求参数在HTTP协议体,只有表单能发post请求,参数不可见,安全。
为什么application可以通过getRealPath()方法,取得虚目录的真实路径。
原因:1)该方法从request内置对象中取得请求字符串;
2)对请求字符串进行分析取得项目的虚名;
3)到servlet.xml文件中通过虚名工作目录找到真实路径
16、将一个jsp页面保存在WEB-INF文件夹之下,
如何通过配置web.xml文件访问该页面。
进行如下配置:
zte
/WEB-INF/hello.jsp
用图形和文字描述hello.jsp的执行过程
①打开Tomcat
②向浏览器发送请求 (也就是输入网址)
③通过请求找到webapps下与项目名对应的目录,找到hello.jsp文件
④Tomcat把hello.jsp转换成hello_jsp.java
⑤将hello_jsp.java转化为hello_jsp.class文件
⑥Tomcat调用jdk的虚拟机,执行class文件中的动态代码
⑦通过HTTP协议(response)将动态结果返回浏览器
请写出9个内置对象的生存周期和功能
request 接受和传递数据 请求来了创建 请求结束销毁
response 将结果数据放在HTTP协议里给浏览器显示 同上
out 将结果信息传给给浏览器显示 请求来了创建,请求结束销毁
session 传递验证信息 用户第一次发请求访问服务器的动态组件时创建,用户下线时销毁
page/pageContext 存放临时数据 访问JSP页面时创建,离开页面时销毁
application 传递公共信息 服务器启动时创建,服务器关闭时销毁,只创建一个
config 传递web.xml中配置信息的初始参数 服务器启动时创建,服务器关闭时销毁,只创建一个
exception 传递异常信息 服务器启动时创建,服务器关闭时销毁,只创建一个
表单和超链接发请求
相同点:客户端发请求,自动发http协议
不同点:语法不同
表单:利于交互 有post请求更安全
超链接:代码简单
结论:考虑到交互和安全时用表单 图方便用超链接