javaweb阶段全套基本内容

学习MVC架构开发

servlet + jdbc

1. servlet

1-1 导包:即:servlet-api.jar和jsp-api.jar包。               (有的eclipse是需要导这两个包的,这两个包在Tomcat的lib目录下可以找到)
1-2 版本:2.5版本/3.几系列的版本(3.几系列的版本不像2.5版本那样只可以使用web.xml来开发,它还 可以使用注解@webServlet(/...))
1-3 配置:
	1-3-1 XML配置
		继承:HttpServlet类(还可继承这两个类:Servlet类和GenericServlet类。只不过很少用)
		重写:该类的service()方法
		配置:web.xml文件
			<servlet>
				<servlet-name>配对名</servlet-name>
				<servlet-class>servlet类的全名(是点结构:包名+类名)</servlet-name>
			</servlet>
			<servlet-mapping>
				<servlet-name>配对名</servlet-name>
				<url-pattern>访问入口(必须/开头)</url-pattern>
			</servlet-mapping>
	
	1-3-2 注解配置
		继承:HttpServlet
		重写:service方法
		注解:@webServlet("/访问入口")
		
		Tips:3.0版本的Servlet 也可以使用xml文件来配置。(就是说,3.0版本不仅可以使用1-3-2这种方式,也可以使用1-3-1这种方式)
		


1-4 转码:

	对请求(从浏览器端到服务器端)进行转码:   request.setCharacterEncoding("UTF-8");
    
	对响应(从服务器端到浏览器端)进行转码 :
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=utf-8");   (建议用它)

    关键是:写JDBC的四大参数中的url的时候,需要在最后加一个  ?characterEncoding=utf8这样才能最好的避免中文乱码出现。



1-5 接值(在Servlet类中接收从前端传来的值)

	前提:所使用的getP../getP..s的方法的参数name要和页面上表单组件元素的name一致。(注意:这里是说表单中的组件标签,若是前端页面中非表单中的标签则不是通过name属性来获取参数的)
	接单个值:String name = request.getP("name");  
	接多个值:String[] names = request.getParameterValues("name"); 


1-6 调用(在Servlet类中接收到值后可以开始调用service层的方法)

	调用service层的方法:业务处理全部都在service中搞定。
	
1-7 存储(把调用service方法得到的返回值存储起来,以便前端页面使用)

	一次请求:(在request域)
		request.setAttribute(k,v);  : 一次跳转页面之内
	一次会话:(在session域)
		request.getSession().set... : 一次浏览器会话(默认是保存30分钟)
	一次服务:(在application域)
		session.getServletContext().set... : 一次服务器启动周期
	
	tips:你想在页面上展示的数据需要存起来
	tips:你想在其他地方取出值,也需要提前存好
	
1-8 转(存储好之后,可以开始跳转页面了)

	请求转发:
		代码:request.getRequestDispatcher("路径").forward(request,response);
		路径:不带工程路径,浏览器地址栏也不变
	重定向:
		代码:response.sendRedirect("路径");
		路径:前面拼接工程路径,浏览器的地址栏会改变
		
	注意:一般来说,用请求转发还是用重定向都差不多。但是在进行增删改查中的添加操作时,必须要用重定向来跳转,而不能用请求转发。(具体原因等你写项目的时候就会发现了)
		
		
1-9 过滤器(可以用来防止用户非法登录。一旦用户直接从浏览器中输入网站的主页的地址,而不是通过登录页面登录进去的,过滤器就会将其“打回原形”)

	关键字:filter		
	1-9-1 自己创建一个过滤器类并且 implements Filter接口
		重写该接口的init / destroy / doFilter这三个方法
		
	1-9-2 要在web.xml文件中进行配置,内容如下:
	
		<filter>
			<filter-name>MyFilter</filter-name>
			<filter-class>com.oracle.filter.MyFilter</filter-class>	
		</filter>

		<filter-mapping>
			<filter-name>MyFilter</filter-name>
			<!--在下面写, 哪些路径会被你拦截 ,只要是跟下面这个路径沾边的,都会被拦住。拦住之后,会进到你创建的MyFilter类中的doFilter方法中,你可以在doFilter方法中进行判别,看给哪些东西放行 -->
			<url-pattern>/servlet/*</url-pattern>
		</filter-mapping> 	

   1-9-3 其中doFilter方法中有三个参数
	
		request / response / chain
		tips: chain对象中有一个doChain(request,response)方法可以用来放行	
		
        Tips:也可以将转码的那两条操作代码放在过滤器类的doFilter方法中


1-10 监听器  
     listener		 
                   监听器Listener案例:
                              防止多人同时在线一个账号,因为涉及到了多个浏览器,这时只使用session就不合适了。所以就要使用application了。(注意:application中只是存放List集合的。而List集合存放所有的用户)
	
	 使用过程:
	    1、自定义一个MyListener类。让其实现ServletContextListener接口。
	                 并重写里面的两个方法。
	                 ①contextDestroyed方法:在里面写  服务器(如Tomcat)关闭时  所要做的操作
	                 ②contextInitialized方法:在里面写 服务器启动时  所要做的操作
	    
	    2、然后在web.xml文件中进行配置,如下:
	          <!-- 监听listener的配置方式 -->
			  <listener>
			  	<listener-class>com.oracle.listener.MyListener</listener-class>
			  </listener>
       
        



1-11 报表打印

	1-11-1 导包(有几个jar包)
	1-11-2 导入模版   自己在项目中自己找位置导入模版,如template/template.xls。(创建了template文件夹并放入一个空xls文件。里面放你要怎么展示数据的那个模板)
	1-11-3 在服务器 如tomcat/webapps/项目名  中创建一个down文件夹(也可以用Java代码IO流中的File类创建)
	1-11-4 创建一个servlet专门负责数据和xls数据的转换和下载业务
		1. servlet准备数据,数据需要是Map格式
		2. 获取模版路径 template_path
		3. 获取上传文件路径 folderPath(需要自己拼接一下文件名,必须是.xls后缀的)
		4. 获取转换器对象XLSTransformer
		5. 调用XLSTransformer中的transformXLS()方法来转换数据
			p1:模版路径
			p2:数据源
			p3:上传路径
			
			OK搞定了!
		tips:如果你想要下载下来,使用如下语句:(它起到下载的作用)

			resp.sendRedirect(req.getContextPath()+"/down/abc.xls");
  1. ajax(要使用它的话,记得要导入JQuery的那个库文件)

    ajax可以达到异步刷新页面的效果。(这样的话就可以节省网络资源)

     $.ajax({
     	type:"post",   // post/get/put/delete
     	url :"路径",   // 你要跳转的路径(去某个地方拿值)
     	data:{k:v,k:v,...}, // 以json对的格式传递数据
     	//async:false;//这句的作用是  将Ajax的异步变为了同步,很少用到
     	success:function(a,b){//这里的参数可以只写一个,也就是参数a,本来是有三个的,但是后面两个作用不大
     		// a是从后台Servlet中返回的值,它是一个字符串
     		// b是返回的状态.本来还有一个c,c是属性的集合,c中包括了a、b,但是为了突出a、b,就将a、b单独拿出来了(使用更方便)。
     	}
     });
    
  2. jdbc

    3-1 DataSourceFactory / DataSource.java

     数据库驱动
     提供了一个同步的获取链接的方法getConnection();
     提供了两个关闭资源的重载方法();
     
     3-1-1  连接池List<Connection>
     3-1-2 属性文件获取:DataSource.properties
     
     注意:在使用我提供的jar包的时候(我已经上传到CSDN中了,需要的可以去下载),要创建一个res资源文件夹,然后在里面创建一个配置文件,将jar包中的配置文件的内容粘贴进去。这样在Java中就近原则下,项目会先使用咱创建的res中的文件。(原因:我提供的jar包中封装的DataSource.properties配置文件已经变成了一个只读文件,所以需要你自己再创建一个同名文件)
    

    3-2 JDBCFactory / JDBC

     全查:retrieveAll
     单查:retrieveOne
     增删改:doDML
     批量操作:doBatch	。针对同一类型的sql语句	
     批量删除:doDelete。  同上,但是条件只能有一个,这里是按id批量删除
    

    3-3 IdFactroy

     通过UUID来创建一个随机不重复的32位码作为ID。
     也可通过序列来获取序列中的下一个值作为ID。
    
  3. JSP

    <% %> 这个符号里面可以使用原生java代码段
    <%= %> 这个符号里面可以直接引用一个java变量。(个人觉得这个符号的作用更像java类中的输出语句)
    <%@ %> 这个符号里可以用来导包

    4.1 EL表达式(只用于jsp页面中,html页面不可使用)

     格式:${xxx}
     取值:${requestScope.xxx}    //requestScope这个域对象是可省略不写的,其余则不可省略
     取值:${sessionScope.xxx} 
     取值:${applicationScope.xxx} 
     
     tips:EL表达式是在jsp页面加载之前就已经获取了值的,然后页面加载的时候会将获取的值拼接到页面上。
     EL表达式有个大特点:就是,当你没有获取到东西的时候,在浏览器页面不会显示null,而是啥都不显示。(而如果你在jsp前端页面使用request.getParameter("hhhhh");方法来获取的话,即使没有获取到东西,也会在页面显示null这个符号)
    

    4.2 JSTL标签(最常用的是C标签也就是核心标签库,实际上还有fmt这个格式化标签库)

     4.2.1 需要先导入JSTL中相应的标签库。进行导入操作的代码如下:
     	  <%@ taglib prefix='c' uri="http://java.sun.com/jsp/jstl/core" %>
     	  tips:一定要放在jsp前端页面中尽可能靠前的位置
     	  tips:如果jsp页面报错,并显示不支持JSTL标签库,说明可能是缺少相应的jar包,往项目导入standard.jar包和jstl.jar包。(这些jar包一般来说MyEclipse中都是内置有的,而eclipse则不一定了。)
     	
     4.2.2 判断
     	<c:if test="判断条件"></c:if>
     	<c:choose>
     	        <c:when test="${fenye.pages<=10}"> 
     		        		<c:set  var="begin"  value="1"/>   
     		        		<c:set  var="end"    value="${fenye.pages}"/> 
     		    </c:when>
     			<c:otherwise >
     					    <c:set  var="begin"  value="${fenye.pageNo-5}"/>   
     		            	<c:set  var="end"    value="${fenye.pageNo+4}"/> 
     			</c:otherwise>
     	</c:choose>
     	注意:<c:choose>c标签就相当于java代码中的if/else if/else结构
     	
     4.2.3 循环
     	<c:forEach></c:forEach>
     	该标签中的属性常用的有如下这些
     	var="e" - 循环中间变量
     	items="xx" - 要循环哪个集合(List)或数组
     	varStatus="i" - 可以自动生成编号或角标
     		i.count
     		i.index
    

监听器Listener案例:防止多人同时在线一个账号,因为涉及到了多个浏览器,这时使用session就不合适了。所以就要使用application了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值