重定向-转发-编码问题-登录页面

System.out.println(request.toString());
System.out.println(response.toString());

org.apache.catalina.connector.RequestFacade@16bbe53
org.apache.catalina.connector.ResponseFacade@9c62da
__________________________________________________________________
PrintWriter out = response.getWriter();
out.write(97);//编码结果
out.print(97);//原样输出
//a 97
--------------------------------------------------------------------
String name = "a.jpg";
String type=this.getServletContext().getMimeType(name);
System.out.println(type);
//image/jpeg


// 告诉览器返回的是一个图片.浏览器会以图片方式显示
response.setContentType(type);
-----------------------------------------------------------------
String s = "中文乱码问题的实验";
System.out.println("源码为:"+"\n"+s);
byte[] b= s.getBytes("utf-8"); //以utf-8进行编码
System.out.println(Arrays.toString(b));
//[-28, -72, -83, -26, -106, -121, -28, -71, -79, -25, -96, -127, -23, -105, -82, -23, -94, -104, -25, -102, -124, -27, -82, -98, -23, -86, -116]


String msg=new String(b,"iso8859-1");//以iso8859-1解码,相当于来自web的信息,服务器解析
System.out.println(msg); //??-????1±???é??é¢???????éa
byte[] b2=msg.getBytes("iso8859-1"); //以iso8859—1编码
System.out.println(Arrays.toString(b2));//[-28, -72, -83, -26, -106, -121, -28, -71, -79, -25, -96, -127, -23, -105, -82, -23, -94, -104, -25, -102, -124, -27, -82, -98, -23, -86, -116]
String msg_ =new String(b2,"utf-8"); //以utf-8解码
System.out.println(msg_);


原理就是  
String s = "中文乱码问题的实验"; //web用户输入信息为String类型
byte[] b= s.getBytes("utf-8"); //网页的编码是utf-8编码 以utf-8进行传速
String msg=new String(b,"iso8859-1"); //tomcat 内部是以iso8859-1编码,文字是utf-8的编码的  经服务器编码会得到乱码
byte[] b2=msg.getBytes("iso8859-1"); // 我们得到的乱码可以用iso8859进行解码,得到的是utf-8编码
String msg_ =new String(b2,"utf-8"); //我们在以utf-8进行解码  就会得到String类型的编码
System.out.println(msg_);
--------------------------------------------------------------------------------------------------------
String name=request.getParameter("username");//****mo1?username=nihaoa
System.out.println(name); //WEB提交的表单


response.sendRedirect("/day11/second"); //跳转
----------------------------------------------------------------------------------------------------
// 1.获取请求方式
String methoded = request.getMethod();
response.getWriter().write(methoded);
//2.获取协议
String protocol = request.getProtocol();
//3获取请求路径
String requestURI = request.getRequestURI();
// 4获取主机的ip
String localadd=request.getLocalAddr();
//5 :获取到主机名字
String servername=request.getServerName();
//获取客户机的ip
String remoteAdd=request.getRemoteAddr();
//获取客户机的端口
int remoteport=request.getRemotePort();


System.out.println("1.获取请求方式"+methoded);
System.out.println("2.获取协议"+protocol);
System.out.println("3获取请求路径"+requestURI);
System.out.println("4获取主户机的ip"+localadd);
System.out.println("5 :获取到主机名字"+servername);
System.out.println(remoteAdd+" : "+remoteport);
------------------------------------------------------------------------------------
请求转发:
RequestDispatcher rd= request.getRequestDispatcher("/资源路径");
rd.forward(request,response);
重定向
response.sendRedirect("/虚拟目录/资源路径");
jsp
jsp :java server page 
jsp作用: 解决servlet做展示不方便问题.算是一个servlet。
元素 :<%!   %>  <%     %> <%=    %>
获取各种域中储存的数据
<%=request.getAttribute("name");>
${requestScrope.name}
---------------------------------------------------------------------------
会话技术;用户通过浏览访问服务器web资源,然后关闭浏览器,整个过程。
会话技术作用:可以存储用户在一次会话过程中产生的数据。 


会话分两种: cookie:客户端会话技术
session:服务器端会话技术。


Cookie是客户端技术
程序把每个用户的数据以cookie的形式写给用户各自的浏览器。
当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。
这样,web资源处理的就是用户各自的数据了。

cookie的API
1.创建cookie
javax.servlet.http.Cookie类
Cookie cookie=new Cookie(String name,String value);
2.通过cookie对象获取name,value
String cookie.getName();获取名称
String cookie.getValue();获取值.
3.怎样将cookie携带到浏览器与怎样从请求中获取cookie。
response.addCookie(Cookie c);
Cookie[] request.getCookies();
问题:为什么第二次访问时,cookie信息会带到服务器端?
原因:是因为cookie是有path的。
setPath()去设置其cookie的路径,那么当访问这样的路径时,cookie信息就会携带到服务器端。
可简化写成 setPath("/");
cookie持久化问题
默认情况cookie是会话级别,它是存储在浏览器内存中,如果关闭浏览器,cookie消失.
通过setMaxAge方法来将cookie设置为持久化.

删除持久化cookie
setMaxAge(0); 直接删除
setMaxAge(负数); 浏览器退出时,才删除cookie文件.
注意:要想删除,必须要保证path值一致.
==========================================================
cookie示例:显示浏览商品信息

代码区:

登录模块:

login.jsp
LoginServlet.java

success.html

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登录</title>
</head>
<body>
	<%=request.getAttribute("loginmessage") == null ? "": request.getAttribute("loginmessage")%><br>				
	<br>
	${requestScope.loginmessage }				
	<form action="/day12_1/login" method="post">
		username:<input type="text" name="username"><br>
		password:<input type="password" name="password"><br> <inputtype="submit" value="login">
	</form>

</body>
</html>

loginServerlet.java

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//login login.jsp
public class LoginServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		String username = request.getParameter("username");
		String password = request.getParameter("password");

		if ("tom".equals(username) && "123".equals(password)) 
		{
			response.sendRedirect("/day12_1/success.jsp");//重定向
		} else {
			request.setAttribute("loginmessage", "用户名或密码错误");//请求转发:
			request.getRequestDispatcher("/login.jsp").forward(request,	response);
		}
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		doGet(request, response);
	}
}
success.html

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>1.jsp</title>
</head>
<body>
	登录成功
</body>
</html>








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值