httpservlet其他api
servletconfig 用法
可以得到servlet标签中配置的信息
第一步 在web.xml中书写配置数据,添加<init-param>
字段
<servlet>
<servlet-name> serveletConfigDemon </servlet-name>
<servlet-class> servlet.ServeletConfigDemon</servlet-class>
<load-on-startup> 2 </load-on-startup>
<init-param>
<param-name>name</param-name>
<param-value>Jeason</param-value>
</init-param>
</servlet>
第二步 在当前的servlet中可以获取数据
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//得到servletconfig对象 开发中使用不多
ServletConfig servletConfig = getServletConfig();
//获取servlet标签中配置的参数
String name = servletConfig.getInitParameter("name");
System.out.println(name);
}
servlet url配置方式
()
首先我们配置url的时候前面必须写/ 如果不写tomcat启动不成功
1》第一种 全路径配置方式 常用
例如 /scd 访问 可以加目录
例如
2》第二种 路径匹配 对于前半段匹配 结合* 通配符 匹配的是任意文字
以/开头 但是结束以接收 例如 /a/
3》第三种 以扩展名匹配
没有/ 以*开始 *.扩展名 例如 *.aa
servletContext 上下文对象
每一个web工程只有一个上下文对象,说白了就是在任何一个servlet下,都获取到这个上下文对象(一种全局变量)
1》配置全局参数 后面讲框架的时候会用到
第一步 在web.xml中配置全局参数 (这个参数 整个项目都可以通过servletcontext对象进行获取)
<context-param>
<param-name>sex</param-name>
<param-value>man</param-value>
</context-param>
第二步 当前工程下任何一个servlet都可以获取此数据
得到上下文对象
ServletContext servletContext = getServletContext();
通过键取值
String initParameter = servletContext.getInitParameter("sex");
2》获取web资源根据工程相对路径可以获取到他的绝对路径(tomcat服务器中的)
绝对路径 :真实在硬盘中存储的路径
相对路径:例如工程相对路径
//1.src下资源访问案例
String realPath = servletContext.getRealPath("WEB-INF/classes/file.txt");
//2.webcontent下资源案例
String indexhtml = servletContext.getRealPath("index.html");
3》获取域对象数据 servletContext本身就是域对象 常用
域对象 在web工程中帮助我们存储数据的一个对象 (今后会学习四个不同域对象,他们区别就是存储范围)
我们可以向域对象中存数据 通过域对象取数据
第一步 获取上下文对象 域对象范围整个工程
ServletContext servletContext = getServletContext();
第二步 往域对象中放置数据
servletContext.setAttribute("name","张三");
第三步 获取数据 (如果是其他servlet中获取第一步先要获取到上下文对象 然后取值)
String name = (String) servletContext.getAttribute("name");
4》servletcontext对象什么时候创建什么时候销毁
服务器启动的时候 会为web工程创建一个上下文对象
服务器关闭了 或者项目移除了就销毁了
get和post的区别
get 显式提交 不安全 传输数据有限制 低的浏览器长度有限制 默认网页都是get请求
post 隐式提交 安全 传输数据理论没有大小 一般企业版的开发使用post发送请求 较多
request和response对象的常用方法
request对象中的方法:
String getContextPath() 获取工程名
getSession() 获取session对象
getParamter(); 根据键获取请求参数
request.setCharacterEncoding("UTF-8"); 解决post乱码
response对象中的方法:
setStatus(int sc) 设置响应码
response.setContentType("text/html;charset=UTF-8");解决响应乱码
这里写了一个小例子来使用上述方法:
建立一个简单的页面:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Hello world!
<form action="test" method="get">
姓名:<input name="name" ><br>
性别:<input name= "sex"><br>
爱好:抽烟<input name="hobby" type="checkbox" value="抽烟">
喝酒<input name="hobby" type="checkbox" value="喝酒">
烫头<input name="hobby" type="checkbox" value="烫头"><br>
<input type="submit" value="请您提交">
</form>
</body>
</html>
在java文件中:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
ServletConfig servletConfig= getServletConfig();
String name = servletConfig.getInitParameter("name");
System.out.println( "servelet配置参数name为:"+name );
//获得ServletContext对象,可以让我们访问servlet的公共域(可以理解为一种全局变量)
ServletContext servletContext = getServletContext();
//通过ServletContext对象,获得我们在web.xml中设置的初始公共域参数
String sex = servletContext.getInitParameter("sex");
System.out.println("servlet的全局初始参数为:"+sex);
//通过ServletContext对象可以获得文件路径(相对路径和绝对路径,提交到tomcat后不准确)
String pass = servletContext.getRealPath("file.txt");
System.out.println("绝对路径:"+pass);
//获取全局参数
System.out.println( "全局参数name中的值:"+servletContext.getAttribute("name") );
//request对象获取工程名
String path = request.getContextPath();
System.out.println("path: "+path);
//获得单个参数
String parameter = request.getParameter("name");
System.out.println("get方法获得的name参数:"+parameter);
//获得成组的参数
String[] parameterValues = request.getParameterValues("hobby");
System.out.println( "get方法获得的hobby参数:");
for(String str:parameterValues) {
System.out.println(str);
}
//给页面相应的对象(response)
response.getWriter().println("received,thank you" );
}
/*
当我们提交表单后,服务器端输出如下:
servlet的全局初始参数为:man
绝对路径:E:Lib_Javaapache-tomcat-9.0.34-windows-x64apache-tomcat-9.0.34webappsday28file.txt
全局参数name中的值:null
path: /day28
get方法获得的name参数:王建森
get方法获得的hobby参数:
抽烟
喝酒
烫头
*/
请求乱码 和响应乱码解决问题
get请求中文不会发生乱码问题 前提条件 你的tomcat版本必须是8以上 默认编码格式utf-8
post请求参数中文会发生乱码 因为他默认编码格式不是utf-8 我们需要修改他的编码格式成utf-8这样问题就解决了
request.setCharacterEncoding("UTF-8");
当我们使用响应对象响应数据中文时会出现乱码 如下解决:
response.setContentType("text/html;charset=UTF-8");
转发和重定向
作用就是跳转页面
//转发的方法 request对象中的方法
request.getRequestDispatcher("success.html").forward(request, response);
//重定向
response.sendRedirect("success.html");
//重定向注意 如果之前使用了getwriter方法 就不能跳转页面了 会报异常
//java.lang.IllegalStateException: getWriter() has already been called for this response