Servlet相关

来源:互联网 发布:重返北上广 知乎 编辑:程序博客网 时间:2024/06/06 08:34


servlet:
web服务器端的编程技术。
是继承了javax.servlet.http.HttpServlet类的Java类。
由支持servlet的web服务器(tomcat)调用和启动运行。
一个servlet负责对应的一个或一组urld的访问请求,并返回相应的响应内容。
C/S:客户机和服务器架构,服务器负荷轻,维护升级成本高。
B/S:浏览器和服务器架构,服务器负荷重,维护升级成本低。

B/S:工作原理:
浏览器--服务器--数据库
通过Url来访问服务器,在浏览器里发送请求(传递参数)给服务器,服务器调用dao类(有参数先接收参数)操作数据库。


servlet创建步骤:
1.创建一个继承类(extends javax.servlet.http.HttpServlet):
2.重写三个方法:
生命周期:访问时开始:init()→service()→destroy()

1).public void init(){
super.init();
}
2).protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
super.service(req, resp);
}
3)public void destroy() {
super.destroy(); 
}
3.给servlet配备一个URL地址,供浏览器访问servlet用。
打开WebRoot/WEB-INF/web.xml文件,添加<servlet>和<servlet-mapping>两个标签
<servlet>
<servlet-name>FirstServlet<servlet-name>
<servlet-class>com.xxx.servlet.web.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/first</url-pattern><!-/first代表localhost:80/项目名称/first>
</servlet-mapping>
500错误:服务器内部错误。
404错误:找不到网页,网页地址错误。
一个类被修改后要重新启动Tomcat发布。


servlet的三个方法:
init()方法:
默认情况下:第一次访问servlet时被调用(该servlet被初始化),且只能被调用一次。
service()方法:
servlet的主方法,每访问一次就调用一次。
destroy()方法:
在服务器关闭的时候,被调用(该servlet被销毁)


网页参数的接收与返回:(关键代码示例)
接收:HttpServletRequest request
String username = request.getParameter("name");
返回:HttpServletResponse response
PrintWriter out = response.getWriter();
out.print("接收到的名字:"+username+"<br>");
网页的编码集:
接收中文的处理:
req.setCharacterEncoding("UTF-8");(gb2312也可以)
username = new String(username.getBytes("ISO-8859-1"),"UTF-8");


表单信息的提交与页面对表单信息的获取主要步骤:
1.新建一个jsp网页,绘制一个简单的用户登录表单。
2.新建一个servlet类,在service()方法中进行参数的获取(request)和返回显示(response).(注意该servlet类url地址的注册)
3.通过表单属性actoin提交输入信息到服务器,并转到所创建的servlet类。
4.servlet获取参数,并在网页中显示。


提交网页数据,遍历数据库,返回显示遍历判断结果:
1.新建jsp网页,servlet类。(参考上一个例子)
2.创建操作数据库的类(UserDao)(注意驱动,连接参数等的配置)
3.在UserDao中创建查询的方法。(用户名和密码作为条件,同时满足(and))
String sql = "select * from userInfor where userName = ? and userPassword = ? ";
4.在servlet类中的service方法中获取网页数据。(方法参考上一个例子)
5.通过UserDao user = UserDao.getInstance();
Map<String,String> map = new HashMap<String, String>();
map.put(key,value);分别键入键值对数据(userName和userPassword)启用UserDao中的查询方法遍历数据库。

6.根据查询结果判断用户信息是否存在,在网页中显示判断结果。

404资源未找到;500服务器内部错误;

协议:request.getProtocol()
输出:HTTP/1.1


服务器信息 getServletConfig().getServletContext().getServerInfo()
输出:JavaServer Web Dev Kit/1.0 EA (JSP 1.0; Servlet 2.1; Java 1.2; Windows NT 5.0 x86; java.vendor=Sun Microsystems Inc.)


客户端IP: request.getRemoteAddr()
输出:192.168.0.106


客户端主机名:request.getRemoteHost()
输出:abc


编码:request.getCharacterEncoding()
输出:GB2312


所发送的字节数:request.getContentLength()
输出:-1


数据类型:request.getContentType()
输出:null


Authorization头:request.getAuthType()
输出:basic或者digest


请求类型:request.getMethod()
输出:通常是GET或者POST。但偶尔也会出现HEADPUTDeleteOPTIONS,或者TRACE.


URL中的附加路径信息:request.getPathInfo()
输出:URLServlet路径之后、查询字符串之前的那部分。


request.getPathTranslated()
映射到服务器实际路径之后的路径信息。


request.getQueryString()
这是字符串形式的附加到URL后面的查询字符串,数据仍旧是URL编码的。在Servlet中很少需要用到未经解码的数据,一般使用getParameter访问各个参数。


request.getRemoteUser()
如果提供了Authorization头,则代表其用户部分。它代表发出请求的用户的名字。


request.getRequestedSessionId() 
输出SessionId


request.getRequestURI()
请求URL


request.getServletPath()
URL中调用Servlet的那一部分,不包含附加路径信息和查询字符串。


request.getHeader("Accept")
访问AcceptHTTP头。


request.getHeader("Host")   
输出:192.168.0.18080


request.getHeader("Referer")
      
request.getHeader("Accept-Language")


request.getHeader("Accept-Encoding")   


request.getHeader("User-Agent")


request.getHeader("Connection")


request.getHeader("Cookie")
   
返回协议名称:request.getScheme()
输出:HTTP


Web服务器名字:request.getServerName()
输出:192.168.0.1


服务器监听的端口:request.getServerPort()
输出:8080






原文地址:获取request里的所有参数名及其参数值作者:橡皮擦
request里有两个方法
request.getParameterMap();
request.getParameterNames();
我想用这两种方法获取。
1。用request.getParameterNames();
Enumeration enu=request.getParameterNames();
while(enu.hasMoreElements()){
String paraName=(String)enu.nextElement();
System.out.println(paraName+": "+request.getParameter(paraName));
}


2request.getParameterMap();
访问URL:http://127.0.0.1:8080/test.jsp?a=1&b=2&c=3
test代码:
Map map=request.getParameterMap();
    Set keSet=map.entrySet();
    for(Iterator itr=keSet.iterator();itr.hasNext();){
        Map.Entry me=(Map.Entry)itr.next();
        Object ok=me.getKey();
        Object ov=me.getValue();
        String[] value=new String[1];
        if(ov instanceof String[]){
            value=(String[])ov;
        }else{
            value[0]=ov.toString();
        }


        for(int k=0;k<value.length;k++){
            System.out.println(ok+"="+value[k]);
        }
      }

servlet的配置当中,<load-on-startup>5</load-on-startup>的含义是:

标记容器是否在启动的时候就加载这个servlet

当值为0或者大于0时,表示容器在应用启动时就加载这个servlet

当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。

正数的值越小,启动该servlet的优先级越高。

标准Servlet写法:

1.新建一个Servlet

2.写上名字,选择doGet()方法和doPost()

3.next,给servlet

请求转发(内部跳转):Request.getRequestDispatcher(/转到的页面).forware(request,response)不加/表示当前Servlet所在目录,加了表示项目根目录

请求重定向response.sendRedirect(/项目名/转到的页面);

请求域:(Httprequuset

四个方法:

1.void setAttribute(String name,Object obj);

2.Object getAttribute();

3.Void removeAttribute(String name)

4.

 

2.会话域-session:HttpSession = request.getSession();

作用范围:该次会话期间一直有效

Tomcat默认session有效期:30分钟

session失效:

1.Session.invalidata()执行后,次session无效

2.Session最大等待时间到后

3.关闭浏览器后

4.关闭服务器后

只要浏览器和服务器没有配对的SessionId就表示session无效

浏览器发送一次请求到服务器,服务器首先判断,该请求是否携带一个SessionID

如果这次请求没有携带一个SessionID值,服务器就知道了,这是第一次来访问该服务器

浏览器与该服务器开始建立会话

服务器会在相应请求的同时,将产生一个SessionID,作为该次会话的标识

再把这个SessionID发给浏览器,浏览器就拥有一个SessionID

当再次访问该服务器时,浏览器会携带那个SessionID,被传到服务器

服务器首先判断该请求是否携带一个SessionID值,此时有了,代表这不是一个新的会话的请求

如果浏览器两个请求之间的时间太长,超出服务器等待的时间,服务器会删除这个session对象

删除后,再次发送到该服务器,因为服务器里没有这个session对象了,就不能判断请求是否携带SessionID

也就是说判断不出来,就认为这是一个新的会话开始,又会产生一个SessionID,作为这次新会话的标识

又把这个SessionID发给浏览器,浏览器就拥有一个新的SessionID

在会话开始时,服务器会自动分配一个空间(session对象)SessionID就在session对象里

Filter:是一个类(过滤器)

创建一个类implements javax.servlet.Filter



原创粉丝点击