1、JSP的作用
Servlet:
缺点:不适合设置html响应体,需要大量的reponse.getWriter.print("html")
优点:动态资源,可以编程
html
缺点:html是静态页面,不能包含动态信息
优点:不用为输出html标签而发愁
JSP(java server pages)
优点:在原有html的基础上添加java脚本,构成jsp页面
2、JSP和Servlet的分工
JSP
作为请求发起页面例如显示表单,超链接
作为请求结束页面,例如显示数据
Servlet
作为请求中处理数据的环节
![](https://img.haomeiwen.com/i14016997/0488cd57257249f3.png)
3、JSP组成
jsp = html + java脚本 + jsp标签(指令)
jsp中无需创建即可使用的对象一共有九个,被称之为九大内置对象,例如:request对象,out对象
3种java脚本
<%...%>:
java代码片段(常用),用于定义0-N条java语句,方法内能写什么,他就可以放什么!
<%=...%>:
java表达式,用于输出(常用),用于输出一条表达式(或变量)的结果,reponse.getWriter().print(...);这里能放什么,他就可以放什么!
<%!...!%>:
声明,用来创建类的成员变量和成员方法(基本不用,但容易被考到)
Jsp中java脚本演示
<%--它是jsp指令,也是一种特殊的标签--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--java代码片段--%>
<%
/*获取项目名*/
String path = request.getContextPath();
/*http://localhost:8080/day10_1/*/
String basepath = request.getScheme()+":"+"//"+request.getServerName()+":"+
request.getServerPort()+path+"/";
%>
<html>
<head>
<%--向页面输出basepath--%>
<base href="<%=basepath%>">
<title>$Title$</title>
</head>
<body>
$END$dasfa
<%
int a = 10;
%>
<%
out.print(a++);
%>
<%=a%>
<%!
int a =100;
public void fun(){
System.out.println(a);
}
%>
<%
out.print(this.a++);
fun();
%>
</body>
</html>
![](https://img.haomeiwen.com/i14016997/613d808a09cf7241.png)
<%--它是jsp指令,也是一种特殊的标签--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--java代码片段--%>
<%
/*获取项目名*/
String path = request.getContextPath();
/*http://localhost:8080/day10_1/*/
String basepath = request.getScheme()+":"+"//"+request.getServerName()+":"+
request.getServerPort()+path+"/";
%>
<html>
<head>
<%--向页面输出basepath--%>
<base href="<%=basepath%>">
<title>$Title$</title>
</head>
<body>
<table border="1" align="center" width="60%">
<tr>
<td>name</td>
<td>age</td>
</tr>
<%
for (int i = 0;i < 10; i++) {
%>
<tr>
<td>zhangsan</td>
<td>28</td>
</tr>
<%
}
%>
</table>
</body>
</html>
![](https://img.haomeiwen.com/i14016997/8ec4b26f56c4c53c.png)
jsp和servlet分工的案例
![](https://img.haomeiwen.com/i14016997/46f06c6a3d058e78.png)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String path = request.getContextPath();
String basepath = request.getScheme()+":"+"//"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basepath%>">
<title>$Title$</title>
</head>
<body>
<form action="/day11/AServlet" method="post">
整数1:<input type="text" name="num1"><br/>
整数2:<input type="text" name="num2"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
package baoming;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "AServlet")
public class AServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*获取参数*/
String s1 = request.getParameter("num1");
String s2 = request.getParameter("num2");
/*转换成int类型*/
int num1 = Integer.parseInt("num1");
int num2 = Integer.parseInt("num2");
/*运算*/
int sum = num1 + num2;
/*把结果保存到request域中*/
request.setAttribute("result","sum");
/*转发到result.jsp中*/
request.getRequestDispatcher("/day11/jia/result.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String path = request.getContextPath();
String basepath = request.getScheme()+":"+"//"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basepath%>">
<title>Title</title>
</head>
<body>
<%
Integer result = (Integer)request.getAttribute("result");
%>
<%=result %>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>AServlet</servlet-name>
<servlet-class>baoming.AServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AServlet</servlet-name>
<url-pattern>/AServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>formjsp</servlet-name>
<jsp-file>/jia/form.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>formjsp</servlet-name>
<url-pattern>/form.jsp</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>resultjsp</servlet-name>
<jsp-file>/jia/result.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>resultjsp</servlet-name>
<url-pattern>/result.jsp</url-pattern>
</servlet-mapping>
</web-app>
JSP原理
- jsp其实就是一种特殊的Servlet
当jsp页面第一次被访问时,服务器会把jsp编译成java文件,(这个java文件其实就是一个servlet类)
然后再把java编译成.class
然后创建该类对象
最后调用他的service方法
第二次请求同意jsp时,直接调用service()方法
- 在tomcat的work目录下面,可以找到对应的.java源代码
- 查看jsp对应的java文件
java脚本
html
JSP注释
<%!......!%>:当服务器把jsp编译成java文件时已经忽略了注释部分
网友评论