JSP related

JSP related

problem:

After learning Servlet, using Servlet to display the page, the code writing is too troublesome. Greatly affect the efficiency of development, so is there a way to

So let us do the programming work of webpages like we used to write webpages?

solve:

Use JSP technology

concept:

The full name of JSP is Java Server Pages, and the Chinese name is java server page. It is basically a simplified Servlet design. It [1] is a dynamic web page technology standard initiated by Sun Microsystems and participated by many companies.

Features:

Essentially Servlet

Cross-platform, write once and run everywhere

Cross-platform components

Robustness and safety

Jsp access principle:

The browser initiates a request, requests a JSP, the request is received by the Tomcat server, executes the JspServlet to escape the requested JSP file into the corresponding java file (also Servlet), and then executes the escaped java file.

 

 

Jsp syntax and instructions:

JSP page directive

<%@page language="java"%><%-- 声明转译的语言 --%>
<%@page import="java.util.*,java.lang.*"%><%-- 声明转译时导入的java包文件--%>
<%@page pageEncoding="utf-8"%><%-- 设置jsp的数据保存的编码格式--%>
<%@page contentType="text/html; charset=utf-8"%><%-- 设置数据的响应编码格式--%>
<%@page session="false"%><%-- 设置session的状态,默认为true,也就转译的servlet文件中默认session是开启的,使用false关闭--%>
<%@page isErrorPage="true"%><%-- 默认为false ture表示开启exception异常对象的使用--%>
<%@page errorPage="error.jsp"%><%-- 设置当jsp运行出现异常错误时跳转指定的页面--%>
<%--
	page指令的作用:设置jsp转译的时候的一些配置信息。
 --%>
<%

	//int i=5/0;
%> 

JSP taglib directive

Jsp partial code block

Jsp global code block

Jsp script segment

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%--
	局部代码块
	声明方式:<% java代码 %>	
	特点:
		使用局部代码块声明的java代码会被原样转译到_jspService方法中。
              也就是局部代码。
--%>
<%
	int a=123;
	System.out.println(a);
	test();
%>
<%--
	全局代码块
		声明方式:<%! 声明全局java代码%>
		特点:
			全局代码块中声明的java代码,在被转译时,
                   会转译成jsp对应的java文件的全局的代码。
		作用:
			声明方法和全局量等
		注意:
			使用全局代码块声明方法,使用局部代码块调用方法。
 --%>
<%!
	int b=456;
	public void test(){
		System.out.print("全局代码块声明");
	}
%>
<%--
	java脚本段、表达式 
	声明方式:<%=变量名或者方法名()%>
	作用:将java代码的运算结果数据或者其他数据响应给浏览器
	注意:
		在该表达式中不能使用分号结尾	
--%>
<i><%=a%></i>
<b>jsp代码块学习</b>
今天天气真好,适合学习

 

Jsp comment

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%--
	jsp的注释:
		HTML注释:会被转译也会被响应给浏览器,但是浏览器不会执行。
		CSS注释:会被转译也会被响应给浏览器,但是浏览器不会执行。
		js注释:会被转译也会被响应给浏览器,但是浏览器不会执行。
		java注释:会被转译,但不会执行
		jsp注释:注释内容不会被转译,也不会被执行
			格式:%-- 注释内容 --%
 --%>
 <html>
 	<head>
 		<style type="text/css">
 			/* 我是css注释 */
 		</style>
 		<script type="text/javascript">
 			//我是js注释
 		
 		</script>
 	</head>
 	<%
 		//int a=3;
 		int b=456;
 	%>
 	<body>
 		<!--我是HTML注释  -->
 		<!-- <i>hhh</i> -->
 		<b>HTML注释</b>
 	</body>
 </html>

Jsp static introduction (JSP include directive)

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%int a=3; %>
<i>&copy;网站声明,手机号:77889900,网站备案号等</i>

Dynamic introduction of Jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%--
	问题:
		发现,不同的jsp页面会使用相同的资源。如果将资源在每个jsp页面都单独声明
		则会造成代码的冗余量过高,不易于代码的维护和升级。
	解决:
		使用静态引入和动态引入的方式
	使用:
		静态引入:
			<%@include file="要引入的资源的相对路径"%>
			特点:
				被引入的jsp文件和原有jsp文件被转译成一个java文件使用。
				注意:静态引入的相关jsp文件中不能声明同名变量。
		动态引入:
			<jsp:include page="static.jsp"></jsp:include>
			特点:
				被引入的文件会被单独转译,原有jsp文件会调用被引入的jsp文件。
				注意:动态引入的相关jsp文件中可以声明同名变量。
	作用:
		实现了不同jsp之间的资源共享。			
 --%>
<html>
	<head></head>
	<body>
		<h3>我是静态引入和动态引入学习</h3>
		<hr>
		<%-- <i>&copy;网站声明,手机号:77889900,网站备案号等</i> --%>
		<%int a=3; %>
		<!--静态引入  -->
			<%-- <%@include file="static.jsp"%> --%>
		<!--动态引入  -->
		<jsp:include page="static.jsp"></jsp:include>
	</body>
</html>

Page forwarding (forword tag)

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%--
	jsp之间的资源转发:
		问题:
			不同的jsp在处理请求时,有可能会将当前的请求转发给另外的jsp进行处理。
		解决:
			使用forward动作指令
		使用:
				<jsp:forward page="要转发的jsp的相对路径"></jsp:forward>
			特点:
				从当前jsp跳转另外一个jsp页面。
			注意:
				forward标签中除了<jsp:param value="" name=""/>子标签以外不能出现其他内容,否则会报错。


 --%>
<html>
  <head>
  </head>
  <body>
    	<h3>forward转发标签学习</h3>
    	<hr />
    	<%
    		int a=1;
    		if(a>2){
    	%>	
    		<b>欢迎访问本网站</b>
    	<%
    		}else{
    	%>
    		<!--转发其他jsp页面  -->
    		<jsp:forward page="common.jsp">
    			<jsp:param value="zhangsan" name="uname"/>
    		</jsp:forward>
    	<%} %>
  </body>
</html>

 

Jsp's built-in objects:

PageContext object

Request object

Session object

Application object

Response object

Out object

Page object

Exception object

Config object

<%@ page language="java" import="java.util.*" pageEncoding="utf-8" isErrorPage="true"%>
<%--
	jsp的内置对象学习:
		内置对象:
			jsp在转译成其对应的java文件(也就是Servlet)时,会默认在_jspService方法中
			声明创建几个对象。
		特点:
			我们可以在jsp页面中声明java局部代码块,在代码块中直接使用内置对象。
		对象:
			pageContext:页面上下文对象,此对象封存了另外8个对象。
				注意:一个jsp页面一个pageContext对象。pageContext对象每次请求都会重新创建。
				作用域:当前jsp页面
			request:封存了请求相关数据,由服务器创建
			session:解决了同一个不同请求之间的数据共享问题
			application:ServletContext对象,解决了不同用户之间的数据共享问题
			out:响应数据的对象,交于response对象,out对象底层使用了缓冲区。out对象的效率高于response
			response:响应对象,设置编码格式
			page:代表当前被执行的jsp转译的java文件的对象
			config:ServletConfig对象,使用此对象完成资源的初始化。
			exception:jsp页面的异常对象,封存了异常信息。
		注意:
			对象的名字必须是转译好的java文件中声明的对象名。
--%>
<%	
	//获取请求数据
	String uname=request.getParameter("uname");
	System.out.println(uname);
	int a=3;
	session.setAttribute("str", "我是session");

%>

 

use:

JSP is responsible for page presentation, and Servlet is responsible for business logic processing.

Summary of resource path:

Path in Jsp:

Relative path: ../../resources

Absolute path: /virtual project name/resource path

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
System.out.println(basePath);
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
     <base href="<%=basePath%>">
    <title>My JSP 'path.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!-- 
		问题:
			在jsp页面中进行资源之间的跳转时,如果书写的是相对路径
			这样会造成如果当前文件的路径发生变更,从当前路径查找资源的相对路径
			都要重新进行书写。
		解决:
			将相对路径编程绝对路径
		使用:
			在jsp中路径中的第一个/表示服务器根目录。
		示例:
				<a href="/虚拟项目名/资源路径">访问关键字</a>
	
		注意:
			在Myeclipse中创建的jsp页面会自动生成路径处理代码basePath
			而basePath的值为当前项目根目录,并且在head标签中使用了<base href="<%=basePath%>">
			相当于将当前页面的资源全部默认定位为从项目根目录开始查找,我们就不需要写第一个/了
		注意:
			basePath方式和添加/方法只能二选一。
	 -->
  </head>
  
  <body>
   	我是path.jsp
   	<a href="a/a.jsp">a.jsp</a>
   	
   	
   	
  </body>
</html>

 

11-jsp project

package com.stackfarm.jsp;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * Servlet重定向jsp
 * 		resp.sendRedirect("jsp的相对路径/servlet的别名");//重定向jsp页面
 *  Servlet请求转发jsp
 * 		req.getRequestDispatcher("jsp的相对路径/servlet的别名").forward(req, resp);//请求转发到jsp页面
 * 	服务器根目录    服务器的webapps目录路径             localhost:8080/
 *  项目根目录       服务器的webapps目录下项目路径    localhost:8080/jsp/
 * 注意:
 * 	以上两种写法其实都是相对路径,相对路径指的是从当前请求路径查找jsp所经过的路径。
 * 请求转发和重定向的绝对路径写法总结:
 * 	重定向:
 * 		在重定向中的路径中第一个/表示服务器根目录。
 * 		示例:
 * 			resp.sendRedirect("/虚拟项目名/资源路径");//重定向jsp页面
 *  请求转发:
 *  	在请求转发中第一个/表示项目根目录
 *  	示例:
 *  		req.getRequestDispatcher("/资源路径").forward(req, resp);//请求转发到jsp页面
 * 
 * @author MyPC
 *	http://localhost:8080/jsp/one/my
 * http://localhost:8080/jsp/one/user/main.jsp
 */
public class MyServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//设置请求编码格式
		req.setCharacterEncoding("utf-8");
		//设置响应编码格式
		resp.setContentType("text/html;charset=utf-8");
		//获取请求信息
		String choice=req.getParameter("choice");
		//处理请求信息
		if("main".equals(choice)){
			//响应
				//resp.sendRedirect("/jsp/user/main.jsp");//重定向jsp页面
				req.getRequestDispatcher("/user/main.jsp").forward(req, resp);//请求转发到jsp页面
		}
		//响应处理结果
	}
}

 

Guess you like

Origin blog.csdn.net/qq_39655510/article/details/102101368
jsp