servlet类的几个基本对象

1、servletConfig对象:作用封装初始化参数

可以在web.xml配置文件中配置servlet的初始化参数:

<servlet>

<servlet-name>myServlet</servlet-name>

<servlet-class>MyServlet</servlet-class>

<init-param>

<param-name>paramName1</param-name>

<param-value>paramValue1</param-value>

</init-param>

<init-param>

<param-name>paramName2</param-name>

<param-value>paramValue2</param-value>

</init-param>

<init-param>

<param-name>paramName3</param-name>

<param-value>paramValue3</param-value>

</init-param>


</servlet>

tomcat容器会在初始化servlet的时候调用init方法来初始化配置参数

可以在Servlet类中这样来调用它:

1、可以根据参数名字来获取初始化参数:String value = this.getServletConfig().getInitParameter("paramName1");

此时value=paramValue1

2、还可以一次性获取所有的参数名,然后根据名称再获取所有的参数值。

Enumeration e = this.getServletConfig().getInitParameterNames();

while (e.hasMoreElements) {

String name = e.nextElement();

String value = this.getServletConfig().getInitParameter(name);

}

2、servletContext对象:servletContext对象代表了一个web应用,所以在一个web应用中所有的Servlet共享同一个servletContext对象,所以多个Servlet通过servletContext对象实现数据共享。servletContext对象也通常称为context域对象主要有三个作用:(1)、获取web应用的初始化参数(2)、实现Servlet的转发(3)、利用servletContext对象读取资源文件。

读取资源文件:(1)、得到文件路径(2)、读取资源文件的三种方式(3)、.properties(属性文件)。

作用1、可以在web.xml配置文件中配置wb应用的初始化参数。比如数据库的用户名和密码:

<contex-param>

<param-name>name</param-name>

<param-value>root</param-value>

</contex-param>

<contex-param>

<param-name>password</param-name>

<param-value>123456</param-value>

</contex-param>

作用2:转发

比如浏览器访问一个servlet,该servlet转发给另外一个servlet或者是jsp页面

this.getServletContext().gerRequestDispatcher("/hello.jsp").forward(request, response);

作用3:获取资源文件。

(1)、假如在工程的src目录下有个db.properties文件,文件内容如下:

url=jdbc:mysql://localhost:3306/test

username=root

password=123456

最终编译以后发布在tomcat服务器下原来的src目录就是WEB-INF目录下的classes目录了

可以在Servlet中这样来写:

InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");

Propertis pro = new Properties();

pro.load(in);

String url = pro.get("url");

(2)、如果是在webRoot根目录下有个db.properties文件

InputStream in = this.getServletContext().getResourceAsStream("/db.properties");

Propertis pro = new Properties();

pro.load(in);

String url = pro.get("url");

(3)、传统方式:a主要用途是在文件下载中需要知道文件的名字,可以用这种方式来读取。

String path = this.getServletContext().getRealPath("/WEB-INF/classed/db.properties");

String fileName = path.subString(path.lastIndexOf("\\") + 1); // windows中路径是以\反斜杠作为标记的

System.out.println(fileName);

FileInputStream in = new FileInputStream(path);

Propertis pro = new Properties();

pro.load(in);

String url = pro.get("url");

(4)、在非Servlet类中怎样读取资源文件?加入在UserDAO类中读取,用类加载器来读取:(由于是通过类装载器来读的,由于只会装载一次,所以文件改动会,不起作用还是会从内存读原来的配置,如果想读到改动会的类可以用第5种方法)

InputStream in = this.getClassLoader().getResourceAsStream("db.properties");

Propertis pro = new Properties();

pro.load(in);

String url = pro.get("url");


(5)、

String path = this.getClassLoader().getResource("db.properties").getPath();

FileInputStream in = new FileInputStream(path);

properties pro = new Properties();

pro.load(in);

String url = pro.get("url");

3、HttpServletResponse对象:

该对象可以在doGet或doPost方法中设置Http相应的响应行、响应头、响应内容。

response.setHeader("content-type","text/html;charset="UTF-8"");// 程序以什么码表输出的,就一定要控制浏览器以什么方式打开

String data="中国";

OutputStream out = response.getOutputStream();

out.write(data.getBytes("UTF-8"));

也可以用字符流来输出,但字符流默认的编码是ISO8859,该字符集中就没有中文,所以浏览器打开会出现乱码。

但可以设置字符流输出的编码方式,如下:

response.setCharacterEncoding("UTF-8");

response.setHeader("content-type","text/html;charset=UTF-8");

String data = "中国";

PrintWriter out = response.getWriter();

out.write(data);

请求重定向:(一般用于登录或购物)

request.setRedirector(“/index.jsp”);

4、request对象:

可以获取通过表单或超链接传递过来的参数:

String value = request.getParameter("userName"); // 假设在表单上提交了 个userName的参数

Enumeration enum = request.getParameterNames();

while (enum.hasMoreElement()) {

String s = request.getParameter(enum.nextElement());

System.out.println(s);

}

String[] values = request.getParameterValues("userName"); // 加入表单上有几个name为userName的参数

if (values != null) {

for (int i = 0; i < values.length; i++) {

System.out.println(values[i]);

}

Map<String, String[]> map = request.getParameterMap(); //把提交过来的参数都封装到map对象中

User user = new User(); // 假设Use类封装了提交表单的参数

BeanUtils.populate(user, map) // 需要加入commons-beanutils jar包

中文乱码:

用户从一个页面上的表单提交中文参数给服务器端,服务器端有可能会产生乱码,表单页面是用什么码表编码的,汉字也就会用相应的码表编码。所以到了服务器端

要设置成相应的字符集来获取参数,服务器端request默认的字符集是ISO8859,假设页面用的是UTF-8编码的,所以在服务器端设置字符集就可以解决:

//request.setCharacterEncoding("UTF-8"); // 只对post方式提交有效

String wrongNname = request.getParameter("userName") ;

String rightName = new String(wrongName.getBytes("ISO8859-1"), "UTF-8"); // 解决get方式提交的乱码问题  超链接提交的也都是get方式

request实现请求转发:

String data="aaa";

request.setAttribute("data", data); // attribute 是在服务器端设置属性,parameter是在客户端提交的参数。 

request.getDispatcher("/index.jsp").forward(request, response);

forward会清空response中的数据

String data = "aaa";

response.getWriter().write(data);

request.getDispatcher("/index.jsp").forward(request, response);

加入在index.jsp页面中有bbb,

最终只会显示bbb,而aaa不会显示。

在路径中“/”代表的意义,在给服务器用的过程中,它代表web应用,webRoot。在给浏览器用时代表网站,webapps。

获取URL中的资源用“/”获取硬盘中的资源用反斜杠“\”

以上内容是根据传智播客的方立勋老师的视屏资料整理的,在这里谢谢老方老师无私的为大家提供视屏资料。

你可能感兴趣的:(java,Web,servlet)