JAVA框架-Servlet中()

Posted 不愿透露姓名的王建森

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA框架-Servlet中()相关的知识,希望对你有一定的参考价值。

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配置方式

/scd
首先我们配置url的时候前面必须写/ 如果不写tomcat启动不成功
1》第一种 全路径配置方式 常用
例如 /scd 访问 可以加目录
例如 /servetconfigdemo/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












以上是关于JAVA框架-Servlet中()的主要内容,如果未能解决你的问题,请参考以下文章

Java基础——JSP

servlet框架改进(基础)

MySQL SELECT with LIKE in java Servlet MySQL 错误

JAVA框架-Servlet中()

扩展 Spring Framework (Java) Servlet

java---servlet与filter的联系与区别