MVC设计模型
M:模型(Model) 处理业务逻辑或者数据。
V:视图(View) 界面展示,人机交互
C:控制器(Controller) 视图、模型的选择;接收请求,将请求交由模型进行处理,再将模型的处理结果返回给发起请求的用户。
其中视图使用HTML、js、css、jsp、jQuery等前端技术实现;模型使用JavaBean实现;控制器则通常采用Servlet实现。
Servlet使用步骤
简单来说Servlet就是一个java类,但是它必须满足一下两点:
- 必须继承 java.servlet.http.HttpServlet
- 重写了其中的doGet()或doPost()方法
doGet()用于接受并处理所有的get提交方式的请求
doPost()用于接受并处理所有的post提交方式的请求
1.编写自定义Servlet,继承HttpServlet
在src中新建一个java文件
package servlet;
import java.io.IOException;
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 WelcomeServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
2.Servlet配置
Servlet类不能直接访问,使用前必须配置。
- Servlet2.5版本
配置web.xml
注意两个servlet-name值要相同
servlet-class值为:包名.类名
<servlet>
<servlet-name>WelcomeServlet</servlet-name>
<servlet-class>servlet.WelcomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WelcomeServlet</servlet-name>
<url-pattern>/WelcomeServlet</url-pattern>
</servlet-mapping>
- Servle3.0版本
(无需修改Web.xml)在自定义Servlet类上方编写注解@WebServlet(value = “url-pattern” )
url-pattern即为请求的地址
@WebServlet(value = "/WelcomeServlet31" )
public class WelcomeServlet31 extends HttpServlet
Servlet 生命周期
- 加载
- 初始化:init(),该方法会在Servlet第一次被加载并实例化以后执行
- 服务: service() ,实际上是执行doGet()\doPost()
- 销毁:destroy(),Servlet被系统回收时自动执行(关闭Tomcat)
- 卸载
加载、卸载都由系统来执行,我们只需关注初始化、服务和销毁。
init():默认第一次访问servlet时执行,也可修改为Tomcat启动时自动执行。
方法如下
- Servlet2.5
在Web.xml中添加:
值为初始化顺序(有多个servlet时)
<servlet>
......
<load-on-startup>1</load-on-startup>
</servlet>
- Servlet3.0
@WebServlet(value = "/WelcomeServlet31" , loadOnStartup = 1 )
Servlet API
Servlet继承关系
GenericServlet对Servlet中的方法进行了简单实现或者空实现。这样我们在编写自己的servlet的时候就不必编写所有的抽象方法了。
Servlet中的对象
HttpServletRequest 请求对象:获取请求信息
HttpServletResponse 响应对象: 设置响应对象
ServletConfig对象 servlet配置对象
ServletContext对象 servlet的上下文对象
HttpServletRequest 、HttpServletResponse方法同request、response
ServletContext对象中的常见方法:
getContextPath():获取相对路径
getRealPath():绝对路径
setAttribute()、getAttribute()
String getInitParamter(String name):在当前Web容器范围内获取名为name的参数值
(servlet对象的getInitParamter(String name)获取当前Servlet中名为name的参数值)
设置当前Servlet初始化参数的方法:
- Servlet2.5
在Web.xml中:
<servlet>
<servlet-name>WelcomeServlet</servlet-name>
<servlet-class>servlet.WelcomeServlet</servlet-class>
<!-- 设置当前servlet初始化参数 -->
<init-param>
<param-name>ServletParamName</param-name>
<param-value>ServletParamvalue....</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
- Servlet3.0
@WebServlet(…, initParams = {@WebInitParam(name=“ServletParamName”,value = “ServletParamValue31”)})
@WebServlet(value = "/WelcomeServlet31" , loadOnStartup = 1 ,
initParams = {@WebInitParam(name="ServletParamName",value = "ServletParamValue31")})
在整个Web容器中设置初始化参数:
由于设置的是全局属性,所以不管是2.5版本还是3.0版本都需在web.xml中配置
<!-- Web容器初始化参数 -->
<context-param>
<param-name>globalName</param-name>
<param-value>globalValue31</param-value>
</context-param>