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

JAVAWEB之初识servlet

2016-11-12 20:58 483 查看

什么是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

因为容器提供了一些基础服务。(比如网络相关的服务)



(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

倒三角中的配置服务器



选择解压后的tomcat文件夹



6下的但是是tomcat7.于是要加3个jar包就~





有可能启动失败就去看看是不是已经启动了。

netstat -a 看到有8080端口在监听。shutdown了就可以启动了

创建web项目

NEW-WEBPROJECT



myeclipse会帮我们编译代码,创建文件夹class

但是我们要修改下web.xml文件

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





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

servlet是如何运行的?



文字描述::

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.
<servlet-name>
不一致(我就出错在这了)



这个是不一致的结果。并没有显示那个错误的地址路径



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<Integer.parseInt(qty);i++){
greeting+="<h1>hello Recar!</h1><br>";

}

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

}

}






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



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

(3)405

1)含义:找不到处理方法。

2)产生的原因 service方法不规范

////////////////////////////////////////////////////////////////////

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"> <servlet>
<servlet-name>helloServlet</servlet-name>
<!-- 完整的类名-->
<servlet-class>web.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 两个name要一致!!! -->
<servlet-name>helloServlet</servlet-name>
<!-- 以/开头 -->
<url-pattern>/hello</url-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<Integer.parseInt(qty);i++){
greeting+="<h1>hello Recar!</h1><br>";

}

//设置服务器返回的数据类型
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

<?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"> <servlet>
<servlet-name>datedemo</servlet-name>
<servlet-class>web.DateDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>datedemo</servlet-name>
<url-pattern>/date</url-pattern>
</servlet-mapping>
</web-app>




问题,不能输出中文~。应该是编码的问题~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: