写后记:
2017/11/22
最近因为吉趣项目需要做校园网的课表、成绩查询功能,不得不使用模拟请求,去请求uims教务系统的信息。
获取后需要放在一个连有校园网(外网无法查询)的服务器上,然后我们通过ajax请求服务器,服务器返回它在uims查完的信息。
我们用的是wamp安装的apache服务器,然后我就把.py页面放进去了,结果一直获取不到url请求,
直到安装了flask框架。
然后按照配置了 WSGI 。
之前一直理解不了原理,现在总算是知其所以然了。
感谢 吉林大学 计算机学院 的 姜老师
JAVA EE:标准开发架构,主要用于企业级应用程序的开发
第一部分 Internet 与 Web 应用
一、web开发简介
发展:静态web->动态web
静态web动态web实现方式:php/jsp/cgi(公共网关接口)
动态web主要特点:
1.交互式;2.数据上传、下载、查询、存储;3.信息实时传送
企业开发架构:
二、HTML简介
HTML:一种标记语言,通过嵌入代码或标记来表明文本格式
基本框架:
<html>
<head>
<meta charset="utf-8">
<title>your title</title>
</head>
<body>
<--your content -->
</body>
</html>
表单:
< form action="xxx.jsp" method=""> //递交请求的页面
< input type="submit" name="Submit" > //递交按钮和按钮的索引
< input type="text" name="password">
< input type="text" name="name">
< /form>
post和get的区别
get:拼接在页面url中,限制255个字符
post:不拼接,不限制
三、Tomcat 服务器
路径:
四、简单的程序 html+jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"> //按照学校的尿性肯定考试要默这句
<html>
<body>
<%
out.println("<h1>并不是很有趣的JavaEE</h1>")
%>
</body>
</html>
第二部分 Servlet
一、Servlet:Java对CGI程序的实现、多线程处理。服务器端程序。
//其实就是负责处理http请求的程序,服务器收到请求后,将请求交给servlet类处理。
//servlet 处理完结果之后会交由服务器返回客户端
二、servlet实现
实现HttpServletResponse
客户端每次访问一个支持HTTP的Servlet程序时,
处理请求:
Servlet引擎都将调用Servlet的service方法来进行处理。
service方法接受两个参数,
一个是用于封装HTTP请求消息的对象,其类型为HttpServletRequest,
另一个是代表HTTP响应消息的对象,其类型为HttpServletResponse。
返回响应:
调用HttpServletResponse对象的getWriter方法可以获得一个文本输出流对象,向这个流对象中写入的数据将作为HTTP响应消息的实体内容部分发送给客户端。
三、创建servlet
1.xxxx extends HttpServlet //集成httpservlet类
2.override [doGet],[doPost] //重写httpservlet类的 处理get、post 请求的方法
3.将这个类的文件拷贝到web-inf/classes
web-inf文件夹只允许服务器访问,放入该文件夹的文件,用户无法通过输入url访问(用户端访问)
4.在web.xml 中配置 servlet路径
直接爬老师的课件了 = =概括//考试时候这样写
import java.io.*
import javax.servlet.*
public class myServlet extends HttpServlet{
public void doGet( HttpServletRequest req,HttpServletResponse resp )thirows IOException{
PrintWriter out = resp.getWriter();
out.println("<h1>hahaha</h1>")
}
}
配置
<servlet>
< servlet-name >hello</ servlet-name >
< servlet-class> org.lxh.servletdemo.HelloServlet < servlet-class>
</servlet>
<servlet-mapping>
< servlet-name >hello< /servlet- name > // 映射路径,出现下列路径时跳转到servlet
< url-pattern>/hello.asp< url-pattern >
</servlet-mapping>
将表单的请求交由servlet类处理
表单
<form action=" myServlet " method="GET"> //递交请求的页面
< input type="submit" name="Submit" > //递交按钮和按钮的索引
< input type="text" name="password">
< input type="text" name="Name">
< /form>
public class myServlet extents HttpSetvlet{
public void doGet(HttpServletRequest rq,HttpServletResponse resp) throw IOException{
string password= rq.getParameter("password");
string Name= rq.getParameter("Name");
PrintWriter out =resp.getWriter();
out.println("<h1>"+ password +"</h1>")
}
}
四、Servlet生命周期
servlet容器:tomcat等,控制servlet类的生命周期。
什么时候实例化:第一次使用,或者web容器启动的时候(配置);
初始化:init()方法
销毁:destory()方法 //销毁前调用
servlet的部署:
Cookie: 把用户的数据写给用户的浏览器(客户端)
Session: 用户的数据写到用户独占的session中(服务器端);需要客户端的 cookie 协作;会话,生命周期是一段周期(不访问超过一定市场,服务器将其销毁)
Application:这个就不多谈了,不理解
使用:
get / setAttribute 方法存键值对
五、获取初始化 = =我也不知道怎么用,先记着
//写在 myServlet里面
public void init(ServletConfig config) throws ServletException{
this.initParam=config.getInitParameter("ref") ;//接收初始化参数
}
六、获取其他初始化对象
//写在 myServlet doGet/doPost里面
(HttpServletRequest req,HttpServletResponse resp)throw IOExceotion
{
//Session
HttpSession ses = req.getSession();
ses.getAttribute("username");//从回话去键值
ses.setAttribute("name","朱陈超");//这个就不多谈了
//获取application
ServletContext application = super.getServletContext();
System.out.println (application.getRealPath("/"));
}
七、Servlet跳转
1.客户端跳转
使用HttpServletResponse接口的sendRedirect()方法;
此跳转只能传递session范围的属性,而无法传递request范围的属性;
resp.sendRedirect();
在页面中接收session属性 //ppt中忽然插入这个,猝不及防= =
<%@ page contentType="text/html" pageEncoding="utf-8">//页面配置
<html>
<body>
<h1><%=session.getAttribute("name") %></h1>
</body>
</html>
2.服务器跳转 //记不住,这几分不要了
RequestDispatcher rd = req.getRequestDispatcher("get_info.jsp");
rd.forward(req,resp) ;//服务器跳转
敲代码的时候百度
八、servlet处理文件的操作
1.文件读取
doGet(HttpServletRequest req,HttpServletResponse resp){
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter out = resp.getWriter();
String filename = "afile.txt";
String realPath = req.getRealPath(filename);
File file = new File(realPath);
if(file.exists()){
FileReader reader = new FileReader(file);
BufferedReader br = new BufferedReader(reader);
String line = null;
while(line=br.readline()!=null){
out.print("<h3>"+line+"</h3>");
}
}else{
//文件不存在
}
}
2.文件写
doGet(HttpServletRequest req,HttpServletResponse resp){
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter out = resp.getWriter();
String filename = "afile.txt";
String realPath = req.getRealPath(filename);
File file = new File(realPath);
FileWriter writer = new FileWriter (file);
BufferedWriter bfw=new BufferedWriter( writer );
bfw,write(" l write");
bfw.flush();
bfw.close();
writer.close
}
3.文件上传 // 真复杂
//表单
<form method="post" action="FileUpload" ENCTYPE="multipart/form-data">
文件:<input type="file" name="file">
<input type="submit" value="上传" name="submit">
</form>
//servlet-doPost
//import java.io.*
//import javax.servlet.*
//import org.apache.commons.fileupload.*
public void doPost(HttpServletRequest req,HttpServletResponse resp){
boolen isMultipart = ServletFileUpload.isMultipartContent(request);//请求是不是上传文件
if( isMultipart ){
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
lterator items;
try{
items = upload.parseRequest(request).iterator();//用迭代器解析request请求中的信息
while(item.hashNext()){
FileItem item=(Fileltem)items.next();
if(!item.isFormFiels){
//取出上传文件的文件名
String name = item.getName();
String fileName = name.substring(name.lastIndexOf("\\")+1,name.length());
String path=request.getRealPath("file")+File.separatorChar+fileName;
//上传
File uploadFile = new File(Path)
item.write(uploadedFile);
}
}
}
}
}
第三部分 JSP
JSP:动态网站技术标准,它是在传统的HTML网页文档中加入能够生成动态内容的可执行Java程序片段和JSP标记所构成的代码
!浏览器请求jsp文件时候,先由服务器执行文件的程序段,执行完毕后再发送给浏览器。
一、例子
<%@ page contentType="text/html" ; charset="Utf-8" %>//配置页面
<%@ page language="java" %>
<%! String s1,s2,s3,s4>//定义<%! xxxxx %>
<html>
<body>
<h1>JSP<h2>
<% s1="1";s2="2";s3="3";out.println(s1+s2+s3) %>
</body>
</html>
二、应用方式
JSP+Servlet+JDBC+JavaBeans
<%
String name="zhucc"//requset.getParameter("Name");
if(name! = null)
{
%>
//这里面可以些html标签与<%=name%>的赋值、<%%>操作
<%
}else{
%>
//这里面可以些html标签与<%=name%>的赋值、<%%>操作
<%
}
%>
注释
<-- content --> //用户端可以看到(html注释)
<%-- content --%>//用户端看不到(jsp注释)
三、<jsp : forward>
强制调转请求到另外的文件如JSP、Servlet或者是静态页面来处理并将当前页面的执行停止。
1.写法
//不传递参数
<jsp:forward page=" {文件路径} ">
//传递参数
<jsp:forward page=" {文件路径} ">
<jsp:param name="KEY" value="VALUR" />
...//多个参数
</jsp:forward>
2.和response.sendRedirect的区别
<jsp : forward>
1.服务器内部转换
2.使用同一个请求//就是说两个页面可以从request.getParameter获取同样的参数
3.跳转后不再执行后面的语句
4.速度快
response.sendRedirect
1.需要在客户端往返
2.不同的请求
3.继续执行后面的语句
4.速度慢
四、包含操作 include
1.<%@include> 静态包含
在JSP中动态地包含入一个静态或动态的页面资源,当JSP执行时,将所包含的资源进行处理,并将这些页面如同在同一个JSP中一样地运行、显示、输出。
<html>
<body>
<h1>Title</h1>
<%@include file="xxxx.jsp" %>
</body>
</html>
2.<jsp:include> 动态包含
动态包含语句,可以自动区分被包含的页面是静态还是动态。
//先分别处理被包含的页面(jsp 动态页面),再将结果包含进来
不传递参数
<jsp:include page=" { 文件路径 } " flush=“true|fasle”>
传递参数
< jsp:include page=" { 文件路径 } " flush=“true|fasle”>
<jsp:param name="KEY" value="VALUE">
</jsp:include
五、<jsp:plugin>
在客户端显示和执行Java,Applet或JavaBean,该动作可以自动检测客户端浏览器的类型,当一个plugin不能被加载时该动作还可以自动下载和安装该plugin,并使用动作将文本插入到页面中。该动作还支持很多属性
//不写这个了,暂时没体会到有啥用,需要的时候再查
六、JAVABeam
1.操作
<jsp:params>:为Java applet 或JavaBean 定义一组参数
<jsp:useBean>:定义一个在JSP中使用的JavaBean
<jsp:getProperty>:从指定的JavaBea中获取一个属性值
<jsp:setProperty>:设定一个JavaBean实例的某个属性值
2.示例
<jsp:useBean id = " formMail " class = " util.formMail " >
<jsp:setProperty name="formMail" property="*" />
</jsp:useBean>
七、操作错误页面
<%@page errorPage="error.jsp" %> //程序一单出现错误则跳转到该页面
error.jsp
<%@page languag="java" contentType="text/html" pageEncoding="utf-8" %>
<%@page isErrorPage="true" %>
<h1>程序出现了错误</h1>
八、JSP内置对象的四种属性范围
pageContext: 只在一个页面中保存属性,跳转后无效
request: 只在一次请求中保存,服务器跳转后依然有效
session: 在一次会话范围中无论如何跳转都有效,但是新开浏览器无效
application: 在整个服务器上保存,所有的用户都可以使用
1.操作
public void setAttribute(String keyName,Object keyValue);//添加
public Object getAttribute(String name);//获取
Date aDay=(Date)pageContext.getAttribute("birthday");
public void removeAttribute(String name);//删除
pageContext 使用<jsp:forward page="">是不好使的,因为只能当前页面使用
//不是很理解,那用变量不是都可以解决嘛,有啥作用?????
至于request和session和application,很好理解,就不多谈了。
(href 跳转 属于客户端调准, request 不是同一个)
2.表单传参,request获取
<form action = "xxx.jsp" method = "post">
<input type="text" name="uname">
<input type="submit" value="递交">
</form>
//我的xxx.jsp
<%
request.setCharacterEncoding("utf-8");
var name =request.getParameter("name");
%>
<h1><%=name%></h1>
九、response常用方法
1.设置响应头
response.setHeader("KEY","VALUE");
2.跳转
response.sendRedirect(""hello.html);
3.操作Cookie
//创建cookie
<%
Cookie c1 = new Cookie("Name","ZCC");//创建cookie
c1.setMaxAge(60);//设置cookie保存60秒;
response.addCookie(c1);//向客户端增加cookie
%>
//获取cookie
<%
Cookie c[]=request.getCookie()://获取全部cookie
c[0].getName();
c[0].getValue();
%>
十、Session常用方法
当一个用户连接到服务器之后,服务器会自动为此session自动分配一个不会重复的Session Id,服务器依靠这些不同的Session Id来区分每一个不同的用户。
1.获取session id
string id = session.getId();
2.是否是新的session (新用户)
boolean isNew = session.isNew();
3...取得用户创建时间什么的
就不多谈了,用到baidu
十一、servlet与jsp 的开发模式 // 究极盗图
1.Model 1
2.Model 2
第四部分JDBC
一、JDBC的任务
1.同一个数据库建立连接
2.向数据库发送SQL语句
3.处理数据库返还的结果
二、JDBC的驱动管理器
驱动管理器是【DriverManage类】,它在数据库和用户驱动器间工作,在数据库和适合的驱动器间建立联系。真正进行数据库连接的是【Driver】类中的【connect()】方法。
三、用SQL指令操作数据库
1.载入JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");//所选定驱动程序的名称
2.连接到DBMS
getConnection();
getConnection(String url);
getConnection(String url,Properties info);
getConnection(String url,String user,String password);
String url="jdbc:mysql:// localhost:3306/graduation_design"
3.创建并执行语句
通过Statement对象发送SQL语句,返回查询结果。
Statement对象用于执行简单的SQL语句,也就是没有参数的SQL语句;
PreparedStatement对象用于执行需要重复执行的预编译过的SQL语句;
CallableStatement对象用于执行一个数据库的存储过程。
//创建Statement
Statement stmt = connect.createStatment();
//
executeQuery( String sql );//执行给定的SQL查询语句,返回ResultSet对象。
executeUpdate( String sql );//执行给定的SQL更新语句,返回INSERT、UPDATE或DELETE语句的行计数,或者返回0表示不返回任何内容。
execute( String sql ); //执行给定的SQL查询语句,该语句可能返回多个结果。
//关闭
stmt.close();
4.处理DBMS返回的数据
JDBC接收查询结果是通过ResultSet对象实现的//结果集
用户可以通过get方法来访问
//元数据:数据信息
DatabaseMetaData dbmd=connection.getMetaData();
5.终止与DBMS的连接
connection.close();
6.DEMO
String diver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/graduation_design"
String user="root";
String password="";
//第一步:载入JDBC驱动程序
Class.forName(driver);
//第二步:连接到数据库
Connection connect=DriverManage.getConnection(url,user,password);
//第三部:创建Statement对象
Statement stmt = connect.createStatement();
//获取查询结果
String query = “SELECT * FROM namelist”;
ResultSet result =stmt.executeQuery(query);
ResultSetMetaData md=result.getMetaData();
StringBuffer s =new StringBuffer();
for(int i=1;i<=md.getColumnCount;i++){
s.append(md.getColumnName(i));
}
//关闭连接
result.close();
stmt.close();
connect.close();
第五部分 JavaBean概述
javaBean:简单地说JavaBean就是普通的Java类,在遵循JavaBean特定规范下对功能进行封装
一、demo
web开发标准目录结构public class SimpleBean(){
private string name;
public void setName(String name){this.name=name}
public String getName(){return this.name}
}
//每一个属性都要有public 的 setter和getter
javaBean保存着 classes文件夹里面
二、jsp使用javaBean
1.import
<%@page import="cn.mldn.*" %>
<%
SimpleBean simple = new SimpleBean() ;
simple.setName("李兴华") ;
%>
<%=simple.getName()%>
2.使用<jsp:useBean>
<jsp:useBean id="实例化对象名称" scope="保存范围" class="包.类名" />
<jsp:useBean id="simple" scope="page" class="cn.mldn.lxh.demo.SimpleBean" />
<%
simple.setName("ZCC");
%>
三、javaBean与表单
1.表单
<form action="input_bean.jsp" method="post">
<input type="text" name="name">
<input type="submit" value="递交">
</form>
2.jsp接收表单内容
<%@page import="cn.mldx.lxh.demo.*" pageEncoding="utf-8" %>
<% request.setCharacterEncoding("utf-8")%>
<%
SimpleBean simple=new SimpleBean();
simple.setName(request.getParameter("name"));
%>
3.设置属性的参数
<jsp:useBean id="simple" scope="page" class="cn.mldn.lxh.demo.SimpleBean"/>
<jsp:setProperty name="simple" property="name" param="name"/>
4.取得属性
<h1>姓名: < jsp:getProperty name="simple" property="age"/> <h1>
5.删除javaBean
1)删除page范围
pageContext.removeAttribute(JAVABEAN的名称);
2)删除request、session、application范围
request.removeAttribute(JAVABEAN的名称);
session .removeAttribute(JAVABEAN的名称);
application .removeAttribute(JAVABEAN的名称);
—— END ——
网友评论