1.http:
超文本传输协议:HyperText Transfer Protocol
是web上客户和服务器之间通信所用的协议
![](https://img.haomeiwen.com/i13071933/c19abc80fbbacd30.png)
2.URL
统一资源定位符:Uniform Resource Locators
web上的每个资源都有唯一的地址
![](https://img.haomeiwen.com/i13071933/91236fc5f18a8409.png)
3.概述总结
![](https://img.haomeiwen.com/i13071933/32920af710e829b1.png)
4.MVC设计模式
MVC即模型—视图—控制器
就是把业务逻辑从servlet中抽出来,把它放在一个模型中,所谓模型就是一个可重用的普通java类,是业务数据和方法的组合。
![](https://img.haomeiwen.com/i13071933/da8f54f8062fc664.png)
5.用eclipse完成的第一个servlet
package cc.openhome;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HelloServlet
*/
@WebServlet("/hello.view")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
out.println("<html>");
out.println("<head>");
out.println("<title>Hello Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1> Hello "+name+" ! </h1>");
out.println("</body>");
out.println("</html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
![](https://img.haomeiwen.com/i13071933/ccf5736a28d15dc1.png)
6.一些细节
关于HttpSerlvet类
该类继承了GenericServlet类,而后者实现了Servlet接口。servlet接口定义了基本行为,例如与Servlet生命周期相关的init()、destroy()方法以及提供服务时需要调用的service()方法等。
service方法在请求到来时会被容器调用,然后根据请求判断该调用doGet、doPost以及其它方法。
关于@WebServlet的使用
例如@WebServlet{
name = "Hello";
urlPatterns = {"/hello.view"};
loadOnStartup = 1'
}
当客户端的请求的url为/hello.view,则由名字为Hello的Servlet来处理。loadOnStartip为加载顺序。
使用web.xml
早期版本不用@WebServlet来定义标注,之前必须在WEB-INF目录下建立一个web.xml文件,该文件为部署描述文件(Deployment Descriptor 简称DD)
7.web容器的作用
包括请求信息的收集、HttpServletRequest对象以及HttpServletResponse对象的创建、输出HTTP响应的转换、两个对象的销毁以及回收等等,当然还有很多。有了web容器,就可以专心在java对象之间的互动。
8.关于HttpServletRequest
一些方法:
getParameter():指定请求参数名称来获取对应的值
getParameterValues():指定请求参数名称来获得对应的值的数组,返回值为数组
getParameterNames():返回一个Enumeration对象,包括所有请求参数的名称
getParameterMap():请求参数以map对象返回,键为请求参数名称,值为请求参数值。
除此之外,还有getHeader、getHeaders、getHeaderNames,用法与以上类似。
getReader方法:让你取得一个BufferedReader对象,利用该对象读取请求的body内容
![](https://img.haomeiwen.com/i13071933/a57e7514403c5f65.png)
![](https://img.haomeiwen.com/i13071933/aedd3ac8b98a4e21.png)
getInputStream方法:利用该方法上传文件,不过比较琐碎
getPart与getParts方法取得上传文件:
![](https://img.haomeiwen.com/i13071933/5d373b0eeb575c81.png)
![](https://img.haomeiwen.com/i13071933/5b36ba80ee4c90a0.png)
注意的点:
1.窗体发送时,如果要上传文件,<form>标签里的enctype属性必须设为multipart/form-data.
2.@MultipartConfig:只有设置此标注才能使用getPart相关API,初次之外,它还可以设置相关属性。
![](https://img.haomeiwen.com/i13071933/92d34d51a5fb1975.png)
3.这个例子中获得的filename为带路径的文件名,所以实际运行会报错,应该想办法获得纯文件名
![](https://img.haomeiwen.com/i13071933/f737a51654d36e1a.png)
9.使用RequestDispatcher调派请求
1.使用HttpWServletRequesr的getRequestDispatChar()方法取得RequestDispatcher接口实例,
2.include方法:可以将另一个servlet操作流程包含在当前servlet之中
3.如果有必须共享的属性,可以设置给请求对象设为属性,称为请求范围属性。相关方法如下:
![](https://img.haomeiwen.com/i13071933/c72df5b29f8ec01c.png)
4.forward()方法:直接将对浏览器的响应交给另一个servlet
需要注意forward方法与下面response.sendRedirect()方法的区分,具体可以参考另外一篇文章:https://www.jianshu.com/p/ab827484147e
10.关于HttpServletResponse
使用getWriter输出字符
response.setLocale():设置地区信息,包括语系和编码方式
response.setCharacterEncoding():设置字符编码方式
response.setContentType():该方法调用了上一个方法,也可以设置字符编码方式,其中该方法第一个参数代表mime类型名称,表示返回的响应类型。
初次之外,resquest也需要设置编码方式,一般在程序中如下写:
![](https://img.haomeiwen.com/i13071933/29d7db14b8812b30.png)
使用getOutputStream()输出二进制字符
一个读取pdf的实例:
![](https://img.haomeiwen.com/i13071933/91931f1b895653c8.png)
![](https://img.haomeiwen.com/i13071933/96656ccf7a6d31e3.png)
使用sendRedirect()、sendError()方法
一个用来对url重定向,一个用来发送错误信息。
网友评论