Java学习笔记-Day54 Servlet与JSP(二)



一、Servlet和JSP的作用


Servlet:后台接口,提供数据给前台的程序,从业务层获取数据。Servlet是不会用来生成动态页面的,而是会用来接收来自JSP的请求,处理请求,然后转到JSP页面显示结果给客户端。

JSP:负责和用户交互、展示数据、用户输入,操作符合用户习惯且美观。JSP适合生成动态页面,因为其中的静态部分可以直接使用HTML即可。

二、Servlet和JSP的交互


(1)从 Servlet 传递数据给 JSP

  • Servlet:① 通过内置对象request ( HttpServletRequest ) 的setAttribute方法设置数据。② 通过内置对象session ( HttpSession ) 的setAttribute方法设置数据。

  • JSP:① 通过内置对象request ( HttpServletRequest ) 的getAttribute方法获取数据。② 通过内置对象session ( HttpSession ) 的getAttribute方法获取数据。

(2)从 JSP 传递数据给 Servlet

  • JSP:① 提交表单。② url传值 ( 类似于表单的get提交 )。

  • Servlet:① 通过内置对象request ( HttpServletRequest ) 的getParameter方法获取请求参数 ( 单个字符串 )。② 通过内置对象request ( HttpServletRequest ) 的getParameterValues方法获取请求参数 ( 字符串数组 )。

注意:

① 如果获取到的是 null 值,可以在代码中添加 if 语句用来判断获取的值是否为null。创建默认值为空字符串的变量,如果判断值不为null,则将获取的值赋给改变量。

② 如果出现中文乱码,程序一开始就要设置请求编码的格式为utf-8( 只对post有效 ),JSP的表单提交方式要设置成 post 。JSP中的编码格式也要设置成utf-8。

	request.setCharacterEncoding("utf-8");
	
	String keywords="";
	if(request.getParameter("keywords")!=null) {
    
    
		keywords = request.getParameter("keywords");
	}

三、Servlet和JSP之间的跳转方式

1、转发


转发:速度快,地址栏不变,是服务端的内部行为,和浏览器没有任何关系,浏览器只获取服务端传递过来的数据。只能在当前项目内部进行转发。

请求转发也叫直接转发方式(Forward),客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。

实现转发方式一:

RequestDispatcher接口定义了请求转发的方法:

方法声明 方法描述
forward(ServletRequest request, ServletResponse response) 将请求转发到服务器上的其他资源,包括其他的Servlet,JSP等。

要使用forward方法,需要先获得RequestDispatcher对象。请求接口ServletRequest中提供了获得该对象的方法:

方法声明 方法描述
RequestDispatcher getRequestDispatcher(java.lang.String path) 使用path返回一个RequestDispatcher 对象。
	// 从servlet跳转到jsp页面
	request.getRequestDispatcher("a.jsp").forward(request, response);

实现转发方式二:jsp动态。

	<jsp:forward page="url地址"></jsp:forward>

2、重定向


重定向:速度快,地址栏会发生变化,重定向每次请求都和浏览器有关,可以重定向到任何页面(不是在当前项目中的页面也可以重定向)。

重定向也叫间接转发方式(Redirect),实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。

实现重定向方式一:

响应接口HttpServletResponse中提供了重定向的方法:

方法声明 方法描述
void sendRedirect(java.lang.String location) 重定向到 location 地址,相当于客户端重新请求location所在的资源。
	response.sendRedirect("a.jsp");

实现重定向方式二:html的a标签。

	<a href="url地址"></a>

实现重定向方式三:表单的get请求(post不是重定向)。

   <form action="ts.do" method="get"></form>

实现重定向方式四: jstl的标签。

	<c:redirect url="ts.do"></c:redirect>

实现重定向方式五:javascript的重定向。

	<script>
		location.href="ts.do";
	</script>

3、Servlet和JSP之间的跳转

3.1、Servlet跳转到JSP


(1)转发(只能转发到当前项目文件中,可以携带数据)

	request.setAttribute("list", list);
	request.getRequestDispatcher("index.jsp").forward(request, response);

(2)重定向(可以重定向到本项目文件中,也可以重定向到外部项目的URL地址中)

	response.sendRedirect("../../../../admin/admin.jsp");

3.2、JSP跳转到Servlet


(1)转发(只能转发到当前项目文件中,可以携带数据)

  1. 方式一:
	<% 
		request.setAttribute("key", "value");
		request.getRequestDispatcher("ts1.do").forward(request, response);
	%>
  1. 方式二:
	<jsp:forward page="ts1.do"></jsp:forward>

(2)重定向(可以重定向到本项目文件中,也可以重定向到外部项目的URL地址中)

  1. 方式一:
	<%
		response.sendRedirect("ts1.do");
	%>
  1. 方式二:
	<a href="ts1.do" >跳转到servlet</a>
  1. 方式三:
	<form action="ts1.do" method="get"></form>
  1. 方式四:
	<script>
		location.href="ts1.do?...";
	</script>
  1. 方式五:
	<c:redirect url="ts.do"></c:redirect>

四、客户端访问服务器端Servlet的方式


客户端访问服务器端Servlet的方式有三种,分别是:

(1)直接从地址栏输入URL访问:直接使用URL访问,是GET方式,调用doGet方法。

(2)在网页中点击超级链接访问:超级链接访问,是GET方式,调用doGet方法。

  • html或JSP中:
   <!-- 传递数据的方式: url传值 ?key=value&key=value key为参数名 -->
   <a href="a.do?name=tom&pwd=123456">提交请求到Servlet</a>
  • Servlet的doGet方法中:
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
		//获取url传递过来的值
		String name = request.getParameter("name");//变量name的值为tom
		String pwd = request.getParameter("pwd");//变量pwd的值为123456
		System.out.println("name :"+name+", pwd :"+pwd);
	}

(3)在网页中通过表单提交访问:表单提交访问,取决form的method属性的值,默认是get,指定为post时,调用doPost方法。

  • html或JSP中:
   <!-- 传递数据的方式: 表单传值 get方法 ?key=value&key=value  key为参数名 -->
   <form action="ts.do" method="get">
     <input type="text"  name="name" value="tom"><br/>
     <input type="password"  name="pwd" value="123456"><br/>
     <input type="submit" value="提交">
   </form>
  • Servlet的doGet方法中:
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
		//获取url传递过来的值
		String name = request.getParameter("name");//变量name的值为tom
		String pwd = request.getParameter("pwd");//变量pwd的值为123456
		System.out.println("name :"+name+", pwd :"+pwd);
	}

猜你喜欢

转载自blog.csdn.net/qq_42141141/article/details/111601708