搭建Servlet的web环境

构建servlet

idea构建一个maven项目

IDEA实现Maven项目创建并连接Tomcat

在这里插入图片描述
配置tomcat后启动tomcat

在这里插入图片描述
跳转到浏览器:
在这里插入图片描述
配置好tomcat服务器后启动正常应该跳转到index.jsp页面,这里出现404说明,未配置成功。

配置工件

出现该原因是因为未配置工件,idea配置工件的作用是将web的war包放在tomcat的webapps目录下,这样才能在tomcat启动时访问到。

配置工件的步骤如下:

  1. 在File中打开Project Structure…
    在这里插入图片描述

  2. 选择web application工件,exploed表示拟部署,并不把war包放在webapps目录下但仍然可以在启动tomcat是访问web项目,aechive是部署,将war包放在webapps目录下。这里选在From Module即可。
    在这里插入图片描述

  3. 上述步骤是在idea中设置工件,还需要在项目中,应用工件设置

在这里插入图片描述
点击+按钮

在这里插入图片描述
出现下面的工件即可:

在这里插入图片描述

  1. 再次启动就会自动跳转到index.jsp页面

在这里插入图片描述

修改默认url地址

部署的工件会自动生成url的地址http://localhost:8080/spring_security_war_exploded/这样看起来不便,这也是可以更改的:

在这里插入图片描述

图中横线的部分改为自己喜欢的uri即可,改完启动tomcat会自动跳转到index.jsp。

在这里插入图片描述

生成servlet

servlet有多种,一般都使用HttpServlet,其他请移步Java开发网站的核心servlet

创建一个class类继承HttpServlet ——> extends HttpServlet——> 重写doGet和doPost方法:

public class TestController extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        PrintWriter out=resp.getWriter();
        out.write("Test");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
}

servlet输入流

servlet的输出流是HttpServletResponse对象的getWriter方法,用于将数据流写入到http响应体中。其返回值类型是PrintWriter类型:

在这里插入图片描述
PrintWriter继承自Writer输出流:
在这里插入图片描述
通过PrintWriter提供的方法可以将字符数据写入到响应体。

请求servlet

请求servlet的方式有两种:1、配置文件web.xml;2、@WebServlet注解

web.xml配置一个servlet

  <servlet>
    <servlet-name>servlet2</servlet-name>
    <servlet-class>com.example.controller.TestController</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>servlet2</servlet-name>
    <url-pattern>/servlet2</url-pattern>
  </servlet-mapping>

注解配置servlet

@WebServlet("/servlet1")
public class LoginController extends HttpServlet{
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, IOException {
        // TODO Auto-generated method stub
        request.setCharacterEncoding("utf-8");
        PrintWriter out=response.getWriter();
        out.write("Hello World");

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
}

在这里插入图片描述
在这里插入图片描述

servlet转发与重定向

转发

转发是返回html页面,如返回模板引擎,共用一次请求和请求参数

@WebServlet("/servlet3")
public class RedirectController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getRequestDispatcher("index.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

HttpServletRequestgetRequestDispatcher方法,如果字符串有后缀,就在webapp下寻找该文件并返回,如果没有后缀,就跳转到另一个servlet中。

特点:
服务器内部跳转的特点:
1.需要使用request对象来完成
2.服务器内部跳转期间,是把请求request和响应response转发到下一个资源中,所以在整个跳转期间所有涉及到的资源使用的都是同一个request和response。
3.服务器内部跳转,不会改变浏览器地址栏中的地址。

重定向

重定向是基于HttpServletResponsesendRedirect方法,用户返回页面和servlet。如果字符串有后缀,就在webapp下寻找该文件并返回,如果没有后缀,就跳转到另一个servlet中。

@WebServlet("/servlet3")
public class RedirectController extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //req.getRequestDispatcher("index.jsp").forward(req,resp);
        resp.sendRedirect("/servlet2");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

特点:

1.需要使用response对象来完成
2.每一个客户端重定向,浏览器都会发出新请求,也就意味着在服务器内部会产生新的request对象和response对象
3.客户端重定向,会改变浏览器地址栏中的地址。

总结

servlet既能返回数据由能返回页面,就可以用前后端分离或混合开发来开发web应用了,更多细节请移步Java开发网站的核心servlet

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xvwen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值