JAVAWEB之初识servlet

什么是servlet

sun公司制定的一种用来扩展web服务器功能的组件规范。(面试会考)

(1)扩展web服务器

apache web server
iis
….

/* web server 只能处理静态资源 html 事先把文件写好。
但是我们很多需要动态资源,比如说查询股票的价格。不是事先写好的。需要时时的去查询。
可以去访问数据库,根据数据库的结果生成的。让web server有这样的功能就用 servlet
*/ 自己写的
web 服务器通常只能够处理静态资源的请求(需要事先将html文件准备好),可以使用servlet 来扩展(即 web服务器可以通过的调用 servlet 来处理动态资源的请求,比如访问数据库)

(2)组件规范

浏览器请求给 web server ,然后server调用 servlet容器 来调用 servlet
因为容器提供了一些基础服务。(比如网络相关的服务)

JAVAWEB之初识servlet_第1张图片

(1)什么是组件

符合一定规范,实现部分功能的,并且需要部署到相应容器里面才能运行的软件模块。
servlet是一个组价,需要部署大相应的servlet容器里面才能运行

就像是轮胎,有一定规范,实现部分功能…… 并且部署到汽车上才能运行的模块

(2)什么是容器

符合一定规范,提供组件的运行环境的程序

tomcat就是一个容器,提供了servlet的运行环境。
当然容器还有很多。

2.如何写一个servlet

(1)写一个java类,实现Servlet接口或者继承HttpServlet抽象类
注:通常选择继承的方式

(2)编译 字节码文件 .class
(3)打包 创建一个具有如下结构的文件夹:
appname(应用名) 比如 jd
WEB-INF //不能改
classess(放class文件 ) //同样不能改
lib(可选的,比如要使用jdbc驱动就这放jar文件)
web.xml(部署描述文件)
(4)部署 将第三步创建好的整个文件夹拷贝到servlet容器相应的位置
注:可以使用jar命令将第三步创建好的整个文件夹压缩成一个.war为后缀的文件,然后拷贝。

(5)启动容器,访问servlet
http://ip:port/appname/url-pattern
注:
url-pattern在web.xml文件中定义

3、tomcat的安装

a)解压
b)配置环境变量
i.就是JDK JAVA_HOME:JDK的安装路径
ii.CATALINA_HOME:tomcat的安装路径
iii.PATH:一些命令所在的路径 比如 tomcat下的bin
c) 启动tomcat cd切换到tomcat解压目录下bin
执行 sh startup.sh 也可以使用 sh catalina.sh run
我下载后运行 startup.bat就运行了
打开浏览器,输入 http://localhost:8080

d) 关闭 sh shutdown.sh

编译java javac -d .HelloServlet.java

-cp servlet-api.jar就是告诉编译器,在编译时,可以从这个jar中找文件

在一个web.xml可以描述多个servlet

写 servlet-class的时候要写完整,就是说要写包名也要。

url-pattern
/hello 怎么访问。

注 url-pattern 在web.xml中定义

4、使用myeclipse开发一个servlet

(1)集成tomcat
倒三角中的配置服务器

JAVAWEB之初识servlet_第2张图片

选择解压后的tomcat文件夹

JAVAWEB之初识servlet_第3张图片

6下的但是是tomcat7.于是要加3个jar包就~
JAVAWEB之初识servlet_第4张图片

JAVAWEB之初识servlet_第5张图片

有可能启动失败就去看看是不是已经启动了。
netstat -a 看到有8080端口在监听。shutdown了就可以启动了

创建web项目
NEW-WEBPROJECT
JAVAWEB之初识servlet_第6张图片

myeclipse会帮我们编译代码,创建文件夹class
但是我们要修改下web.xml文件

然后部署,完成后会自动帮我们在tomcat文件夹创建文件夹和创建文件,编译文件

JAVAWEB之初识servlet_第7张图片

JAVAWEB之初识servlet_第8张图片

然后访问 http://local:8080/项目名/hello

servlet是如何运行的?

JAVAWEB之初识servlet_第9张图片

文字描述::

1、浏览器依据ip,port建立连接。
2、浏览器年将相关数据(比如请求参数)打包,然后发送请求
3、容器解析请求数据包,并且将解析得到的数据封装到requset对象,并且同时创建一个response对象。

4、容器创建servlet对象,调用该对象的service方法
注:容器会将request和response作为参数传递进来,可以通过
request获得请求参数,也可以将处理结果写到response。

5、容器读取response中的处理结果,然后将处理结果打包发送给浏览器。
6、浏览器解析响应数据包,生成相应的页面。

常见问题:

(1)404
注:404是一个状态码(是一个三位数字,由w3c定义,表示服务器处理请求的一种状态)
1)含义
服务器依据请求地址找不到相应的资源
2)产生的原因
a.没有部署该应用
b.不一致(我就出错在这了)

JAVAWEB之初识servlet_第10张图片

这个是不一致的结果。并没有显示那个错误的地址路径
JAVAWEB之初识servlet_第11张图片

c、请求地址写错
按照 http://ip:port/appname/url-pattern 检查请求地址

(2)500
1)含义:系统出错
2)产生的原因 程序在运行过程中出错。
a.没有继承HttpServlet
b.写错
c.程序代码写的不够严谨,比如对请求参数没有做检查就做一些转换。
web/hello?qty=100;问号表示后面是请求参数,qty是请求参数名,100是请求参数值

public class HelloServlet extends HttpServlet{
    public void service(HttpServletRequest request,
            HttpServletResponse response) throws ServletException,IOException{
        //读取请求参数值
        String qty = request.getParameter("qty");
        //处理
        String greeting ="";
        for(int i=0;i"

hello Recar!


"; } //设置服务器返回的数据类型 response.setContentType("text/html"); //获得一个输出流,把内容发送给浏览器 PrintWriter out = response.getWriter(); out.println(greeting); out.close(); } }

JAVAWEB之初识servlet_第12张图片

JAVAWEB之初识servlet_第13张图片

但是并没有考虑传入的值就会

JAVAWEB之初识servlet_第14张图片

所以,应该检查传入的参数是不是一个合法的

(3)405
1)含义:找不到处理方法。
2)产生的原因 service方法不规范

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">
 <servlet>
    <servlet-name>helloServletservlet-name>
    
    <servlet-class>web.HelloServletservlet-class>
 servlet>
 <servlet-mapping>
 
    <servlet-name>helloServletservlet-name>
    
    <url-pattern>/hellourl-pattern>
 servlet-mapping>
web-app>

HelloServlet

package web;

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

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

public class HelloServlet extends HttpServlet{
    public void service(HttpServletRequest request,
            HttpServletResponse response) throws ServletException,IOException{
        //读取请求参数值
        String qty = request.getParameter("qty");
        //处理
        String greeting ="";
        for(int i=0;i"

hello Recar!


"; } //设置服务器返回的数据类型 response.setContentType("text/html"); //获得一个输出流,把内容发送给浏览器 PrintWriter out = response.getWriter(); out.println(greeting); out.close(); } }

练习:写一个页面获取当前系统的时间

DateDemo

package web;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

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

public class DateDemo extends HttpServlet{
    public void service(HttpServletRequest request,
            HttpServletResponse response)  throws ServletException,IOException{

        Date date = new Date();
        String dateform ="yyyy-MM-dd HH:mm:ss";
        SimpleDateFormat sdf =new SimpleDateFormat(dateform);
        String dater = sdf.format(date);
        //设置服务器返回的数据类型
        response.setContentType("text/html");
        //获得一个输出流,把内容发送给浏览器
        PrintWriter pw = response.getWriter();

        pw.println("date:"+dater);
        pw.close();

    } 
}

他的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">
    <servlet>
    <servlet-name>datedemoservlet-name>
    <servlet-class>web.DateDemoservlet-class>
    servlet>
    <servlet-mapping>
    <servlet-name>datedemoservlet-name>
    <url-pattern>/dateurl-pattern>
    servlet-mapping>
web-app>

JAVAWEB之初识servlet_第15张图片

问题,不能输出中文~。应该是编码的问题~

你可能感兴趣的:(java那条路)