学习Servlet-day06

1.include指令

(1)作用:

告诉容器,在将jsp转换成Servlet时,将
某个文件的内容插入到该指令所在的位置。

(2)语法:

<%@ include file=""%>
file属性用于指定被包含的文件。

2.比较重定向和转发

(1)能否共享request和response

转发可以,重定向不行。
注:
    request和response的生存时间是
    一次请求和响应期间存在。

(2)浏览器地址栏的地址有无变化

转发没有变化,重定向有变化。

(3)目的地有无限制

转发有限制(同一个应用),重定向没有。

3.路径问题

链接地址,表单提交,重定向,转发
<a href="">
<form action="">
response.sendRedirect("")
request.getRequestDispatcher("")

(1)什么是相对路径?

不以"/"开头的路径。

(2)什么是绝对路径?

以"/"开头的路径。

(3)如何写绝对路径?

链接地址,表单提交,重定向从应用名开始写,
而转发从应用名之后开始写。
注意:
    不要将应用名直接写在路径里面,而应该
使用以下方法来获得实际部署时的应用名。
    String request.getContextPath()
建议使用绝对路径,易写,易维护。

4.状态管理

(1)什么是状态管理?

将浏览器与服务器之间多次交互当做一个整体来
看待,并且将多次交互所涉及的数据(即状态)保存
下来。

(2)如何进行状态管理?

1)将状态保存在浏览器端(Cookie)
2)将状态保存在服务器端(Session)

(3)Cookie (小甜饼)

1)什么是Cookie?

服务器临时存放在浏览器端的少量数据。

2)工作原理

当浏览器第一次访问服务器时,服务器会将少量数据以
set-cookie消息头的形式发送给浏览器,浏览器会将这些数据保存下来;
当浏览器再次访问服务器时,会将这些数据以cookie消息头的形式发送给服务器。


3)如何添加Cookie?

Cookie c = new Cookie(String name,
String value);
注:  name称之为cookie的名称,value
    称之为cookie的值。
response.addCookie(c);

4)如何读取cookie?

注:读取浏览器发送过来的cookie

Cookie[] request.getCookies();
注: 该方法有可能返回null!
String cookie.getName();
String cookie.getValue();

5)cookie的编码问题

a.什么是cookie的编码问题?
cookie只能存放合法的ascii字符,中文需要
转换成ascii字符的形式来存放。
b.如何处理?
 step1.在添加cookie时,使用encode方法。
String URLEncoder.encode(String str,
String charset);
 step2.在读取cookie时,使用decode方法。
String URLDecoder.decode(String str,
String charset);

c.建议:添加cookie时,最好统一使用encode
方法编码。

6)cookie生存时间问题

a. 浏览器默认情况下,会将cookie保存在内存里面。
注:
    浏览器只要不关闭,cookie就会一直存在,
关了,则cookie会被销毁。
b. 可以调用以下方法来设置生存时间
    cookie.setMaxAge(int seconds)
注:
    b1. 单位是秒。
        cookie.setMaxAge(365 * 24 * 60 * 60);
    b2. seconds可以大于0,等于0和小于0
        大于0: 浏览器会把cookie保存在硬盘上,超过指定时间,浏览器会删除该cookie。
        小于0:(缺省值),即把cookie存放到内存里面。
        等于0:浏览器会立即删除该cookie。
            比如,要删除名称为uid的cookie:
            Cookie c = new Cookie("uid","");
            c.setMaxAge(0);
            response.addCookie(c);


下面是代码例子:

web.someServlet.java

package web;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SomeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(
			HttpServletRequest request, 
			HttpServletResponse response) 
					throws ServletException, 
					IOException {
		String uname = 
				request.getParameter("uname");
		System.out.println("uname:" + uname);
		
//		response.sendRedirect(
//				request.getContextPath() 
//				+ "/biz01/b1.jsp");
		
		request.getRequestDispatcher("/biz01/b1.jsp")
		.forward(request, response);
		
	}

}

WEB-INF.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <servlet>
    <servlet-name>SomeServlet</servlet-name>
    <servlet-class>web.SomeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>SomeServlet</servlet-name>
    <url-pattern>/some</url-pattern>
  </servlet-mapping>
</web-app>

biz01.b1.jsp

<%@ page pageEncoding="utf-8"  
contentType="text/html; charset=utf-8"%>
<html>
  <head></head>
  <body style="font-size:30px;">
        这是b1<br/>  
    <a href="../b2.jsp">访问b2</a><br/>
    <a href="<%=request.getContextPath()%>/b2.jsp">访问b2</a><br/>
  </body>
</html>

webapp.b2.jsp

<%@ page pageEncoding="utf-8"  
contentType="text/html; charset=utf-8"%>
<html>
  <head></head>
  <body style="font-size:30px;">
        这是b2<br/>
    <a href="biz01/b1.jsp">访问b1</a><br/>
    <a href="<%=request.getContextPath()%>/biz01/b1.jsp">访问b1</a>
  </body>
</html>

biz02.b3.jsp

<%@ page pageEncoding="utf-8"  
contentType="text/html; charset=utf-8"%>
<html>
  <head></head>
  <body style="font-size:30px;">
    <form action="<%=request.getContextPath()%>/some" method="post">
      用户名:<input name="uname"/>
      <input type="submit" value="确定"/>
    </form>
       
  </body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值