2017年9月7日 上午8:40
概述
这个类的作用是处理响应和请求
主要是是在service()方法中实现
最后附录三种有源码

接受请求方式

其中主要使用
- doGet:接受get请求
- doPost:接受post请求
- service:接受所有请求 get+ post
MyServlet3.class 继承自httpServlet,实现了三个接受请求的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| package com.shanxi.weixin.servlet;
import java.io.IOException;
import javax.servlet.GenericServlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class MyServlet3 extends HttpServlet {
@Override protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { ServletContext application = getServletContext(); String value = application.getInitParameter("param-name"); System.out.println(value); }
}
|
两种响应方式:附录代码
请求转发:
替换方式 xml 404
情景理解:
- 老公的手机屏幕亮了,我一看是一条短信,随便一看,发现语言特别暧昧,于是我猜测是小三。于是,我果断的拿起手机,回了一条短信“你在…宾馆等我,我马上过去”。然后把这个短信删了,我就出发了。小三不知道是我,所以她高兴的来了。我一见它就是一顿暴打,爽!
- 这里的小三就是浏览器,她找的其实是我老公,但是最后他的请求让我处理了。重要的是她从头到尾不知道,这就是请求转发
转发
实现
1
| req.getRequestDispatcher("/index.jsp").forward(req,res);
|
注:这里的路径直接替代web.xml中的请求文件
重定向
- 重定向是服务器对客户端响应了本次请求,响应状态吗是302,客户端接收到响应码之后,直接再次发送一个新的请求到重定向的location上。(不受用户控制)
- 重定向实际上是两次请求
实现1
1
| res.sendRedirect("/servletDemo/index.jsp");
|
注:这里要写从根路径开始
实现2
1 2
| response.setStatus(302); response.setHeader("location", "/ResponseDemo/ResponseDemo13");
|
实现1是实现2的封装
参考:Servlet实现重定向的两种方式 - 张昊亮 - 博客园
如何处理get请求的乱码

解决方法
1 2 3 4
| String name = req.getParameter("name"); byte[] bytes = name.getBytes("iso-8859-1"); name = new String(bytes, "utf-8"); System.out.println(name);
|
步骤解析:
- 获取url中的参数保存在name中,此时name输出是乱码
- 所以,我们把字符串类型的name转换成字节型保存在byte[]数组中,这种最原始的方式
- 然后对byte[]数组重新选择格式进行解码
注:默认浏览器的编码格式是iso-8859-1,要转换成的格式是我们当前项目的格式,这里是utf-8
附录一:
res.sendError(404,"你请求的资源在我这,我就不让你看!");

附录二:
当一下两种相应方式同时存在时,会报错
1 2
| req.getRequestDispatcher("/index.jsp").forward(req,res); res.sendRedirect("/servletDemo/index.jsp");
|

附录三:public class MyServlet4 extends HttpServlet完整源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| package com.shanxi.weixin.servlet;
import java.io.IOException; import java.util.Enumeration;
import javax.servlet.GenericServlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class MyServlet4 extends HttpServlet {
@Override protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
String path = req.getContextPath(); System.out.println(path); String requestURI = req.getRequestURI(); System.out.println(requestURI); Enumeration<String> names = req.getParameterNames(); String name = req.getParameter("name"); System.out.println(name); byte[] bytes = name.getBytes("iso-8859-1"); name = new String(bytes, "utf-8"); System.out.println(name);
res.sendError(404,"你请求的资源在我这,我就不让你看!"); } }
|