程序员

Servlets & JSP 学习笔记(一)

2018-10-25  本文已影响0人  值得_e36c

1.http:

超文本传输协议:HyperText Transfer Protocol

是web上客户和服务器之间通信所用的协议

2.URL

统一资源定位符:Uniform Resource Locators

web上的每个资源都有唯一的地址

3.概述总结

4.MVC设计模式

MVC即模型—视图—控制器

就是把业务逻辑从servlet中抽出来,把它放在一个模型中,所谓模型就是一个可重用的普通java类,是业务数据和方法的组合。

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);

}

}


运行结果

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内容

获取body内容的servlet代码 发出请求的html代码

getInputStream方法:利用该方法上传文件,不过比较琐碎

getPart与getParts方法取得上传文件:

html界面 servlet代码

注意的点:

1.窗体发送时,如果要上传文件,<form>标签里的enctype属性必须设为multipart/form-data.

2.@MultipartConfig:只有设置此标注才能使用getPart相关API,初次之外,它还可以设置相关属性。

相关属性

3.这个例子中获得的filename为带路径的文件名,所以实际运行会报错,应该想办法获得纯文件名

header内容

9.使用RequestDispatcher调派请求

1.使用HttpWServletRequesr的getRequestDispatChar()方法取得RequestDispatcher接口实例,

2.include方法:可以将另一个servlet操作流程包含在当前servlet之中

3.如果有必须共享的属性,可以设置给请求对象设为属性,称为请求范围属性。相关方法如下:

相关属性

4.forward()方法:直接将对浏览器的响应交给另一个servlet

需要注意forward方法与下面response.sendRedirect()方法的区分,具体可以参考另外一篇文章:https://www.jianshu.com/p/ab827484147e

10.关于HttpServletResponse

使用getWriter输出字符

response.setLocale():设置地区信息,包括语系和编码方式

response.setCharacterEncoding():设置字符编码方式

response.setContentType():该方法调用了上一个方法,也可以设置字符编码方式,其中该方法第一个参数代表mime类型名称,表示返回的响应类型。

初次之外,resquest也需要设置编码方式,一般在程序中如下写:

使用getOutputStream()输出二进制字符

一个读取pdf的实例:

代码 代码续

使用sendRedirect()、sendError()方法

一个用来对url重定向,一个用来发送错误信息。

上一篇下一篇

猜你喜欢

热点阅读