JavaWeb的重头戏,视觉盛宴,不可不看

JavaWeb

不好意思,让大家久等了,没办法,因为主角总是要在最后一刻出场,然后才能不经意间的惊艳众人。而这一刻终于要来临了,现在有请我们的Java闪亮登场,不,说错了,有请servlet登场,虽是叫servlet,但其实现的代码就是我们的Java。

Servlet、Tomcat

Servlet(Server applet),是Java Servlet的简称,中文意思译过来就是用Java语言编写的服务器端小程序。既然有服务器端,那就有客户端,我想我不用说,大家也知道客户端就是指前端的页面。那么服务器是什么呢?我想应该很好理解,用户之所以可以对页面信息进行一系列增删改查操作,背后是离不开服务器的支持。就好比一部电影,那么服务器正是这部电影的幕后工作人员,而客户端可以比作荧幕屏里的明星演员们,两者不可缺一,否则一部电影就不会呈现出来。

OK,那我们现在就是开始创建Servlet,在这之前我们需要配置Tomcat服务器,不然怎么创建Servlet呢?难道以为创建一个类名叫Servlet的类就是创建服务器了吗?那就太可怕了。真正的服务器是Tomcat服务器,也可以称为Servlet容器,我们的Servlet只是服务连接器。从狭义上讲Servlet是指Java语言实现的一个接口,广义上讲Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。意思就是只要实现了Serlet接口的类,就是我们的Servlet服务器连接器。好了,我们的Servlet先暂时领下盒饭,由我们的Tomcat登场。

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。其实服务器有很多种,而我这里主要讲Tomcat,主要是它免费,奈何我又囊中羞涩。所以配置它就可以了。而其他服务器我没有用过,不算太了解。不过我们知道它,也就可以知道服务器的一个主要功能和作用了。

关于如何下载和配置Tomcat我就不细述了。我们主要讲的也不是这个。不过在配置时我们可能会遇到很多问题,或者是启动时出现问题,我经常遇见的就是要么是系统找不到服务器,那就需要在电脑属性里去配置一下环境变量,或者是服务器启动时项目重复加载,那就需要停止其他项目的服务器运行,或者是端口被多个程序使用,那就找到Tomcat目录下conf/server.xml,修改port的值,最好是80。因为http的默认端口为80,如果访问的时候输入http://www.baidu.com,那就相当于输入http://www.baidu.com:80。这样的话访问的时候页面地址就不需要输入端口了。

好了,现在我们的Servlet满血复活。因为Tomcat配置完后,我们也才能让Servlet复活,因为我们的Servlet接口是由Tomcat服务器提供的。那复活了,该干嘛呢?当然是接收我们页面的请求啊,对不对?然后在执行相应的处理,最后再把处理完后得出的结果响应给页面,是不是这样的一套流程,简不简单。先就这么理解,然后再看我的代码。就能理解些了,代码如下:

@WebServlet(value = "/ubook")
public class UbookServlet extends HttpServlet{

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//1.接收页面参数
		req.setCharacterEncoding("UTF-8");
		String bname = req.getParameter("name");
		
		String price = req.getParameter("price");
		double bprice = Double.valueOf(price);
		
		System.out.println(bname+" "+bprice);
		
		//2.获取service方法并执行
		BookService bookService = new BookService();
	    int i = bookService.updateBook(bprice, bname);
		//3.根据处理后得出的结果来判断跳转哪一个页面
		resp.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html;charset=UTF-8");
		if(i>0) {
		   resp.sendRedirect("success.jsp");
		}else {
		   resp.sendRedirect("error.jsp");
		}
	}
    
}

怎么样,这算是一个比较规范的Servlet了吧。不过我这个不是实现Servlet接口,而是继承实现了Servlet接口的抽象类,但是问题不大,这同样是我们想要的Servlet,这样创建Servlet反而更好。因为我们继承的抽象类在原本的Servlet接口上还增加了一些方法,可重新的方法就更多了。同样也可以避免强制重写所有Servlet接口上的方法,而是可以有选择的重写某个父类方法。

是不是更好,但我们应该还有个疑惑,那就是HttpServletRequest req和HttpServletResponse resp这两个对象是从哪来的,我好像也没创建啊。对,我是没创建,所以唯一的可能就是它本身就有,要么是我们JDK类库,要么就是我们的服务器。你们觉得会是谁呢?自己可以去试试,我在这里公布答案了,它们是服务器提供的,不信的话可以不配置Tomcat试试?它们两个就是所谓的九大内置对象的其中两个,并且还是最最最重要,也最经常使用的两个。Request对象,也称请求对象,用来接收页面参数的对象。Response对象,也称响应对象,用来给页面返回页面需要的结果信息。既然讲到这儿,那我们先小憩一会,简单聊聊九大内置对象。

九大内置对象

request : 请求对象

页面通常需要给后端发送请求,那么这些请求的参数数据,就需要通过这个对象来获取。

response:响应对象

后端收到请求后,也需要给前端页面进行响应,那么响应就需要用到这个对象。

pageContext:页面上下文对象

它可以获取其他八个内置对象,一般自定义标签会频繁使用到pageContext对象,或者是定义一个方法需要用到多个对象时,传一个pageContext对象可以解决问题。

session:会话对象

它用于保存用户的信息,跟踪用户的操作状态。你可以把它当作所有请求对象的合体,因为session对象是可以用request对象的getSession方法得到,所以它是与请求相关的对象。

application:应用程序对象

它可以保存在服务器中,直到我们的服务器关闭,否则我们的application中保存的信息就会在整个应用中一直有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量” 。

由此我们可看出request、session、application三者是有联系的。

它们的区别:
request:单次请求
session:浏览器访问期间(会话期间)
application:服务器启动期间,所存的数据可以跨浏览器

不知道你们发现没有?它们的区别就在于作用域的不同,现在我们就来说说作用域有哪些?

四大作用域

pageContext:当前页面作用域
request:单次请求作用域
session:当前会话期间作用域
application:服务器运行期间作用域

out:输出对象

它用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

config:配置对象

config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

page:页面对象

page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。

exception:例外对象

exception 对象的作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。
exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。

一时没有控制住,说的过多。真担心后面又说不完了。但这又确实值得说,不然我们往后学习很有可能知其然而不知其所以然。好了,我们现在再往上面看Servlet,看看还有什么疑…惑。

有疑惑敬请期待下一篇博客

我突然觉得越写越多,也意犹未尽,奈何天色已晚,同时后面的内容牵扯到的知识将是一环扣着一环,而本篇博客篇幅也过长,只能暂留待下一篇博客了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值