java web——servlet+jsp实现前后台交互

大学生涯终于结束,在公司学习了一段时间的java web方面的知识,结合自己之前的一些理解,想通过几篇文章来对我所接触到的java技术进行梳理与总结,也希望能给大家一些参考,由于作者水平有限,难免存在一些不足之处,希望能一起探讨!

1、servlet

Servlet 是 Java Web 技术的核心基础。因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的基本要求。Servlet本质就是一个服务端的java对象,在这个对象中有一些方法来对浏览器的请求进行处理,并反馈给浏览器。

1.1 Servlet与Servlet容器

首先我们应该理解Servlet与Servlet容器的区别与联系,Servlet容器是用来管理众多Servlet的,有个比喻很好,Servlet容器和servlet就和枪与子弹的关系一样,互相依存但又互相独立,在tomcat中Servlet容器所对应的部分是Context容器,而一个web应用对应一个Context容器,因此一个web应用只有一个Servlet容器。在这里不扯tomcat的内部实现方式,我们只需要记住Servlet容器所做的工作就是在程序运行开始之前对系统配置文件进行解析,将相关的Servlet对象、filter、lintener等信息进行整合与处理。

1.2 Servlet使用

Servlet在http请求的整个处理过程中应该是如下过程:(其中在web容器中可以有若干个Servlet)
用户浏览器操作发出http请求->web容器接收到请求->按照一定方法分配给指定的Servlet进行处理->Servlet将处理的结果反馈给浏览器进行显示
在eclipse中创建一个Servlet,如下所示:

package com.springmvc;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloWorld
 */
@WebServlet("/HelloWorld")
public class HelloWorld extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloWorld() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

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

}

可以看出该类继承于HttpServlet,并存在两个主要方法doget和dopost方法,分别来响应get和post请求来处理相应的业务,最后通过sendirect或者forward的方式跳转到想要去的jsp页面。

2、jsp

JSP全名为Java Server Pages,中文名叫java服务器页面,是一种动态网页技术标准,与传统的html不同,jsp是在服务端运行的,这里要明确一点jsp不是一种语言,而是一种技术,运用这种技术可以在html中用<% %>来实现java语言的书写,也就是在html页面实现了动态编程,但jsp页面还是属于前端页面部分。如下为新建的jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>

body>
html>

3、Servlet与jsp

那么Servlet与jsp的关系到底是什么,为什么jsp页面中还可以写java代码,这就得从他们的运行机制说起。一个工程运行后会加载所有的Servlet对象,同事也会扫描所有的jsp页面,将jsp页面转化为Servlet,在进行统一处理,因此一个jsp页面实质上也就是一个Servlet。
那么有一个问题了,既然二者相似那么为什么还要分出两个东西,其实用jsp我们完全可以实现一个简单的小网站,需要Servlet的原因就是为了前后台的分离,也就是所谓的解耦,web技术发展的很大一个推动力就是为了解耦,很多的技术都是为此而具有巨大优势,解耦的好处①提高问题的解决概率;②提高问题的解决效果;③提高问题的解决速度;④降低将来爆发隐患的可能性。下面我们通过一个小例子来了解servlet+jsp的实现。
新建工程,创建一个jsp页面:index.jsp,在body中我们加入一个连接,连接到相应的Servlet

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
    <a herf="myFirstServlet">clicka>
body>
html>

下来创建Servlet:myFirstServlet,并在servlet中作出一些处理并反馈

package com.lib.test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class myFirstServlet
 */
@WebServlet("/myFirstServlet")
public class myFirstServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public myFirstServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        PrintWriter out;
        out=response.getWriter();
        out.write("hello world!");
    }

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

}

这里需要在web.xml中进行配置


<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <welcome-file-list>
        <welcome-file>index.jspwelcome-file>
    welcome-file-list>

    <servlet>
        <servlet-name>myFirstServletservlet-name>
        <servlet-class>com.lib.test.myFirstServletservlet-class>
    servlet>
    <servlet-mapping>
        <servlet-name>myFirstServletservlet-name>
        <url-pattern>/url-pattern>
    servlet-mapping>

web-app>

4、结尾

在这里需要说明一下,Servlet与jsp技术尽管是web技术中非常重要的一项,但现在已经被替代,我们想一下为什么,在系统变复杂时所有的web交互都用
Servlet来实现无疑是繁琐冗余的,因此它有不足之处。jsp技术仍然在应用但是也很少在jsp代码中写大量java代码,也是为了解耦。

你可能感兴趣的:(java,web)