JavaWeb(6) : JSP原理

一、什么是JSP?

  • JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。
  • JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。

零、JSP原理

  • 0.1 Web服务器是如何调用并执行一个jsp页面的?

  • 浏览器向服务器发请求,不管访问的是什么资源,其实都是在访问Servlet,所以当访问一个jsp页面时,其实也是在访问一个Servlet,服务器在执行jsp的时候,首先把jsp翻译成一个Servlet,所以我们访问jsp时,其实不是在访问jsp,而是在访问jsp翻译过后的那个Servlet
* jsp其实是一种特殊的Servlet
    > 当jsp页面第一次被访问时,服务器会把jsp编译成java文件(这个java其实是一个servlet类)
    > 然后再把java编译成.class
    > 然后创建该类对象
    > 最后调用它的service()方法
    > 第二次请求同一jsp时,直接调用service()方法。

二、JSP的组成与作用

  • jsp = html + java脚本 + jsp标签(指令)
 * Servlet:
    > 缺点:不适合设置html响应体,
    需要大量的response.getWriter().print("<html>")
    > 优点:动态资源,可以编程。
  * html:
    > 缺点:html是静态页面,不能包含动态信息
    > 优点:不用为输出html标签而发愁
  * jsp(java server pages):
    > 优点:在原有html的基础上添加java脚本,构成jsp页面。

三、Jsp中java脚本及其演示

  • <% %>和<%! %>里的代码互不影响,相当于走两条不同的路
  • <%! %>相当于类的声明
  • <% %>离得远也能把里面的代码连起来
<body>
    This is my JSP page. <br>
    <%
    		int a = 10;
     %>
     
      <%
    		out.print(a++);
     %>
     <br>
     <%=a %>
     
     <%!
    		int a = 100;
    		public void fun1() {
    			System.out.println(a);
    			}
      %>
       <%
    		out.print(this.a++);
    		fun1();
     %>
  </body>
 <body>
<table border="6" align="center" width="66%">
	<tr>
		<td>姓名</td>
		<td>年龄</td>
		
	</tr>
<%
	/* for(int i = 0;i < 6; i++) { */
	int i = 0;
	while(i < 6) {
 %>
	<tr>
		<td>法印</td>
		<td>28</td>
		
	</tr>
<%!
	int i = 666;
 %>	
<%
	i++;
	}
 %>	
</table>
  </body>

四、Jsp最佳实践(JSP和Servlet的分工)

  • JSP:作为请求发起页面,例如显示表单、超链接。
  • JSP:作为请求结束页面,例如显示数据。
  • Servlet:作为请求中处理数据的环节。
 	Jsp最佳实践就是jsp技术在开发中该怎么去用。

  不管是JSP还是Servlet,虽然都可以用于开发动态web资源。
  但由于这2门技术各自的特点,在长期的软件实践中,
  人们逐渐把servlet作为web应用中的控制器组件来使用,
  而把JSP技术作为数据显示模板来使用。其原因为,程序的数据通常要美化后再输出:
  让jsp既用java代码产生动态数据,又做美化会导致页面难以维护。
  让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,
  难以维护。因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,
  servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做。

五、JSP与Servlet一起加法运算

  • 5.1 form.jsp
<body>
   <form action="/day11_1/AServlet" method="post">
   	整数1:<input type="text" name="num1"><br>
   	整数2:<input type="text" name="num2"><br>
   	<input type="submit" value="提交">
   </form>
  </body>
  • 5.2 AServlet.java
public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 1.获取参数
		String s1 = request.getParameter("num1");
		String s2 = request.getParameter("num2");
		
		// 2.转换成int类型
		int num1 = Integer.parseInt(s1);
		int num2 = Integer.parseInt(s2);
		
		// 3.求和运算
		int sum = num1 + num2;
		
		// 4.把结果保存到request域中
		request.setAttribute("sum", sum);
		
		// 5.请求包含
		request.getRequestDispatcher("/addition/result.jsp").include(request, response);


	}
  • 5.3 result.jsp
<body>
    <%
   int result = (Integer)request.getAttribute("sum");
     %>
     <%=
     result
      %>
  </body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值