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中的资源用“/”获取硬盘中的资源用反斜杠“\”
以上内容是根据传智播客的方立勋老师的视屏资料整理的,在这里谢谢老方老师无私的为大家提供视屏资料。