您的位置:首页 > 编程语言 > Java开发

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

2017-09-06 17:24 471 查看
大学生涯终于结束,在公司学习了一段时间的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"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</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"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a herf="myFirstServlet">click</a>
</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中进行配置

<?xml version="1.0" encoding="UTF-8"?>
<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.jsp</welcome-file>
</welcome-file-list>

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

</web-app>


4、结尾

在这里需要说明一下,Servlet与jsp技术尽管是web技术中非常重要的一项,但现在已经被替代,我们想一下为什么,在系统变复杂时所有的web交互都用

Servlet来实现无疑是繁琐冗余的,因此它有不足之处。jsp技术仍然在应用但是也很少在jsp代码中写大量java代码,也是为了解耦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息