欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Servlet学习笔记--Servlet初步

程序员文章站 2022-05-18 23:16:05
lamp:linux + apache + mysql + php 不花钱黄金组合 1.tomcat初步 设置环境变量java_home:jdk目录--否则无法启动startup.bat 修改con...

lamp:linux + apache + mysql + php 不花钱黄金组合
1.tomcat初步
设置环境变量java_home:jdk目录--否则无法启动startup.bat
修改conf/server.xml文件中的
<connector port="8080" protocol="http/1.1"
connectiontimeout="20000"
redirectport="8443" />
表示tomcat占用的端口号
修改conf/context.xml文件中的
<context reloadable="true">
如果有更新,自动加载
2.http初步
安装 httplook
手动发送请求到服务器
若要通过http协议访问网络资源,规定的请求开头格式:
get /latest.html http/1.1
host:
content-type: text/html
{空行}
------------------testhttp.java
[java]
public class testhttp { 
 public static void main(string[] args) throws exception { 
  socket s = new socket("127.0.0.1", 8080); 
  bufferedwriter bw = new bufferedwriter(new outputstreamwriter(s.getoutputstream())); 
   
  bw.write("get / http/1.1");//get方式连接服务器,'/'访问根目录下的文件,'http/1.1'基于什么协议 
  bw.newline(); 
  bw.write("host: 127.0.0.1:808");//因为一个ip下面可能管理多个域名,所以要指明ip地址下的哪个域名 
  bw.newline(); 
  bw.write("content-type: text/html");//指明访问的资源类型 
  bw.newline(); 
  bw.newline();//必须有个空行,表明请求结束 
  bw.flush(); 
  bufferedreader br = new bufferedreader(new inputstreamreader(s.getinputstream())); 
  string str = null; 
  while((str = br.readline()) != null) { 
   system.out.println(str); 
  } 
  bw.close(); 
  br.close(); 
  s.close(); 
 } 

---------------------- 
3.第一个servlet
必须有个web-inf文件夹,如下
 web-inf
  web.xml
  该web app的配置文件
  lib
  该web app用到的库文件
  classes
  存放编译好的servlet
导入api:
项目-右键-properties - java build path - libraries - add external jars :e:\apache-tomcat-7.0.27-windows-x64\apache-tomcat-7.0.27\lib\servlet-api.jar
[java]
------------------------helloservlet.java 
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{ 
 private static final long serialversionuid = 1l; 
 
 @override 
 protected void dopost(httpservletrequest req, httpservletresponse resp) 
   throws servletexception, ioexception { 
  printwriter pw = resp.getwriter(); 
  pw.write("hello servlet!--dopost"); 
  pw.flush(); 
  pw.close(); 
 } 
 
 @override 
 protected void doget(httpservletrequest req, httpservletresponse resp) 
   throws servletexception, ioexception { 
  //解决中文乱码 
  resp.setcontenttype("text/html;charset=gbk"); 
  printwriter pw = resp.getwriter(); 
  pw.write("你好hello servlet!--doget"); 
  pw.flush(); 
  pw.close(); 
 } 
  

 
--------------------------- 
配置步骤:
把编译好的helloservlet.class拷到web_inf/classes
如果这个类在eclipse中被包裹着,那么classes文件夹下面也要新建对应的文件夹
例如:helloservlet这个类是在ls/per包下面,则在classes下新建ls文件夹,在ls文件夹下面新建per文件下,per下面存放helloservlet.class
修改web.xml
[html]
<?xml version="1.0" encoding="iso-8859-1"?> 
<web-app xmlns="" 
   xmlns:xsi="http://www.w3.org/2001/xmlschema-instance
   xsi:schemalocation="" 
   version="2.5"> 
    <servlet> 
        <servlet-name>helloservlet</servlet-name>//servlet的名称 
        <servlet-class>helloservlet</servlet-class>//class文件的目录d,完整包路径,如果class是放在包里面的,就要这样写"ls.com.helloservlet" 
    </servlet> 
 
    <servlet-mapping> 
        <servlet-name>helloservlet</servlet-name>//servlet的名称,必须与上面的一致 
        <url-pattern>/hs</url-pattern>//url访问地址,‘/’表示“http://127.0.0.1:8080/web应用目录”+/hs 才能访问到这个servlet 
    </servlet-mapping> 
</web-app> 
 
 
4.servlet生命周期 
从始至终只有一个servlet对象,以多线程的形式处理客服端请求 
第一个客服端请求调用servlet时,被实例化,调用servlet类的构造方法,只调用一次 
接着调用初始化方法init()做些前奏准备,只调用一次 
web应用程序退出时或者类的定义发生变化时,调用destroy()方法处理善后 
5.中文乱码问题
必须在取字符之前调用
返回响应字符处理:response.setcontenttype("text/html;charset=gbk");
接受post请求字符处理:request.setcharacterencoding("gbk");
接受get请求字符处理:修改conf--server.xml--修改端口的地方--加上 uriencoding="gbk"
6.为什么有两个init()方法
init()
init(servletconfig config)
为了避免重写init(servletconfig config)时,忘了调用父类的init()方法,导致参数初始化错误,所以写个空的init()方法,重写时调用这个空的init()方法

 


摘自 沐子松