servlet notes1

【动态网页技术发展】
cgi(common gateway interface)效率低
--->asp(html+js+com)扩展难;com开发难度大,一般是微软开发;安全性低;实现企业级功能困难
--->php(跨平台性良好,多种数据库支持,良好的安全性,免费使用;安装复杂,缺少企业支持) PHP+MySQL+Linux+Apache
--->jsp=HTML+java片段+jsp语法+js(一次编写,到处运行;良好的跨平台性;多种开发工具支持,jbuilder,NetBeans,Eclipse;强大的可伸缩性,jsp+javabean; 入门难,运行机器配置要高,因为jsp是用class常驻内存的方式运行的,效率高,但是需要占更多内存)

【B/S】
优点:开发成本低,管理维护简单,成品升级便利,培训费用低,用户使用方便,出现故障概率小
缺点:安全性低,客户端受限制,有利于管理用户

【servlet】java 服务器端小程序
特点:由服务器端调用和执行;java编写;按照servlet规范开发的;功能强大,几乎可以完成所有网站功能;是jsp基础

文本编辑器:notepad,uedit32
集成开发工具:jbuilder,eclipse,editplus,netbean

【servlet/jsp运行环境】
浏览器:ie,firefox...
WEB服务器(管理servlet):Tomcat,bea weblogic,resin...
数据库:MySQL,access,Oracle...
 
【Tomcat】
免费的开源的servlet容器,sun公司大力支持(图)
功能:1,web服务器  2,jsp容器  3.servlet容器

从bin/startup启动 这样所有消息都会出现,便如调试。

【servlet/jsp网络拓扑图】
开发servlet三种方法:
1.【实现servlet接口】  2.继承Genericservlet 3.继承httpservlet

init:该函数用于初始化servlet(类似于类的构造函数),该函数只会被调用一次(当用户第一次访问该servlet时被调用)

service:用于处理业务逻辑,程序员应该把业务逻辑写在这里。当用户每访问一次该servlet时,都会被调用【ServletRequest req用于获得客户端信息; ServletResponse res用于向客户端返回信息。从res中得到PrintWriter 】

destroy:销毁servlet实例(释放内存)。1.reload该servlet(webapps)2.关闭TOMCAT 2.关机

2.【通过继承GenericServlet开发servlet】
只需要在文件中重写一个service方法。
【code】:
package xby;
 
import javax.servlet.GenericServlet;
import javax.servlet.*;
import java.io.*;

public class HelloGen extends GenericServlet{
 public void service(ServletRequest req,ServletResponse res){
  try{
   PrintWriter pw=res.getWriter();
   pw.println("Hello Gen");
   }
  catch(Exception ex){
   ex.printStackTrace();
   }
  }
 
 }

3.【继承httpservlet】
重写doGet ,doPost方法,目前使用最多的方法。
表单提交数据get请求和post请求的区别:
(1)安全性get<post get提交的数据会在浏览器的地址栏显示;
(2)内容大小上看,get<post get提交的数据不能大于2k 而post提交的数据理论上不受限制 ,但是实际上建议不能大于64k;
(3)请求响应的速度上看:get>post,get要求服务器立即处理请求,而post请求可能形成一个队列请求。
【code】:
【表单标签:<form></form>
功能:用于申明表单,定义采集数据的范围,也就是<form>和</form>里面包含的数据将被提交到服务器或者电子邮件里】
package xby;

import javax.servlet.http.*;
import java.io.*;

public class Login extends HttpServlet{
 //处理get请求
 public void doGet(HttpServletRequest req,HttpServletResponse res){
 try{
  //中文乱码
  res.setContentType("text/html;charset=gbk");
  PrintWriter pw=res.getWriter();
  pw.println("<html>");
  pw.println("<body>");
  pw.println("<h1>登陆界面</h1>");
                //表单提交给哪个servlet
  pw.println("<form action=logincl method=post>");
  pw.println("用户名:<input type=text name=username><br>");
  pw.println("密码:<input type=password name=passwd><br>");
  pw.println("<input type=submit value=login></br>");
  pw.println("</form>");
  pw.println("</body>");
  pw.println("</html>");
 } 
 catch(Exception ex){
  ex.printStackTrace();
 }
 }
 //处理post请求
 public void doPost(HttpServletRequest req,HttpServletResponse res){
 this.doGet(req,res);
 }
}
【LoginCL】
package xby;

import javax.servlet.http.*;
import java.io.*;

public class LoginCL extends HttpServlet{
 //处理get请求
 public void doGet(HttpServletRequest req,HttpServletResponse res){
 try{
  String u=req.getParameter("username");
  String p=req.getParameter("passwd");
  if(u.equals("xby")&&p.equals("123")){
   res.sendRedirect("wel");
   }
  else{
   res.sendRedirect("login");
  }
 } 
 catch(Exception ex){
  ex.printStackTrace();
 }
 }
 //处理post请求
 public void doPost(HttpServletRequest req,HttpServletResponse res){
 this.doGet(req,res);
 }
}
【Wel】
package xby;

import javax.servlet.http.*;
import java.io.*;

public class Wel extends HttpServlet{
 //处理get请求
 public void doGet(HttpServletRequest req,HttpServletResponse res){
 try{
  PrintWriter pw=res.getWriter();
  pw.println("Welcome");
 } 
 catch(Exception ex){
  ex.printStackTrace();
 }
 }
 //处理post请求
 public void doPost(HttpServletRequest req,HttpServletResponse res){
 this.doGet(req,res);
 }
}

【同一用户的不同页面如何共享数据】
1.cookie:服务器在客户端保存用户的信息,比如登录名,密码等,就是cookie

2.sendRedirect:该方法将信息传送给另一个页面;速度快;但是只能传送字符串;如果传递时中文,你将得到乱码,需要处理一下
sendRedirect("welcome?username=xby&passwd=123");
【code】
 try{
  String u=req.getParameter("username");
  String p=req.getParameter("passwd");
  if(u.equals("xby")&&p.equals("123")){
   res.sendRedirect("wel?uname="+u+"&upass="+p);
   }
  else{
   res.sendRedirect("login");
  }
 }

public void doGet(HttpServletRequest req,HttpServletResponse res){
 res.setContentType("text/html;charset=gbk");
 String u=req.getParameter("uname");
 String p=req.getParameter("upass");
 try{
  PrintWriter pw=res.getWriter();
  pw.println("Welcome");
  pw.println("用户名:"+u+"密码:"+p);
 } 
}

3.隐藏表单:最常用的,也是最简单,但是有时非常有用
<form action=login>
<input type=hidden name=a value=b>
</form>

4.session:当用户打开浏览器,访问某个网站时,服务器就会在服务器的内存为改浏览器分配一个空间,该空间被这个浏览器独占。
这个空间就是session空间,该空间中的数据默认存在时间为30Min,你也可以修改。
功能:1.网上商城中的购物车 2.保存登录用户的信息 3.将某些数据放到session中,供同一用户的各个页面使用 4.防止用户的非法登陆到某个页面。
可以看作一张表,这张表有2列,每一行就是session的一个属性。每个属性包含2个部分,一个是属性的名字(String),另一个就是它的值(Object)
1.得到session              HttpSession hs=request.getSession(true);
2.向session中添加属性      hs.setAttribute(String name,Object val);
3.从session中得到某个属性  String name=hs.getAttribute(String name);
4.从session中删除某个属性  hs.removeAttribute(String name);
a.session中的属性存在时间默认是30Min,可以在con.web.xml中修改,这个时间指的是用户的发呆时间,而不是累计时间;
b.当某个浏览器访问网站时,服务器会给浏览器分配一个唯一的session id,并以此来区分不同的浏览器(即客户端)
c.因为session的各个属性要占用服务器的内存,因此软件公司都是在迫不得已的情况下才去使用。
【code】
package xby;

import javax.servlet.http.*;
import java.io.*;

public class LoginCL extends HttpServlet{
 //处理get请求
 public void doGet(HttpServletRequest req,HttpServletResponse res){
 try{
  String u=req.getParameter("username");
  String p=req.getParameter("passwd");
  if(u.equals("xby")&&p.equals("123")){
   
   //将验证成功的信息写入session
   //1.得到session
   HttpSession hs=req.getSession(true);
   //修改session的存在时间
   hs.setMaxInactiveInterval(20);
   hs.setAttribute("pass","ok");
   res.sendRedirect("wel?uname="+u+"&upass="+p);
   }
  else{
   res.sendRedirect("login");
  }
 } 
 catch(Exception ex){
  ex.printStackTrace();
 }
 }
 //处理post请求
 public void doPost(HttpServletRequest req,HttpServletResponse res){
 this.doGet(req,res);
 }
}
package xby;

import javax.servlet.http.*;
import java.io.*;

public class Wel extends HttpServlet{
 //处理get请求
 public void doGet(HttpServletRequest req,HttpServletResponse res){
 //中文转码
 res.setContentType("text/html;charset=gbk");
 //得到session
 HttpSession hs=req.getSession(true);
 String val=(String)hs.getAttribute("pass");
 if(val==null){
  //非法登陆
  try {
   res.sendRedirect("login");
     }
     catch (Exception ex) {
      ex.printStackTrace();
     }
  
 }
 //接受上一个页面传递的数据
 String u=req.getParameter("uname");
 String p=req.getParameter("upass");
 try{
  PrintWriter pw=res.getWriter();
  pw.println("Welcome");
  pw.println("用户名:"+u+"密码:"+p);
 } 
 catch(Exception ex){
  ex.printStackTrace();
 }
 }
 //处理post请求
 public void doPost(HttpServletRequest req,HttpServletResponse res){
 this.doGet(req,res);
 }
}
【code】

【Servlet中如何操作数据库】注意sql注入
数据库验证:
【存在sql注入漏洞】package xby;

import javax.servlet.http.*;
import java.io.*;
import java.sql.*;

public class LoginCL extends HttpServlet{
 //处理get请求
 public void doGet(HttpServletRequest req,HttpServletResponse res){
 Connection ct=null;
 Statement sm=null;
 ResultSet rs=null;
 try{
  String u=req.getParameter("username");
  String p=req.getParameter("passwd");
  //连接数据库
  Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");//驱动包
  //获得连接
  ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=xbydb","sa","");//连接数据库的url,数据库的用户名,数据库的密码
  //创建一个Statement
  sm=ct.createStatement();
  rs=sm.executeQuery("select top 1 * from where username=‘"+u+"‘and passwd=‘"+p+"‘");
  
  
  
  if(rs.next()){
   
   //将验证成功的信息写入session
   //1.得到session
   HttpSession hs=req.getSession(true);
   //修改session的存在时间
   hs.setMaxInactiveInterval(20);
   hs.setAttribute("pass","ok");
   res.sendRedirect("wel?uname="+u+"&upass="+p);
   }
  else{
   res.sendRedirect("login");
  }
 } 
 catch(Exception ex){
  ex.printStackTrace();
 }finally{
  try {
   if(rs!=null){
    rs.close();
   }
   if(sm!=null){
    sm.close();
   }if(ct!=null){
    ct.close();
         }
   }
   
     catch (Exception ex) {
      ex.printStackTrace();
     }
 }
 }
 //处理post请求
 public void doPost(HttpServletRequest req,HttpServletResponse res){
 this.doGet(req,res);
 }
}【】

【sql注入漏洞修改】
package xby;

import javax.servlet.http.*;
import java.io.*;
import java.sql.*;

public class LoginCL extends HttpServlet{
 //处理get请求
 public void doGet(HttpServletRequest req,HttpServletResponse res){
  
 Connection ct=null;
 Statement sm=null;
 ResultSet rs=null;
 
 try{
  String u=req.getParameter("username");
  String p=req.getParameter("passwd");
  
   
  rs=sm.executeQuery("select top 1 passwd from where username=‘"+u+"‘");
  
  if(rs.next())
  {
   //说明用户存在
   String dbpasswd=rs.getString(1);
   
   if(dbpasswd.equals(p))
   {
    //说明用户真的合法
    HttpSession hs=req.getSession(true);
       //修改session的存在时间
       hs.setMaxInactiveInterval(20);
       hs.setAttribute("pass","ok");
       res.sendRedirect("wel?uname="+u+"&upass="+p);
   }
   else
      {
       res.sendRedirect("login");
         }
  }
  else
  {
   res.sendRedirect("login");
     }
  } 
 catch(Exception ex){
  ex.printStackTrace();
 }finally{
  try {
   if(rs!=null){
    rs.close();
   }
   if(sm!=null){
    sm.close();
   }if(ct!=null){
    ct.close();
         }
   }
   
     catch (Exception ex) {
      ex.printStackTrace();
     }
 }
 }
 //处理post请求
 public void doPost(HttpServletRequest req,HttpServletResponse res){
 this.doGet(req,res);
 }
}
【数据库程序设计】
一般通过JDBC(Java Database Connectivity)的驱动程序实现对底层数据库的操作。分三步:
1.连接数据库
2.不断执行SQL语句和处理查询结果
3.关闭连接
JDBC规定了一套访问数据库的API,具体实现则依赖具体的JDBC驱动程序。

【获得驱动】:
Class.forName("驱动程序名"); //Class的完整类名为java.lang.Class 加载了驱动后,就可以开始连接数据库

【连接数据库】:
Connection ct=DriverManager.getConnection("url","user","password"); //该成员方法的作用是与指定的数据库建立连接,并返回建立起来的连接。这样java程序就与数据库管理系统建立了传递SQL语句的操作通道。

【创建SQL语句实例对象】(并进行数据处理):
Statement st=ct.createStatement();
ResultSet rs=st.executeQuery("SQL语句");

【关闭数据库】
xxx.close();

【servlet中插入图片】
在webapps文件夹下,建立一个文件夹image,然后将图片拷贝到文件下。在servlet中添加:<img src="./image/图片名"/>

【分页技术】
int pageSize:每页多少页记录
int pageNow:希望显示第几页
int pageCount:一共多少页
int rowCount:一共多少条记录
【代码实现】

【Cookies】

【java中的extends和implements】
 extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承。
 JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了
 比如class A extends B implements C,D,E

【框架问题初涉】

时间: 2024-10-18 20:48:28

servlet notes1的相关文章

Description Resource Path Location Type The superclass &quot;javax.servlet.http.HttpServlet&quot; was not foun

一段时间没亲自建新项目玩乐,今天建立了一Maven project的时候发现了以下异常,Description Resource Path Location Type The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path index.jsp /easyBuy/src/main/webapp line 1 JSP Problem 经过查找原因,原来是因为忘记设置server

Spring Cloud ZooKeeper集成Feign的坑2,服务调用了一次后第二次调用就变成了500,错误:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.n

错误如下: 2017-09-19 15:05:24.659 INFO 9986 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.spring[email protected]56528192: startup date [Tue Sep 19 15:05:24 CST 2017]; root of context hierarchy 2017-09-19 15:05:24.858 INFO 9986 --

Java web之servlet

入坑必备之servlet(O(∩_∩)O哈!) 两个问题:是什么?怎么用? the first question:what?       Servlet是sun公司提供的一门用于开发动态web资源的技术,sun公司在其API中提供了一个servlet接口.由此可以理解为原生的servlet是一个接口,提到接口,我们应该想道我们必须去实现它才能被我们使用,servlet这个接口当然也不例外,从概念上讲,servlet是指sun公司提供的这个API接口,约定俗称,现在我们说的servlet是指实现这

JavaWeb之Java Servlet完全教程(转)

Servlet 是一些遵从Java Servlet API的Java类,这些Java类可以响应请求.尽管Servlet可以响应任意类型的请求,但是它们使用最广泛的是响应web方面的请求. Servlet必须部署在Java servlet容器才能使用.虽然很多开发者都使用Java Server Pages(JSP)和Java Server Faces(JSF)等Servlet框架,但是这些技术都要在幕后通过Servlet容器把页面编译为Java Servlet.也就是说,了解Java Servle

servlet理解

一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 1.编写一个Java类,实现servlet接口. 2.把开发好的Java类部署到web服务器中. 按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet 二.Servlet的运行过程 Servlet程序是由WEB

web.xml 中的listener、filter、servlet加载及一些配置

在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter.最终得出的结论是:listener -> filter -> servlet 同时还存在着这样一种配置节:context-param,它用于向 Servlet

Servlet简介与生命周期

转载请注明原文地址: 一:Servlet是什么 Servlet是运行在Web服务器上的Java程序,作为处理来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层.JSP在web服务器上要先转换成servlet,然后才能在JVM运行,并把结果拼接成浏览器可识别的文件(如html)传回浏览器显示. 二:Servlet的应用场景 单纯地对客户端的请求做处理时,如果我们用纯JSP文件(即:只有Java语句)来处理的话,还需要先转换为servlet才能运行

Java—Servlet开发

掌握Servlet API是Java Web的基础. 首先新建一个Web类型的工程,然后再创建Servlet类.而且Servlet类名,要以Servlet作为后缀.--Servlet技术,就在Servlet类中. 然后要运行Servlet,就需要一个容器(JSP也需要),如开源的Tomcat. Tomcat的配置: 下载:

Servlet的生命周期

Servlet的生命周期是由Servlet的容器来控制的,它可以分为三个阶段:初始化.运行.销毁1.初始化阶段:(1)Servlet容器加载Servlet类,把Servlet类的.class文件中数据读到内存中:(2)然后Servlet容器创建一个ServletConfig对象.ServletConfig对象包含了Servlet的初始化配置信息:(3)Servlet容器创建一个Servlet对象:(4)Servlet容器调用Servlet对象的init方法进行初始化.2.运行阶段当Servlet