javaee的web项目开发(不是框架)Servlet 是什么,如何使用他开发一个动态网站

2021-06-21 18:31:14 浏览数 (1)

目录

  • 回顾
    • jsp里面的缺点:
  • 什么是servlet
  • Servlet 进行动态网页开发的流程
  • 例子:登录功能使用servlet
  • 自己写servlet类的规范
  • 关系图
  • 参数的设置

回顾

我们已经会使用jsp页面,写对应的代码

代码语言:javascript复制
jsp就是一个servlet             ,servlet就是一个有规范的java类

jsp--》java-->class

因为java里面的类继承了其他的东西,所以这个java就是一个servlet

servlet作用:
                                                ------进行动态网页的开发
                                                                                                                                ------代码书写麻烦,这个功能被jsp代替了,先有的servlet
                                                    ------流程的控制

jsp里面的缺点:

如果页面和逻辑都写到这个里面是乱,所以要分开写 页面写到jsp里面,控制的逻辑写到servlet里面。

web.xml就相当于路径的转发,在jsp里面写完页面,要实现逻辑,所以jsp里面写的路径就是web.xml里面自己定义的路径,然后web.xml里面将路径和servlet关联,就跳转到servlet里面了。在这个里面进行完逻辑的判断之后,再跳转到其他的jsp页面就可以了。

什么是servlet

从以上可知,jsp直接开发是冗余的,所以现在将页面和逻辑分开写,实现分离。所以我们就需要开始单独的学习servlet。

总结: servlet就是一个java类,将jsp技术中的servlet单独提取出来。

Servlet 进行动态网页开发的流程

书写流程: 1、首先写一个class类 去继承一个Httpservlet 2、重写service方法,注意一定要把super.service() 3、进行动态网页的开发–那如何访问这个servlet呢?需要配置 4、 在web.xml中进行配置

代码语言:javascript复制
 <servlet>
    <servlet-name>Servlet01</servlet-name>
          <servlet-class>com.servlet.Servlet01</servlet-class>
</servlet>
  
<servlet-mapping>
      <servlet-name>Servlet01</servlet-name>
       <url-pattern>/sevlet/Servlet01</url-pattern>
</servlet-mapping>

注意这个 servlet-name是自己任意命名的 url-pattern也是任意命名的 5、在网页中访问即可 输入 自己定义的url-pattern即可 缺点:由于在servlet中书写网页比较的繁琐所以,这种方式不在使用,被JSP所代替

经过以上的开发流程,我们就写了一个servlet了。这个我们以后就叫做接口,现在你可以理解为一个servlet就是一个接口

例子:登录功能使用servlet

既然我们已经会单独写servlet了,也就是会写接口了,现在我们以登录为例子,进行使用一下。

在之前的登陆例子里面所有的代码都是放到了jsp的页面中,但是JSP是负责显示的,现在用于了流程控制,这样十分不妥,所以我们把代码提取到了servlet里面

以上的图就是这个登录的流程,使用了servlet之后的的流程

servlet 中的代码实现:

代码语言:javascript复制
public class DoLogin extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //[1]接受login.jsp页面的发送过来的数据

        String  uname=  request.getParameter("uname");

        String  pwd= request.getParameter("pwd");

        //[2]数据处理,得到结果--使用接受的数据去数据库作比较

        boolean  flag=false;

        if("jing".equals(uname)&&"123".equals(pwd)){

            flag=true;
        }
        //[3]根据返回的结果给用户做出响应

        if(flag){
            //可以实现页面的跳转--转发       request.getRequestDispatcher("admin/success.jsp").forward(request,response);
            //out.print("登录成功");
        }else{          request.getRequestDispatcher("admin/login.jsp").forward(request,response);
            //out.print("登录失败");
        }
    }
}

自己写servlet类的规范

第一步,自己写一个类 第二步,自己写的类要继承HttpServlet 第三步,重写HttpServlet里面的方法,一般我们只是重写service()方法,在这个重写的方法里面写对应的代码就可以了 第四步,在web.xml里面配置我们写的servlet,如何配置,看上面写的。

我们自己编写的servlet应该继承HttpServlet,一般要覆盖Service或者doPost/doGet方法。

关系图

参数的设置

我们在servlet里面,可能写一些固定的参数,我们可以把这些参数写到web.xml里面,之后在servlet类里面直接调用web.xml里面的参数,实现参数与servlet代码的分离,解耦。具体实现步骤是:

以解决乱码问题为例:

每一个servlet里面都需要解决中文乱码,每一个servlet类里面都需要写

代码语言:javascript复制
//        如何网页渲染的时候出现乱码
        resp.setContentType("text/html;charset=utf-8");

每一个类里面都需要写,代码冗余。所以我们把这个提取到web.xml里面,servlet代码里面只需要调用就可以了。

有时候其他的地方还要用这个编码,那么我们就需要将这个提取出来,也就是将这个写到web.xml里面,在类里面使用参数提取就可以。以后我们只是改xml里面的参数就可以了 在xml设置有两种,一个是局部,也就是只是在一个类里面可以进行调用,一个是全局的,所有 的都可以进行调用

第一个 在xml里面配置局部的参数 用这个标签

代码语言:javascript复制
 <servlet>
        <servlet-name>paramServlet</servlet-name>
        <servlet-class>com.jing.www.ParamServlet</servlet-class>
<!--        初始化参数,只可以被当前的servlet里面读-->
        <init-param>
            <param-name>enc</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>paramServlet</servlet-name>
        <url-pattern>/paramServlet</url-pattern>
    </servlet-mapping>

第二个: 是在xml里面配置全局的参数

代码语言:javascript复制
<!--    全局参数   可以被所有的servlet进行读取-->
    <context-param>
        <param-name>enc2</param-name>
        <param-value>utf-8</param-value>
    </context-param>

在servlet类里面进行调用的时候,这样调用:

读取参数的代码最好写到一个servlet类里面的初始化函数里面,读取全局的参数和局部的参数如下代码

代码语言:javascript复制
    String enc,enc2;
    @Override
    public void init() throws ServletException {
        //        读取初始化的参数
        enc = this.getInitParameter("enc");
        System.out.println("初始化的参数" enc);
//读取全局的参数
        enc2 = this.getServletContext().getInitParameter("enc2");
        System.out.println("全局的参数" enc2);
    }

0 人点赞