JSP基础
JSP作用
jsp(java server page)就是一个servlet
servlet缺点是不适合设置html响应体,html缺点是静态界面,不能包含动态信息
jsp的优点就是在原有的html上加入了java脚本,构成了jsp页面
JSP和servlet分工
jsp:
作为请求发起页面,例如显示表单,超链接
作为请求结束页面,例如显示数据
servlet:
作为请求中处理数据的环节

JSP的组成
jsp=html+java脚本+jsp标签(指令)
jsp中无需创建直接使用的对象一共有9个,例如request对象,out对象...
3种java脚本:
1.<%...%> java代码片段(常用),用来定义0-N条java语句,方法内可以写什么,他就可以写什么
2.<%=...%> java表达式,用于输出(常用),用于输出一条表达式的结果,print(...)里面能放什么,他就能放什么
3.<%!...%> 声明,用来创建类的对象和成员方法(基本不用),class A{...}里面能放什么,他就能放什么
JSP中的java脚本
JSP中可以存放java脚本
新建一个javaweb项目,向自动生成的index.jsp中添加一些java脚本
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <html> 3 <head> 4 <title>Title</title> 5 </head> 6 <body> 7 <table border="1" align="center" width="60%"> 8 <tr> 9 <td>姓名</td> 10 <td>年龄</td> 11 </tr> 12 <% 13 for(int i=1;i<=10;i++){ 14 %> 15 <tr> 16 <td>张三</td> 17 <td>18</td> 18 </tr> 19 <% 20 } 21 %> 22 </table> 23 </body> 24 </html>
1 <!--他是JSP指令,是一种特殊的标签--> 2 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 3 <!--java片段--> 4 <% 5 String path=request.getContextPath();//获取项目名 6 String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";//获取基础路径 7 %> 8 <html> 9 <head> 10 <title>$Title$</title> 11 </head> 12 <body> 13 $END$ 14 <% 15 int a=10; 16 %> 17 <% 18 out.print(a); 19 %> 20 <%=a%> 21 <%! 22 int a=100; 23 public void fun1(){ 24 System.out.println(a); 25 } 26 %> 27 <% 28 out.print(this.a++); 29 fun1(); 30 %> 31 </body> 32 </html>
JSP和Servlet分工
需求:

1 package Servlet; 2 3 import javax.servlet.ServletException; 4 import javax.servlet.http.HttpServlet; 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpServletResponse; 7 import java.io.IOException; 8 import java.security.Security; 9 10 public class AServlet extends HttpServlet { 11 public void doPost(HttpServletRequest req, HttpServletResponse rsp)throws ServletException, IOException { 12 //获取参数 13 String s1=req.getParameter("num1"); 14 String s2=req.getParameter("num2"); 15 //转换成int类型 16 int num1=Integer.parseInt(s1); 17 int num2=Integer.parseInt(s2); 18 19 int sum=num1+num2; 20 req.setAttribute("result",sum); 21 //转换到result.jsp 22 req.getRequestDispatcher("Add/result.jsp").forward(req,rsp); 23 } 24 }
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <html> 3 <head> 4 <title>Title</title> 5 </head> 6 <body> 7 <form action="/JSPLearningDay2/AServlet" method="post"> 8 整数1:<input type="text" name="num1"/><br/> 9 整数2:<input type="text" name="num2"/><br/> 10 <input type="submit" value="提交"/> 11 </form> 12 </body> 13 </html>
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <html> 3 <head> 4 <title>Title</title> 5 </head> 6 <body> 7 <% 8 Integer result=(Integer) request.getAttribute("result"); 9 %> 10 <%=result%> 11 </body> 12 </html>
JSP原理
*jsp其实就是一个特殊的servlet
当jsp被第一次访问时,服务器会把jsp文件编译成java文件(这个java其实就是一个servlet类)
然后再把java变成.class
然后创建该类对象
最后调用service()方法
第二次请求同一jsp时,直接调用service()
*在tomcat的work文件目录下有将jsp变成java文件的源代码
jsp文件中,非java脚本直接翻译成out.write(".....")
java脚本原封不动,<%=....%>翻译成out.print(".....")
在翻译过程中,已经自动把jsp的注释<%--....--%>忽略掉,不会翻译

浙公网安备 33010602011771号