1. Servlet基础
Servlet是在服务器上运行的小程序。一个Servlet就是一个Java类,并且可以通过“请求-响应”辩称模型来访问这个驻留在服务器内存里的Servlet程序。
2. Tomcat容器等级
Tomcat容器分为四个等级,Servlet的容器管理Context容器,一个Context对应一个Web工程。
3. 创建Servlet
Servlet接口有3个方法:init()、Service()、destroy(),GenericServlet是一个与协议无关的抽象类,HttpServlet是一个实现了http协议的抽象类,我们自定义Servlet一般要重写doGet()和doPost()方法
(1). 创建一个类继承HttpServlet类
(2). 重写doGet()或者doPost()方法(也可以覆盖其他方法)
(3). 在web.xml中注册Servlet
例如:
public class FirstSerlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("get请求------");
resp.setContentType("text/html;charset:UTF-8");
PrintWriter pw = resp.getWriter();
pw.print("<h1>hello---get</h1>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("post请求------");
PrintWriter pw = resp.getWriter();
pw.print("<h1>hello---post</h1>");
}
}
在web.xml中配置:
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.thr.servlet.FirstSerlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet/FirstServlet</url-pattern>
</servlet-mapping>
JSP文件:
<a href="servlet/EclipseServlet">get方式跳转Servlet</a>
<form action="servlet/EclipseServlet" method="post">
<input type="submit" value="post方式跳转Servlet">
</form>
Servlet中如果遇到中文乱码显示问题,可以在doPost()或者doGet()中开头加入以下语句即可解决:
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
4. Servlet生命周期
(1). 初始化阶段,调用init()方法。
(2). 响应客户请求阶段,调用service()方法。由service()方法根据提交方式选择执行doGet()或者doPost()方法。
(3). 终止阶段,调用destroy()方法。
5. Tomcat装载Servlet的三种情况
(1). Servlet容器启动时自动装载某些Servlet,实现它只需要在web.xml文件中的<Servlet></Servlet>之间添加如下代码:<loadon-startup>1</loadon-startup>,数字越小表示优先级别越高。
(2). 在Servlet容器启动后,客户首次向Servlet发送请求。
(3). Servlet类文件被更新后,重新装载Servlet。
一个Servlet的方法执行顺序:构造方法--->init()方法--->doGet()方法或者doPost()方法--->停止服务器执行destroy()方法。
6. Servlet与九大内置对象
7. Servlet路径跳转
绝对路径:放之四海而皆准的路径
相对路径:相对与当前资源的路径
(1). 超链接和表单跳转
当使用超链接访问地址时,如:
<span style="white-space:pre"> </span><a href="/servlet/HelloServlet">访问HelloServlet</a>
那么,它会直接访问服务器下的路径:http://localhost:8080/servlet/Helloworld。
当修改为:
<a href="servlet/HelloServlet">访问HelloServlet</a>
访问就变成了:http://localhost:8080/应用名/servlet/Helloworld。
使用绝对路径访问可以使用path变量:
<%
String path = request.getContextPath();
%>
<a href="<%=path%>/servlet/访问HelloServlet">访问HelloServlet</a>
也是可以达到相同目的的。这个path表示的是项目的根目录。
表单中action的URL地址写法,和超链接是完全一致的。
(2). web.xml的设置
在web.xml中的<url-pattern>标签中,记住要使用"/"开头,这里的"/"表示的是项目的根目录
(3). Servlet的跳转
请求重定向的方式:
使用request.getContextPath()获取上下文对象。
<span style="white-space:pre"> </span>response.sendRedirect(request.getContextPath() + "/test.jsp");
服务器内部跳转:
记得前面加上"/",表示的是项目根目录。
request.getRequestDispatcher("/text.jsp").forward(request, response);
或者使用
request.getRequestDispatcher("../text.jsp").forward(request, response);
8. 获取初始化参数
在web.xml中配置Servlet时,可以配置一些初始化参数。而在Servlet中可以通过ServletConfig接口提供的方法来取得这些参数。
在<Servlet>标签内配置:
<span style="font-family:Microsoft YaHei;"> <init-param>
<param-name>item</param-name>
<param-value>NBA</param-value>
</init-param></span>
然后在需要取得初始化参数的Servlet中的init()方法中使用:
<span style="font-family:Microsoft YaHei;"> String item = getInitParameter("item");</span>
即可取得我们设定的NBA。9. MVC
MVC模式:MVC(Model、View、Controller),是软件开发过程中比较流行的设计思想。旨在分离模型、控制、视图。是一种分层思想的体现。
10. Model2
JavaWeb的Model2开发模型就是MVC思想的体现。