Java web 教你一步步发布自己的项目(2)
MVC模型的介绍
M 即model模型是指模型表示业务规则。
V 即View视图是指用户看到并与之交互的界面。
C 即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求。
简单来说就是
M 就是我们创建的 用户类
V 是我们说看到的前端页面
C 是我们后端写的控制代码
注意:jsp 本质上也是一个Servlet 不过jsp侧重于显示页面,而Servlet侧重于处理数据
各个目录结构
这是我们看到的文件目录,而在编译之后,
如图多了两个文件夹,这个是服务器自动放到了输出目录,里面存放了编译之后的java文件,以及一些静态资源,artifacts文件夹下,一个文件夹就是一个虚拟目录,虚拟目录名称就是我们文件夹的名字,这个是我们可以自己修改的,方法见上一篇文章,修改之后再次编译文件夹的名称也会随之修改,通过ip加端口加虚拟目录即可访问我们的web项目
Servlet的使用
一、认识Servlet
api中的介绍
创建Servlet的方式有三种
1. 直接继承Servlet接口
如图,继承了五个抽象方法:
import javax.servlet.*;
import java.io.IOException;
public class Demo01 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
init()方法用来初始化Servlet,一般在项目启动之后执行一次,此后直到销毁都不会再次执行
getServletConfig() 是容器向servlet传递参数的载体,返回一些初始化信息
service() 五个方法里最重要的方法 每执行一次Servlet 就会执行一次该方法。方法用来执行Serlvet具体的业务操作,利用响应对象响应客户端请求
getServletInfo() 得到Servlet的一些想管信息
destroy() Servlet销毁时执行该方法
直接继承抽象方法灵活性最高,但是相反的代码冗余,比较复杂,所以提供了第二种方法
2. 继承 GenericServlet
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
public class Demo02 extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
}
只需要实现service这个核心的方法即可,相比直接继承接口简洁了很多,但是注意,通过继承GenericServlet来实现的Servlet 与Http请求无关。
3.通过继承HttpServlet
需要我们手动去从写doGet 和 doPost方法
初始为这样,但是因为我们不管是Get请求和Post请求,要执行的操作是一样的,所以我们这些来写:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Demo03 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
如果是Get请求则直接执行,如果是Post请求则调用Get请求来完成
二、Servlet的使用
1. 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>Servlet03</servlet-name>
<servlet-class>com.biu.Servlte.Demo03</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet03</servlet-name>
<url-pattern>/URLServlet01</url-pattern>
</servlet-mapping>
</web-app>
在xml文件中配置< Servle> 和 < servlet-mapping>
< servlet> 拿到该类的全限类名,并通过< servlet-name >来取一个名字,相当于id名
在< servlet-mapping> 通过拿到的Servlet配置名来定义访问路径
< url-pattern>就是配置浏览器通过什么路径能访问到这个Servlet
如图
在我通过配置的路径访问到网页时
控制台会打印输出语句
表示我们配置成功
这种方法在Servlet较少的时候适用,当我们Servlet多了之后,一个Servlet就多一个这样配置,可见文件的可读性不高,并且容易出现疏忽导致错误,所以,还有第二种方法,注解来配置Servlet
2.注解配置Servlet
如上图,只需要在Servlet最上面加上 @WebServlet("/浏览器访问路径名字") 即可完成配置
注意 引号里的 / 不能少,并且后面不能有分号
重启服务器并重新访问
如图,也是成功访问到了
注意 既然我们通过注解配置了Servlet 在原来xml文件里的配置应当删除免得有不必要的错误