java web编程学习1

  学习了一遍java之后,顺其天然,便开始学习java web,因为看了红薯的博客便没有想着去接触框架,前人栽树后人乘凉,我将红薯的demo下载下来当实验器材。php

&#160; 因为以前有学过专作web的php,本觉得上手飞快,可是一开始就被java web的整个文件组织给唬住了,刚看到还以为挺麻烦,没办法,要作java web不只须要jdk还须要tomcat这样的容器,代码不只要遵循java,整个文件部署还必须让tomcat看懂。既来之则安之吧,我来好好看看,首先,我注意到了web.xml,这是之前作php的时候没有的(因此说php就是一门纯粹的web语言,<?php?>就直接开始干了),全文以下:html

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
						 "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
	<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
	<filter>
		<filter-name>helloFilter</filter-name>
		<filter-class>demo.HelloFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>helloFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<servlet>
		<servlet-name>hello_world</servlet-name>
		<servlet-class>demo.HelloServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>hello_world</servlet-name>
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>
	

</web-app>

&#160;java

&#160; 这个xml最主要的两个元素就是filter和servlet,filter按下不表,先说servlet,servlet不用说,像我这种菜鸟都已经听了n次了,servlet节点下有三个子元素:servlet-name、servlet-class、load-on-startup。servlet-name不用说,我理解的就算能够把它当成标识符,xx医生说,这个servlet生了,给他取个名字吧。servlet-class也很好理解,学习java web确定学过java了啊,java是靠class组织起来的,这里就是指明这个servlet在哪。load-on-startup这个是后面看书才找到的:先把它翻译一下 加载-在-开始:也就说告诉容器(tomcat)别等用户来你在初始化了,直接就在你开始的时候初始化吧,这个元素的值表示它的优先级,越小优先级越大。程序员

在servlet下面有个servlet-mapping,servlet-name和上面同样,这样就能对应了,否则怎么叫xxx-mapping呢,下面的子元素:url-pattern,不用说这就对应与网址了,/hello告诉咱们只要访问localhxxxxx/hello就能够找到这个servlet了,后来看到servlet3.0已经支持直接在代码中设置@webservlet注解来实现了。web

&#160; 看完了web.xml(打头的weclome-file-list的就不说了),第一反应就是去看看demo.HelloServlet了,代码以下:数组

package demo;

import java.io.IOException;
import java.util.EnumMap;
import java.util.Enumeration;

import javax.lang.model.type.PrimitiveType;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 最简单的Servlet
 * @author Winter Lau
 */
@WebServlet("/hello.view")
public class HelloServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static void prt(HttpServletResponse res, Object o) throws IOException {
		res.getWriter().println(o);
	}
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		prt(res, "no controller");
		prt(res, "authtype:" + req.getAuthType());
		prt(res, "contextpath:" + req.getContextPath());
		Enumeration headernames = req.getHeaderNames();
		prt(res, "header:");
		while(headernames.hasMoreElements()) {
			String name = (String)headernames.nextElement();
			prt(res,"\t" + name + ": " + req.getHeader(name));
		}
		prt(res, "method:" + req.getMethod());
		HttpSession sess = req.getSession();
		if(sess.getAttribute("age") == null) {
			sess.setAttribute("age", 18);
		}
		else {
			prt(res, sess.getAttribute("age"));
		}
	}

}

&#160; 这个HelloServlet继承自HttpServlet,红薯提供的这个Servlet重写了service方法,固然平常写代码应该都是直接使用doGet和doPost,service是起一个将HttpServletRequest和HttpServletRespone根据http不一样的方法请求分发给具体的doXXX方法,讲到这里,就有种豁然开朗的感受了,学过http的都知道了,http无非是哪几种方法,get、post、trace等等,tomcat的工做无非是将这些http请求转换为HttpServletRequest,提供一个HttpServletRespone供咱们给用户相应的反馈。因为我是抱着php程序员来找茬的心态来学习,难免作个对比,php将这些http请求封装成数组$_GET和$_POST,和java比能够算是一种很直接的方式,因此我把php当菜刀,方便顺手,而java则维持了它从j2se来的风格,将java式的面向对象进行到底。两种方式各有千秋,归根到底,无非是避免了普通程序员直接写cgi罢了(性能什么的我就不扯了,osc上早就腥风血雨了,不要溅我一身血)。tomcat

接下来,学习方向就很清晰了,去学下三个类:HttpServlet、HttpServletRequest和HttpServletResponse。先写到这里,吃个早餐先。app

相关文章
相关标签/搜索