解决数据库乱码,DAO工厂和Servlet的生命周期

解决数据库乱码、 DAO工厂和Servlet的生命周期

//保证服务器发送给浏览器的数据是正常的(支持中文即可):
response.setContentType("text/html;character=utf-8");

让数据库支持中文:
保证
create datebase db_name default character set utf8;
编码规则和解码规则要一至
在jdbc中给数据库连接增加参数:
jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=utf8
明确的告诉jsbc驱动程序,保存在数据库中的数据的编码格式是什么


Servlet的生命周期
创建(出生)--->分配资源(获得工具)--->完成请求(工作)--->销毁(挂了)
www.souceforge.com
www.apache.org

老师笔记:
1、dao的改进 
    step1 实体类 
    step2 dao接口 
    step3 dao实现 
    step4 工厂 
        工厂是什么? 
            工厂类将一个对象的创建过程对外屏蔽,调用者 
        不需要了解对象的创建过程,只需要调用工厂类 
        的相应方法就可获得符合相应接口规范要求的 
        对象。 
         
        类的加载: 
            jvm会将内存空间划分成三部分,分别是 
        堆、栈、方法区。 
            jvm在执行java代码时,如果碰到一个类型 
        ,比如Student,会先检查方法区当中,有没 
        有Student class对象。如果没有,则调用 
        ClassLoader(类加载器),ClassLoader会依据 
        classpath搜索Student.class文件,将该文件转换 
        成方法区中的一个对象(即Student class对象)。 
         
2、将中文参数值保存到数据库 
    step1  
        html文件,添加<meta http-equiv="Content-Type"  
content="text/html; charset=UTF-8"> 
        表单要采用post方式提交。 
    step2 在servlet类当中,添加 
    request.setCharacterEncoding("utf-8"); 
    step3 将连接数据库的url改成: 
    jdbc:mysql://localhost:3306/jd1202db? 
    useUnicode=true&characterEncoding=utf8 
    明确告诉jdbc驱动程序,保存在数据库中的数据 
    的编码格式是什么。 
     
3、一个servlet如何处理多个不同的请求。     
    1)servlet容器(tomcat)如何处理请求资源路径? 
    比如,在浏览器地址栏输入 
    http://ip:port/appname/abc.html,浏览器会将 
    "/appname/abc.html"作为请求资源路径放到 
    请求数据包里面,发送给servlet容器(tomcat)。 
        step1 查找webapps下的appname文件夹,找到 
        web.xml文件,然后比较"/abc.html"与  
        <url-pattern>的配置。 
        step2 按照如下方式比较: 
            精确匹配: 要求<url-pattern>必须也是/abc.html。 
            通配符匹配: 使用"*"代表任意的字符。 
                <url-pattern>/*</url-pattern> 
            后缀匹配: 使用*.任意的字符串。 
                比如: 
                <url-pattern>*.do</url-pattern> 
            表示所有以.do结尾的请求资源路径都匹配。 
        step3 容器会将请求资源当作是一件静态资源, 
        查找对应的资源文件是否存在,存在,则返回, 
        不存在,返回404。 
    2)    让一个servlet处理多个请求. 
        step1 该servlet使用后缀匹配模式。 
        step2 在servlet的service方法里面,分析 
        请求资源路径,依据分析结果采取不同的处理。 
            //返回请求资源路径 
            String request.getRequestURI(); 
    练习: 
         使用一个servlet(ActionServlet)来实现学生信息 
        管理。 
4、servlet的生命周期及相关的核心类与接口 
    1)核心类与接口 
        a,Servlet接口 
            init(ServletConfig config):容器 
            在创建一个servlet对象之后,会立即调用 
            该方法。容器在调用init方法之前,会先 
            创建一个ServletConfig对象。也就是说, 
            ServletConfig对象会作为参数传递给servlet 
            对象。 
            service(ServletRequest request, 
            ServletResponse response):容器收到客户端的 
            请求之后,会调用该方法来处理请求。 
            destroy(): 容器在销毁servlet对象之前,会调用 
            该方法。 
        b,GenericServlet抽象类(实现了Servlet 
        接口中的init,destroy方法) 
        c,HttpServlet抽象类(继承GenericServlet, 
        实现了service方法) 
        d,ServletConfig接口: 
            //访问servlet的初始化参数,在web.xml文件当中 
            //使用<init-param>配置的参数。 
            String getInitParamter(String paraName); 
            如何配置servlet初始化参数? 
                web.xml中,添加 
                <init-param> 
                      <param-name>author</param-name> 
                      <param-value>tarena</param-value> 
                  </init-param> 
        e,ServletRequest是HttpServletRequest的父接口。 
        ServletResponse是HttpServletResponse的父接口。 
    2)生命周期 
        servlet容器如何创建servlet对象,然后分配 
    其资源,调用其方法完成请求处理,最后销 
    毁servlet对象的整个过程。 
        第一阶段: 实例化 
            当请求到达容器时,容器会先检查对应的 
            servlet对象是否存在,如果不存在,则 
            创建servlet对象,如果存在,不再创建。 
        第二阶段: 初始化 
            容器接下来,会调用servlet对象的init方法。 
            该方法只会执行一次,用于初始化。 
            init方法可以override,建议 
            override init()。 
            而不是override init(ServletConfig) 
        第三阶段:就绪 
            容器调用servlet对象的service方法来处理请求。 
        第四阶段:销毁 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在使用 Servlet 写入数据库时出现乱码,可能是由于编码不统一所导致的。可以尝试以下解决方法: 1. 确认数据库及表的字符集编码是否与项目编码一致,可以使用以下 SQL 语句查询: ``` SHOW CREATE DATABASE database_name; SHOW CREATE TABLE table_name; ``` 如果字符集编码不一致,可以通过修改数据库或表的字符集编码来解决。 2. 在 JDBC 连接字符串中设置编码,例如: ``` jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=UTF-8 ``` 3. 在 Servlet 中设置请求和响应的编码,例如: ```java request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); ``` 4. 在向数据库中写入数据之前,对数据进行编码转换,例如: ```java String data = request.getParameter("data"); byte[] bytes = data.getBytes("ISO-8859-1"); data = new String(bytes, "UTF-8"); ``` 如果以上方法无法解决问题,可以考虑使用第三方库,如 Apache Commons FileUpload 和 Apache Commons IO,来处理数据编码和文件上传等问题。 ### 回答2: 当servlet写入数据库时出现乱码的情况,可能是由于以下原因导致的: 1. 数据库字符编码不匹配:数据库的字符编码与servlet程序使用的字符编码不一致,导致数据写入时出现乱码解决方法是确保数据库servlet程序使用相同的字符编码,比如都使用UTF-8编码。 2. 请求参数编码问题:在servlet程序中,获取请求参数时未指定正确的字符编码,导致获取到的参数值存在乱码。可以在servlet程序中显式设置请求参数的字符编码,如设置request.setCharacterEncoding("UTF-8")。 3. 数据插入操作编码设置问题:在servlet中执行数据库插入操作时,未明确指定插入数据的字符编码,导致插入的数据乱码。可以在插入数据之前,设置数据库连接的字符编码,如设置连接的字符编码为UTF-8。 4. 数据库字段类型问题:数据库中存储数据的字段类型不是文本类型(如VARCHAR),而是二进制类型(如BLOB或BINARY),导致写入的数据无法正确解析并显示。此时需要修改数据库表结构,将对应字段的类型修改为文本类型。 综上所述,解决servlet写入数据库乱码的问题需要对数据库servlet程序的字符编码进行统一,并确保正确处理请求参数和设置数据库连接的字符编码,同时注意数据库表结构中数据字段的类型是否正确。 ### 回答3: 当Servlet写入数据库时出现乱码问题,主要原因是由于字符编码不匹配导致的。 解决这个问题可以参考以下方法: 1. 在Servlet中设置字符编码:在Servlet的doPost或doGet方法中,使用HttpServletRequest对象的setCharacterEncoding方法设置字符编码,例如: request.setCharacterEncoding("UTF-8"); 2. 在JSP页面中设置字符编码:在JSP页面的头部添加meta标签,指定编码方式,例如: <meta charset="UTF-8"> 3. 数据库连接设置编码方式:在连接数据库时,指定数据库的编码方式为UTF-8,例如MySQL数据库连接字符串如下: jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8 4. 保证数据库表的编码方式与连接编码方式一致:检查数据库表的编码方式与连接编码方式是否一致,确保它们都使用相同的字符编码,例如UTF-8。 5. 对要写入数据库的数据进行编码转换:在将数据写入数据库之前,先将其进行编码转换,保证与数据库的编码方式一致,使用java.net.URLEncoder.encode()方法进行编码转换。 通过以上方法,可以解决Servlet写入数据库时出现乱码问题。如果还存在乱码问题,可以进一步检查数据库和服务器的配置,确保它们的字符编码设置正确。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值