/**
1. 请求和响应
* 请求:客户端向服务器
* 类型:HttpServletRequest request
* 定义:代表了客户端向服务器发送的请求报文,该对象由服务器(web容器|Servlet容器)创建,
同时发送给Service(),Service()发送给doGet()或doPost()。
* 作用
1. 获取请求参数
* request.getParameter("username");
* request.getParameterValues(name)
2. 获取项目的虚拟路径
* request.getContextPath();
3. 转发(路径跳转)
* request.getRequestDispatcher("").forward(request, response);
4. 域对象(哥四个)
* 响应:服务器向客户端
* 类型: HttpServletResponse response
* 定义:代表了服务器向客户端发送的响应报文,该对象由服务器(web容器|Servlet容器)创建,
同时发送给Service(),Service()发送给doGet()或doPost()。
* 作用
1. 服务器向客户端做出响应(文本|html)
* response.getWriter();
* write();|print();
2. 重定向(路径跳转)
* response.sendRedirect();
2. 转发与重定向区别
* 转发地址栏不变,重定向地址栏改变。
* 转发客户端发送一次请求,重定向客户端发送两次请求。
* 转发可以访问WEB-INF下资源,重定向不能。
* 因为WEB-INF目录属于Web应用的私有目录(客户端无法直接访问)
* 转发可以携带request对象,重定向不能。
3. Servlet练习(伪登录|伪注册)User:admin2,admin2
4. Web应用中路径问题
* 在web应用中,由于使用转发跳转路径时,地址栏不变。此时使用相对路径(../)存在404现象。
固使用绝对路径,解决web应用中的路径问题
* 什么是绝对路径,以“/”开头的路径,称之为绝对路径。
* “/”代表意思
* 由服务器解析,代表着当前项目路径:http://localhost:8080/day06_servletdemo2
* 以下两种情况由服务器解析
1. web.xml中的url
2. 转发
* 由浏览器解析,代表着当前服务器路径:http://localhost:8080
* 以下两种情况由浏览器解析
1. html中的路径,eg:src:script|img href:link|a action:form
2. 重定向
5. Web应用中乱码问题
* 乱码:编码与解码不一致时,出现乱码现在
* 请求乱码:客户端编码与服务器解码不一致
* 响应乱码:服务器编码与客户端解码不一致
* 编码:将字符转换为二进制的过程称之为编码
* 解码:将二进制转换为字符的过程称之为解码
* 默认客户端与服务器端编码与解码请情况
* 服务器的编码与解码默认一致为:ISO-8859-1
* 客户端(浏览器)编码默认为:<meta charset="UTF-8">
解码默认为:GBK
* 解决web中乱码问题
* 请求乱码
* POST请求:request.setCharacterEncoding("UTF-8");
* GET请求:server.xml中修改,URIEncoding="UTF-8"
* eg:<Connector port="8080" URIEncoding="UTF-8"/>
* 响应乱码
* 直接将服务器编码设置为GBK
* response.setCharacterEncoding("GBK");
* 将服务器编码与浏览器解码设置为UTF-8
* response.setContentType("text/html;charset=UTF-8");
* Tomcat8.0之前默认编码为:ISO-8859-1
Tomcat8.0之后(含8.0)默认编码为:UTF-8
package com.atguigu.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class EndServlet
*/
public class EndServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//测试request对象
System.out.println("doGet()");
//1.通过name, 获取请求参数,
String username = request.getParameter("username");
// request.getParameterValues(name)
System.out.println("username:"+username);
//2. 获取项目的虚拟路径
String contextPath = request.getContextPath();
System.out.println("contextPath:"+contextPath);
//转发
//获取转发器
RequestDispatcher requestDispatcher = request.getRequestDispatcher("login_success.html");
//执行转发
requestDispatcher.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// response.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=UTF-8");
System.out.println("doPost()");
//测试response
//服务器向客户端做出响应(文本|html)
//获取响应流
PrintWriter writer = response.getWriter();
//响应
writer.write("登录成功login success!");
//2. 重定向(路径跳转)
// response.sendRedirect("login_success.html");
}
}
![7ed58a659df186ead5f7bbefe1930c7c1f1.jpg](https://i-blog.csdnimg.cn/blog_migrate/f493f8a4733f9ba48b123953a3863fee.jpeg)
![1157a0cfda3fbee54a42c697158217fdb04.jpg](https://i-blog.csdnimg.cn/blog_migrate/9d23ea6da2f022994ecca21d1b4b43a6.jpeg)
![4abf46c0c81b5a806a4cd9ff3c45564505d.jpg](https://i-blog.csdnimg.cn/blog_migrate/482e985655526922a6fd3ebad5d11a34.jpeg)
![e4d0f8ebad0b07a396adf619088bcaddf9c.jpg](https://i-blog.csdnimg.cn/blog_migrate/037687face576d6aabc3d399cbf368a7.jpeg)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>form空白</title>
<base href="/day06_servletdemo2/">
<script type="text/javascript">
window.onload = function(){
var btnEle = document.getElementById("btnSub");
btnEle.onclick = function(){
//1.取用户名值
var uname = document.getElementById("username").value;
if(uname == null || "" == uname){
alert("用户名不能为空,请重新输入!");
// var yOn = confirm("确认删除吗?");
// alert(yOn);
//取消默认行为
return false;
}
}
}
</script>
</head>
<body>
<h1>登录</h1>
<form action="LoginServlet">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" id="username"></td>
</tr>
<tr>
<td align="right">密码:</td>
<td><input type="password" name="pwd"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="reset">
<input id="btnSub" type="submit" value="登录">
</td>
</tr>
</table>
</form>
<a href="index.html">回首页</a>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<base href="/day06_servletdemo2/">
</head>
<body>
<h1>登录成功</h1>
<a href="index.html">回首页</a>
</body>
</html>
![9500acfefbb47c04c245e3d0413033b75a9.jpg](https://i-blog.csdnimg.cn/blog_migrate/9bb66a5cedad4ac942fc8a161c328d1e.jpeg)