精华内容
下载资源
问答
  • AndroidStudio+Tomcat进行学生登录并进行学生信息的管理——增删改查 本项目需要在androidStudio上面和eclisp上面分别创建相应的项目,所以这里给大家整体分为两个大步骤进行介绍,就让我们往下看吧,觉得可以的可以...

    AndroidStudio+Tomcat进行学生登录并进行学生信息的管理——增删改查

    本项目需要在androidStudio上面和eclisp上面分别创建相应的项目,所以这里给大家整体分为两个大步骤进行介绍,就让我们往下看吧,觉得可以的可以留言对林君进行支持,有不懂的可以进行留言,林君给你解答,有不同观点的也欢迎大家留言进行讨论哦!

    一、AndroidStudio端的步骤如下所示:

    首先我们需要的是在AndroidStudio端创建学生信息管理的项目studentSystemWeb,相信大家对于项目的创建知道怎么做,这里就不进行项目的创建的步骤
    因为需要网络连接,所以我们首要的就是进行网络许可的配置,如下:

    <uses-permission android:name="android.permission.INTERNET" />
    

    在android项目中的配置文件“Androidmanifest.xml”中加入以上的入网许可!
    1、既然是对学生进行管理,那么首先必要的步骤是创建一个Student学生的java类,这个是自己重新new一个java类的步骤哦_

    import java.io.Serializable;
    public class Student  implements Serializable {
        private String name;//姓名
        private String id;//学号
        private String major;//专业
        private String age;//年龄
        private String sex;//性别
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public Student(String id, String name, String sex, String age, String major) {
            this.id=id;
            this.name=name;
            this.sex=sex;
            this.age=age;
            this.major=major;
        }
        public Student(){
        }
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public String getName(){
            return name;
        }
        public String getMajor(){
            return major;
        }
        public void setName(String name){
            this.name=name;
        }
        public void setMajor(String major){
            this.major=major;
        }
    }
    

    2、接下来我们进行登录界面的设置,登录界面的设定通过自己的个人喜好进行设定,这里当然只献上林君自己的界面设计的XML代码啦,如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_height="match_parent"
        android:background="@drawable/back6"
        android:id="@+id/back3"
        tools:context=".MainActivity">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:textSize="20dp"
            android:text="欢迎进入学生信息管理系统"
            android:gravity="center"
            android:textColor="#FFAB00"/>
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="235dp">
            <ImageView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/back"
                android:src="@drawable/pto4" />
            <ImageView
                android:layout_width="130dp"
                android:layout_height="130dp"
                android:id="@+id/pto"
                android:layout_marginTop="70dp"
                android:layout_marginLeft="5dp"
                android:src="@drawable/pto"/>
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/userName"
                android:layout_marginTop="70dp"
                android:hint="@string/user"
                android:layout_marginLeft="5dp"
                android:inputType="text"
                android:layout_toRightOf="@id/pto"/>
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/password"
                android:hint="@string/passward"
                android:inputType="textPassword"
                android:layout_marginTop="120dp"
                android:layout_marginLeft="5dp"
                android:layout_toRightOf="@id/pto"/>
            <CheckBox
                android:layout_width="90dp"
                android:layout_height="wrap_content"
                android:id="@+id/remember"
                android:layout_toRightOf="@id/pto"
                android:layout_marginLeft="5dp"
                android:text="记住密码"
                android:layout_below="@+id/password"/>
            <CheckBox
                android:layout_width="90dp"
                android:layout_height="wrap_content"
                android:layout_below="@+id/password"
                android:id="@+id/right1"
                android:layout_toRightOf="@+id/remember"
                android:text="自动登录"
                />
        </RelativeLayout>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="登录"
            android:id="@+id/login"/>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <TextView
                android:layout_width="match_parent"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:textColor="#FF4081"
                android:text="忘记密码?"/>
            <TextView
                android:layout_width="match_parent"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:textColor="#FF4081"
                android:gravity="right"
                android:text="注册账号"/>
        </LinearLayout>
    </LinearLayout>
    

    我们可以知道上面有很多隐藏的string,下面图片中将进行给出,也就是hint或者你给输入框设置的提示语言的东西,通过如下的方式,可以简化以后修改的时间,以后修改通过在这里修改就ok了,不必在代码中寻找然后修改。
    在这里插入图片描述
    以下就是我自己的界面设计的图像所示

    3、有了登录界面设计的设计,那么肯定会有相应的实现我们界面设计的java代码,登录界面的java代码如下所示:
    3-1、既然是通过Tomcat服务器进行数据的获取,那么我们需要建立一个连接Tomcat服务器的java类–新建一个java类名字为HttpUtilsHttpURLConnection,代码如下

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.util.Map;
    /**
     * Created by cool on 2019/12/8.
     */
    public class HttpUtilsHttpURLConnection {
        public static String BASE_URL= "http://192.168.43.128:8080/JSPStudy";//这里的ip地址,设置为自己网络的ip地址,这里注意,eclisp也就是电脑上面的网络应该和手机连接的网处于同一个网络。JSPStudy是自己eclisp上面的学生信息管理的java项目
        /*
         * urlStr:网址
         * parms:提交数据
         * return:网页源码
         * */
        public static  String getContextByHttp(String urlStr,Map<String,String> parms){
            StringBuilder result = new StringBuilder();//StringBuilder用于单线程多字符串拼接
            try {
                URL url = new URL(urlStr);
                HttpURLConnection connection= (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("POST");
                connection.setReadTimeout(10000);
                connection.setConnectTimeout(10000);
                connection.setDoInput(true);
                connection.setDoOutput(true);
                connection.setInstanceFollowRedirects(true);
                OutputStream outputStream = connection.getOutputStream();
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream,"UTF-8"));
                writer.write(getStringFromOutput(parms));
                System.out.println(getStringFromOutput(parms));
                System.out.println(parms);
                writer.flush();
                writer.close();
                outputStream.close();
                if(connection.getResponseCode() == HttpURLConnection.HTTP_OK){
                    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                    String temp;
                    while((temp = reader.readLine()) != null) {
                        result.append(temp);
                    }
                }else{
                    return "error:0";
                }
                connection.disconnect();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return result.toString();
    
        }
        /**
         * 将map转换成key1=value1&key2=value2的形式
         * @param map
         * @return
         * @throws UnsupportedEncodingException
         */
        private static String getStringFromOutput(Map<String,String> map) throws UnsupportedEncodingException {
            StringBuilder sb = new StringBuilder();//StringBuilder用于单线程多字符串拼接
            boolean isFirst = true;
            for(Map.Entry<String,String> entry:map.entrySet()){
                if(isFirst)
                    isFirst = false;
                else
                    sb.append("&");
                sb.append(URLEncoder.encode(entry.getKey(),"UTF-8"));
                sb.append("=");
                sb.append(URLEncoder.encode(entry.getValue(),"UTF-8"));
            }
            return sb.toString();
        }
    
        /**
         * 数据请求的方法
         */
    }
    

    3-2、实现登录界面设计的的java代码(mainActivity)如下所示:

    import androidx.appcompat.app.AppCompatActivity;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.EditText;
    import android.widget.Toast;
    import org.json.JSONException;
    import org.json.JSONObject;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    public class MainActivity extends AppCompatActivity {
        private SharedPreferences loginPreference;
        private EditText userName1;
        private EditText password1;
        private CheckBox remember;
        private Button login;
        public static ArrayList<Student> students = new ArrayList<>();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            View v = findViewById(R.id.back3);
            v.getBackground().setAlpha(210);
            userName1 = (EditText) findViewById(R.id.userName);
            password1 = (EditText) findViewById(R.id.password);
            remember = (CheckBox) findViewById(R.id.remember);
            login = (Button) findViewById(R.id.login);
            loginPreference = getSharedPreferences("login", MODE_PRIVATE);
            ///要通过loginPreference去记录三个参数(checked,userName,password)
            boolean cheched = loginPreference.getBoolean("checked", false);
            if (cheched) {
                Map<String, Object> m = readLogin();
                if (m != null) {
                    userName1.setText((CharSequence) m.get("userName"));
                    password1.setText((CharSequence) m.get("password"));
                    remember.setChecked(cheched);
                }
            }
            login.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    configLoginInfo(remember.isChecked());
                    login();
                }
            });
        }
        public void configLoginInfo(boolean checked) {
            SharedPreferences.Editor editor = loginPreference.edit();
            editor.putBoolean("checked", remember.isChecked());
            if (checked) {
                editor.putString("userName", userName1.getText().toString());
                editor.putString("password", password1.getText().toString());
            } else {
                editor.remove("userName").remove("password");
            }
            editor.commit();
        }
        /**
         * 读登录信息
         *
         * @return
         */
        public Map<String, Object> readLogin() {
            Map<String, Object> m = new HashMap<>();
            String userName = loginPreference.getString("userName", "");
            String password = loginPreference.getString("password", "");
            m.put("userName", userName);
            m.put("password", password);
            return m;
        }
        private void login() {
            new Thread() {
                @Override
                public void run() {
                    System.out.println("登录成功");
                    Map<String, String> params = new HashMap<String, String>();
                    String userName = userName1.getText().toString();
                    String password = password1.getText().toString();
                    String url = HttpUtilsHttpURLConnection.BASE_URL + "/login";
                    params.put("password", password);
                    params.put("userName", userName);
                    String result = HttpUtilsHttpURLConnection.getContextByHttp(url,params);
                        ///返回JSON
                    Message msg = new Message();
                    msg.what = 0x11;
                    Bundle data = new Bundle();
                    data.putString("result", result);
                    msg.setData(data);
                    handler.sendMessage(msg);
                }
                Handler handler=new Handler() {
                    @Override
                    public void handleMessage(Message msg) {
                        if(msg.what==0x11){
                            Bundle data = msg.getData();
                            String key = data.getString("result");//得到json返回的json
                            System.out.println(key);
                            try {
                                JSONObject json= new JSONObject(key);
                                int code = Integer.parseInt(json.getString("code"));
                                System.out.println(code);
                                if (code==1) {
                                    Toast.makeText(MainActivity.this, "登录成功!", Toast.LENGTH_LONG).show();
                                    Intent intent=new Intent();
                                    intent.setClass(MainActivity.this,studentList.class);
                                    startActivity(intent);
                                } else {
                                    Toast.makeText(MainActivity.this, "用户名或密码错误!", Toast.LENGTH_LONG).show();
                                }
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                };
            }.start();
        }
    
    }
    

    4、登录界面进入后,我们进入学生信息获取的界面,界面我们需要利用listView进行学生信息的展示,包括学生属性的所有,所以我们首先得自定义我们自己的适配器,界面设计的XML代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".studentList">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="学生信息如下:"/>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <EditText
                android:layout_width="300dp"
                android:layout_height="50dp"
                android:layout_weight="1"
                android:hint="学生信息查找"
                android:id="@+id/find"/>
            <ImageButton
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_weight="1"
                android:id="@+id/search"
                android:background="@drawable/find1"/>
        </LinearLayout>
        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/listView"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="填加"
            android:id="@+id/addStudent"/>
    </LinearLayout>
    

    界面的设计效果:
    在这里插入图片描述
    4-1、同样,我们需要新建一个java类, StuAdapter,里面为我们自定义适配器的java代码,如下:

    import android.content.Context;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    import java.util.List;
    public class StuAdapter extends BaseAdapter implements View.OnClickListener {
        private List <Student>stuDates;
        private Context stuContext;
        private InnerItemOnClickListener myListener;
        public StuAdapter(Context context,List<Student>list){
            this.stuContext=context;
            this.stuDates=list;
        }
        @Override
        public int getCount() {
            return stuDates.size();
        }
        @Override
        public Object getItem(int position) {
            return stuDates.get(position);
        }
        @Override
        public long getItemId(int position) {
            Student student=(Student)stuDates.get(position);
            return position;
        }
        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            View stuView=View.inflate(stuContext,R.layout.studentweb_item,null);
            TextView stuName=stuView.findViewById(R.id.student_name);
            TextView stuSex=stuView.findViewById(R.id.student_sex);
            TextView stuAge=stuView.findViewById(R.id.student_age);
            TextView stuId=stuView.findViewById(R.id.student_id);
            TextView stuMajor=stuView.findViewById(R.id.student_major);
            ImageView edit=stuView.findViewById(R.id.student_edit);
            ImageView delete=stuView.findViewById(R.id.student_delete);
            Student student=(Student)stuDates.get(i);
            stuName.setText(student.getName());
            stuSex.setText(student.getSex());
            stuAge.setText(student.getAge());
            stuId.setText(student.getId());
            stuMajor.setText(student.getMajor());
            edit.setImageResource(R.drawable.edit);
            delete.setImageResource(R.drawable.delete);
            edit.setOnClickListener(this);
            delete.setOnClickListener(this);
            edit.setTag(i);
            delete.setTag(i);
            return stuView;
        }
        interface InnerItemOnClickListener {
            abstract void itemClick(View view);
        }
        public void setOnInnerItemOnClickListener(InnerItemOnClickListener listener){
            this.myListener=listener;
        }
        @Override
        public void onClick(View view) {
            myListener.itemClick(view);
        }
    }
    

    4-2、有了自定义的适配器之后,我们就可以对学生信息列表进行实现了,对应就是信息列表界面的java代码,如下:

    package com.cqjtu.studentsystemweb;
    import androidx.appcompat.app.AlertDialog;
    import androidx.appcompat.app.AppCompatActivity;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageButton;
    import android.widget.ListView;
    import android.widget.Toast;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import static com.cqjtu.studentsystemweb.MainActivity.students;
    public class studentList extends AppCompatActivity implements StuAdapter.InnerItemOnClickListener
            , AdapterView.OnItemClickListener, View.OnClickListener{
        private ListView listView;
        private Button add;
        public static StuAdapter adapter;
        private ImageButton search;
        private EditText find1;
        public static List<Student>find;
        private List<Student>show;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_student_list);
            listView = findViewById(R.id.listView);
            add = (Button) findViewById(R.id.addStudent);
            add.setOnClickListener(this);
            find1=(EditText)findViewById(R.id.find);
            search=(ImageButton)findViewById(R.id.search);
            search.setOnClickListener(this);
            students.clear();
            if (find!=null) {
                find.clear();
            }
            new Thread() {
                @Override
                public void run() {
                    String url = HttpUtilsHttpURLConnection.BASE_URL + "/studentQuery";
                    Map<String, String> params = new HashMap<String, String>();
                    params.put("flag", "1");
                    params.put("key", "");
                    String result = HttpUtilsHttpURLConnection.getContextByHttp(url, params);
                    ///返回JSON
                    Message msg = new Message();
                    msg.what = 0x11;
                    Bundle data = new Bundle();
                    data.putString("result", result);
                    System.out.println(result);
                    msg.setData(data);
                    handler.sendMessage(msg);
                }
                Handler handler = new Handler() {
                    @Override
                    public void handleMessage(Message msg) {
                        if (msg.what == 0x11) {
                            Bundle data = msg.getData();
                            String key = data.getString("result");//得到json返回的json
                            try {
                                JSONObject json = new JSONObject(key);
                                JSONArray jsonArray = new JSONArray(json.get("students").toString());
                                for (int i = 0; i < jsonArray.length(); i++) {
                                    JSONObject jsonObject = (JSONObject) jsonArray.get(i);
                                    String id = jsonObject.get("no").toString();
                                    String name = (String) jsonObject.get("name");
                                    String sex = (String) jsonObject.get("sex");
                                    String age = jsonObject.get("age").toString();
                                    String major = (String) jsonObject.get("major");
                                    Student s = new Student(id, name, sex, age, major);
                                    students.add(s);
                                }
                                adapter = new StuAdapter(studentList.this, students);
                                listView.setAdapter(adapter);
                                adapter.setOnInnerItemOnClickListener(studentList.this);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                };
            }.start();
            listView.setOnItemClickListener(this);
        }
        @Override
        public void onClick(View view) {
            Intent intent=new Intent();
            if (view.getId()==R.id.addStudent){
                intent.setClass(studentList.this,addStudent.class);
                startActivity(intent);
            }else if(view.getId()==R.id.search){
                final String key=find1.getText().toString();
                if (isEmpty(key)) {
                    Toast.makeText(this,"查找条件不能为空",Toast.LENGTH_SHORT).show();
                    return;
                }
                find=new ArrayList<Student>();
                new Thread() {
                    @Override
                    public void run() {
                        String url = HttpUtilsHttpURLConnection.BASE_URL + "/studentQuery";
                        Map<String, String> params = new HashMap<String, String>();
                        params.put("flag", "1");
                        params.put("key",key);
                        String result = HttpUtilsHttpURLConnection.getContextByHttp(url, params);
                        ///返回JSON
                        Message msg = new Message();
                        msg.what = 0x11;
                        Bundle data = new Bundle();
                        data.putString("result", result);
                        System.out.println(result);
                        msg.setData(data);
                        handler.sendMessage(msg);
                    }
                    Handler handler = new Handler() {
                        @Override
                        public void handleMessage(Message msg) {
                            if (msg.what == 0x11) {
                                Bundle data = msg.getData();
                                String key = data.getString("result");//得到json返回的json
                                try {
                                    JSONObject json = new JSONObject(key);
                                    JSONArray jsonArray = new JSONArray(json.get("students").toString());
                                    for (int i = 0; i < jsonArray.length(); i++) {
                                        JSONObject jsonObject = (JSONObject) jsonArray.get(i);
                                        String id = jsonObject.get("no").toString();
                                        String name = (String) jsonObject.get("name");
                                        String sex = (String) jsonObject.get("sex");
                                        String age = jsonObject.get("age").toString();
                                        String major = (String) jsonObject.get("major");
                                        Student s = new Student(id, name, sex, age, major);
                                        find.add(s);
                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    };
                }.start();
                intent.setClass(studentList.this,searchlist.class);
                intent.putExtra("find",(Serializable)find);
                startActivity(intent);
            }
        }
        private boolean isEmpty(String str) {
            return str.length()==0||null==str;
        }
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            show=new ArrayList<Student>();
            Intent intent=new Intent();
            String id=students.get(i).getId();
            String name=students.get(i).getName();
            String sex=students.get(i).getSex();
            String age=students.get(i).getAge();
            String major=students.get(i).getMajor();
            Student student=new Student(id,name,sex,age,major);
            show.add(student);
            intent.setClass(studentList.this,delite.class);
            intent.putExtra("show",(Serializable)show);
            startActivity(intent);
        }
        @Override
        public void itemClick(View view) {
            Intent intent=new Intent();
            switch (view.getId()){
                case R.id.student_edit:
                    int p=(Integer) view.getTag();
                    intent.setClass(this,edit.class);
                    sentI(intent,p);
                    startActivity(intent);
                    break;
                case R.id.student_delete:
                    final int k=(Integer)view.getTag();
                    new AlertDialog.Builder( this )
                            .setIcon( R.drawable.student1)
                            .setTitle( "删除对话框" )
                            .setMessage( "确定删除学生:"+students.get(k).getName()+"?" )
                            .setNegativeButton( "取消",null )
                            .setPositiveButton( "确定", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    final String no=students.get(k).getId();
                                    new Thread() {
                                        @Override
                                        public void run() {
                                            String url = HttpUtilsHttpURLConnection.BASE_URL + "/studentDelServlet";
                                            Map<String, String> params = new HashMap<String, String>();
                                            params.put("no", no);
                                            String result = HttpUtilsHttpURLConnection.getContextByHttp(url, params);
                                            System.out.println(result);
                                        }
                                    }.start();
                                    students.remove(k);
                                    Toast.makeText(studentList.this,"删除成功",Toast.LENGTH_SHORT).show();
                                    adapter.notifyDataSetChanged();
                                }
                            } ).show();
                    break;
            }
        }
        public void sentI(Intent intent,int p){
            intent.putExtra("p",p);
        }
    }
    

    5、新创建一个activity页面,实现搜索功能,如下介绍
    5-1、搜索界面的的界面设计的XML代码如下,将搜索到的学生信息展示到此页面上:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_height="match_parent"
        tools:context=".studentList">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="您搜索的信息如下:"/>
        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:descendantFocusability="blocksDescendants"
            android:id="@+id/studentList1"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="返回"
            android:id="@+id/back"/>
    </LinearLayout>
    

    5-2、实现搜索功能对应的java代码如下:

    import androidx.appcompat.app.AppCompatActivity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.Button;
    import android.widget.ListView;
    import static com.cqjtu.studentsystemweb.studentList.find;
    public class searchlist extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemClickListener,StuAdapter.InnerItemOnClickListener{
        private ListView list;
        public static StuAdapter stuAdapter1;
        private Button back;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_searchlist);
            list=(ListView)findViewById(R.id.studentList1);
            back=(Button)findViewById(R.id.back);
            Bundle bundle = getIntent().getExtras();
            stuAdapter1=new StuAdapter(searchlist.this,find);
            list.setAdapter(stuAdapter1);
            stuAdapter1.setOnInnerItemOnClickListener(this);
            list.setOnItemClickListener(searchlist.this);
            back.setOnClickListener(this);
        }
        @Override
        public void onClick(View view) {
            Intent intent=new Intent();
            if (view.getId()==R.id.back){
                finish();
            }
        }
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        }
        @Override
        public void itemClick(View view) {
    
        }
    }
    

    6、新创建一个activity页面,实现学生信息的添加功能
    6-1、添加功能的XML界面设计代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_height="match_parent"
        android:background="@drawable/background2"
        android:id="@+id/back"
        tools:context=".addStudent">
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:layout_marginTop="5dp"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="2dp"
            android:background="@drawable/back4"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:textSize="20dp"
            android:text="添加学生信息"
            android:gravity="center"
            android:textColor="#00B8D4"/>
        <TextView
            android:id="@+id/no"
            android:layout_marginTop="5dp"
            android:layout_width="match_parent"
            android:gravity="center"
            android:layout_height="25dp"
            android:inputType="text"
            android:textColor="#D50000"
            android:textSize="20dp"
            android:text="学号由系统分配" />
        <EditText
            android:id="@+id/name"
            android:layout_marginTop="5dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:hint="@string/name" />
        <EditText
            android:id="@+id/age"
            android:layout_marginTop="2dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="numberSigned"
            android:maxLength="3"
            android:hint="@string/age"/>
        <AutoCompleteTextView
            android:id="@+id/major"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="2dp"
            android:inputType="text"
            android:hint="@string/major"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_marginTop="2dp"
            android:layout_height="wrap_content"
            android:textColor="#00B8D4"
            android:text="性别"/>
        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/sex"
            android:orientation="horizontal">
            <RadioButton
                android:layout_width="600dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textColor="#00B0FF"
                android:text="男"/>
            <RadioButton
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textColor="#D81B60"
                android:text="女"/>
        </RadioGroup>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:orientation="horizontal">
            <Button
                android:id="@+id/addname"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/button_shape1"
                android:text="确认添加" />
            <Button
                android:id="@+id/addmajor"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/button_shape1"
                android:text="发送信息" />
        </LinearLayout>
    </LinearLayout>
    

    界面设计的效果图如下:(其中的图片大家可以自己替换哦)
    在这里插入图片描述
    6-2、添加功能页面对应的java实现类代码如下:

    package com.cqjtu.studentsystemweb;//这里是导入自己项目的全类名上面没有给出,这里给出,每一个java页面的代码就都要导入
    import androidx.appcompat.app.AppCompatActivity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.AutoCompleteTextView;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.Toast;
    import java.util.HashMap;
    import java.util.Map;
    import static com.cqjtu.studentsystemweb.MainActivity.students;
    public class addStudent extends AppCompatActivity implements View.OnClickListener {
        private AutoCompleteTextView major1;
        public  EditText name1;
        private EditText age1;
        private Button addname1;
        private Button addmajor1;
        private RadioGroup sex1;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_add_student);
            name1=(EditText) findViewById(R.id.name);
            major1=(AutoCompleteTextView) findViewById(R.id.major);
            age1=(EditText)findViewById(R.id.age);
            sex1=(RadioGroup)findViewById(R.id.sex);
            addname1=(Button)findViewById(R.id.addname);
            addmajor1=(Button)findViewById(R.id.addmajor);
            addname1.setOnClickListener(this);
            addmajor1.setOnClickListener(this);
            String major[]={"计算机科学与技术","物联网工程","电子信息","电子通信","土木工程","工程造价","计算机软件","物联网系统"};
            ArrayAdapter<String> arrayAdapter=new ArrayAdapter(this,R.layout.textview,major);
            major1.setAdapter(arrayAdapter);
            View v = findViewById(R.id.back);
            v.getBackground().setAlpha(200);
        }
        private boolean isEmpty(String str) {
            return str.length()==0||null==str;
        }
        @Override
        public void onClick(View view) {
            Intent intent = new Intent();
            if (view.getId() == R.id.addname) {
                final String name22 = name1.getText().toString();
                final String sex22 = getRadio(sex1);
                final String age22 = age1.getText().toString();
                final String major22 = major1.getText().toString();
                if (isEmpty(name22)) {
                    Toast.makeText(this, "姓名不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (isEmpty(age22)) {
                    Toast.makeText(this, "年龄不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (isEmpty(sex22)) {
                    Toast.makeText(this, "请选择性别", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (isEmpty(major22)) {
                    Toast.makeText(this, "专业不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                new Thread() {
                    @Override
                    public void run() {
                        String url = HttpUtilsHttpURLConnection.BASE_URL + "/studentInsertServlet";
                        Map<String, String> params = new HashMap<String, String>();
                        params.put("name", name22);
                        params.put("age", age22);
                        params.put("major", major22);
                        params.put("sex", sex22);
                        String result = HttpUtilsHttpURLConnection.getContextByHttp(url, params);
                        System.out.println(result);
                    }
                }.start();
                Toast.makeText(this, "已经添加" + students.size() + "条记录", Toast.LENGTH_SHORT).show();
                name1.setText("");
                sex1.clearCheck();
                age1.setText("");
                major1.setText("");
                name1.setFocusable(true);
                name1.setFocusableInTouchMode(true);
                name1.requestFocus();
            } else if (view.getId() == R.id.addmajor) {
                intent.setClass(this, studentList.class);
                startActivity(intent);
            }
        }
        public String getRadio(RadioGroup radioGroup){
            String info="";
            int num=radioGroup.getChildCount();
            for(int i=0;i<num;i++){
                RadioButton rd=(RadioButton)radioGroup.getChildAt(i);
                if(rd.isChecked()){
                    info=rd.getText().toString();
                    break;
                }
            }
            return info;
        }
    }
    

    7、新建一个学生信息编辑的activity页面,实现对学生信息的编辑,修改
    7-1、学生信息编辑界面的XML设计代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_height="match_parent"
        android:background="@drawable/background4"
        android:id="@+id/back1"
        tools:context=".edit">
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:layout_marginTop="5dp"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="2dp"
            android:background="@drawable/back5"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:textSize="20dp"
            android:text="学生信息编辑"
            android:gravity="center"
            android:textColor="#00B8D4"/>
        <LinearLayout
            android:layout_width="match_parent"
            android:orientation="horizontal"
            android:layout_height="wrap_content">
            <TextView
                android:layout_marginTop="5dp"
                android:layout_width="430dp"
                android:gravity="right"
                android:layout_weight="1"
                android:layout_height="25dp"
                android:inputType="text"
                android:textColor="#D50000"
                android:text="学生学号:"/>
            <TextView
                android:id="@+id/no"
                android:layout_marginTop="5dp"
                android:layout_width="match_parent"
                android:gravity="left"
                android:layout_height="25dp"
                android:layout_weight="1"
                android:inputType="text"
                android:textColor="#D50000"
                android:text="学号不能修改"/>
        </LinearLayout>
        <EditText
            android:id="@+id/name1"
            android:layout_marginTop="5dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:hint="@string/name" />
        <EditText
            android:id="@+id/age1"
            android:layout_marginTop="2dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="numberSigned"
            android:maxLength="3"
            android:hint="@string/age"/>
        <AutoCompleteTextView
            android:id="@+id/major1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="2dp"
            android:inputType="text"
            android:hint="@string/major"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_marginTop="2dp"
            android:layout_height="wrap_content"
            android:textColor="#00B8D4"
            android:text="性别"/>
        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/sex1"
            android:orientation="horizontal">
            <RadioButton
                android:layout_width="600dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textColor="#00B0FF"
                android:text="男"/>
            <RadioButton
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textColor="#D81B60"
                android:text="女"/>
        </RadioGroup>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:orientation="horizontal">
            <Button
                android:id="@+id/save"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/button_shape1"
                android:text="保存" />
            <Button
                android:id="@+id/exit"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/button_shape1"
                android:text="退出" />
        </LinearLayout>
    </LinearLayout>
    

    学生信息编辑的界面如下:
    在这里插入图片描述
    7-2、学生编辑界面的实现类java代码如下:

    package com.cqjtu.studentsystemweb;
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.AutoCompleteTextView;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.TextView;
    import android.widget.Toast;
    import java.util.HashMap;
    import java.util.Map;
    import static com.cqjtu.studentsystemweb.MainActivity.students;
    import static com.cqjtu.studentsystemweb.studentList.adapter;
    public class edit extends AppCompatActivity implements View.OnClickListener{
        private EditText name11;
        private AutoCompleteTextView major11;
        private TextView id11;
        private EditText age11;
        private RadioGroup sex11;
        private Button save;
        private Button quit;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_edit);
            View v = findViewById(R.id.back1);
            v.getBackground().setAlpha(230);
            id11=(TextView)findViewById(R.id.no);
            name11=(EditText) findViewById(R.id.name1);
            sex11=(RadioGroup) findViewById(R.id.sex1);
            age11=(EditText) findViewById(R.id.age1);
            major11=(AutoCompleteTextView)findViewById(R.id.major1);
            quit=(Button)findViewById(R.id.exit);
            save=(Button)findViewById(R.id.save);
            String id=(String) students.get(k()).getId();
            String name=(String) students.get(k()).getName();
            String sex=(String) students.get(k()).getSex();
            String age=(String) students.get(k()).getAge();
            String major=(String)students.get(k()).getMajor();
            id11.setText(id);
            name11.setText(name);
            showRadio(sex11,sex);
            age11.setText(age);
            major11.setText(major);
            String major1[]={"计算机科学与技术","物联网工程","电子信息","电子通信","土木工程","工程造价","计算机软件","物联网系统"};
            ArrayAdapter<String> arrayAdapter=new ArrayAdapter(this,R.layout.textview,major1);
            major11.setAdapter(arrayAdapter);
            quit.setOnClickListener(this);
            save.setOnClickListener(this);
        }
        @Override
        public void onClick(View view) {
            if(view.getId()==R.id.exit){
                finish();
            }else if (view.getId()==R.id.save){
                final String id=id11.getText().toString();
                students.get(k()).setId(id);
                final String name=name11.getText().toString();
                students.get(k()).setName(name);
                final String sex=getRadio(sex11);
                students.get(k()).setSex(sex);
                final String age=age11.getText().toString();
                students.get(k()).setAge(age);
                final String major=major11.getText().toString();
                students.get(k()).setMajor(major);
                new Thread() {
                    @Override
                    public void run() {
                        String url = HttpUtilsHttpURLConnection.BASE_URL + "/studentInsertServlet";
                        Map<String, String> params = new HashMap<String, String>();
                        params.put("no",id);
                        params.put("name", name);
                        params.put("age", age);
                        params.put("major", major);
                        params.put("sex", sex);
                        String result = HttpUtilsHttpURLConnection.getContextByHttp(url, params);
                        System.out.println(result);
                    }
                }.start();
                Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show();
                adapter.notifyDataSetChanged();
                finish();
            }
        }
        public void showRadio(RadioGroup radioGroup, String v){
            int num=radioGroup.getChildCount();
            for(int i=0;i<num;i++){
                RadioButton radioButton=(RadioButton)radioGroup.getChildAt(i);
                String info=radioButton.getText().toString();
                if(info.equals(v)){
                    radioButton.setChecked(true);
                    break;
                }
            }
        }
        public int k(){
            Bundle bundle1 = getIntent().getExtras();
            int k=bundle1.getInt("p");
            return k;
        }
        public String getRadio(RadioGroup radioGroup){
            String info="";
            int num=radioGroup.getChildCount();
            for(int i=0;i<num;i++){
                RadioButton rd=(RadioButton)radioGroup.getChildAt(i);
                if(rd.isChecked()){
                    info=rd.getText().toString();
                    break;
                }
            }
            return info;
        }
    }
    
    

    8、新建一个activity页面,当单击我们listView时候,我们可以跳转到这个页面,进行学生信息的详细情况查看
    8-1、该页面的XML设计的代码如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_height="match_parent"
        android:background="@drawable/background3"
        android:id="@+id/back4"
        tools:context=".delite">
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:layout_marginTop="5dp"
            android:layout_marginLeft="2dp"
            android:layout_marginRight="2dp"
            android:background="@drawable/back2"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:textSize="20dp"
            android:text="学生信息详情如下"
            android:gravity="center"
            android:textColor="#00B8D4"/>
        <TextView
            android:id="@+id/no33"
            android:layout_marginTop="5dp"
            android:layout_width="match_parent"
            android:gravity="center"
            android:layout_height="25dp"
            android:inputType="text"
            android:textColor="#D50000"
            android:text="学号不能修改"/>
        <EditText
            android:id="@+id/name33"
            android:layout_marginTop="5dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:hint="@string/name" />
        <EditText
            android:id="@+id/age33"
            android:layout_marginTop="2dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="numberSigned"
            android:maxLength="3"
            android:hint="@string/age"/>
        <AutoCompleteTextView
            android:id="@+id/major33"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="2dp"
            android:inputType="text"
            android:hint="@string/major"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_marginTop="2dp"
            android:layout_height="wrap_content"
            android:textColor="#00B8D4"
            android:text="性别"/>
        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/sex33"
            android:orientation="horizontal">
            <RadioButton
                android:layout_width="600dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textColor="#00B0FF"
                android:clickable="false"
                android:text="男"/>
            <RadioButton
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:clickable="false"
                android:textColor="#D81B60"
                android:text="女"/>
        </RadioGroup>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:orientation="horizontal">
            <Button
                android:id="@+id/exit1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/button_shape1"
                android:text="退出" />
        </LinearLayout>
    </LinearLayout>
    

    界面设计的效果图如下所示:
    在这里插入图片描述
    8-2、该界面的实现类java代码如下所示:

    package com.cqjtu.studentsystemweb;
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.EditText;
    import android.widget.LinearLayout;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.TextView;
    import java.util.ArrayList;
    import java.util.List;
    public class delite extends AppCompatActivity implements View.OnClickListener {
        private TextView id33;
        private EditText major33;
        private EditText age33;
        private RadioGroup sex33;
        private EditText name33;
        private Button exit1;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_delite);
            id33=(TextView)findViewById(R.id.no33);
            name33=(EditText) findViewById(R.id.name33);
            sex33=(RadioGroup) findViewById(R.id.sex33);
            age33=(EditText) findViewById(R.id.age33);
            major33=(EditText)findViewById(R.id.major33);
            exit1=(Button)findViewById(R.id.exit1);
            exit1.setOnClickListener(this);
            name33.setKeyListener(null);
            age33.setKeyListener(null);
            major33.setKeyListener(null);
            View v = findViewById(R.id.back4);
            v.getBackground().setAlpha(230);
            Bundle bundle = getIntent().getExtras();
            List<Student> show=(ArrayList<Student>)bundle.get("show");
            String id=(String) show.get(0).getId();
            String name=(String) show.get(0).getName();
            String sex=(String) show.get(0).getSex();
            String age=(String) show.get(0).getAge();
            String major=(String)show.get(0).getMajor();
            id33.setText("学生学号:"+id);
            name33.setText("姓名:"+name);
            showRadio(sex33,sex);
            age33.setText("年龄:"+age);
            major33.setText("专业:"+major);
        }
        public void showRadio(RadioGroup radioGroup, String v){
            int num=radioGroup.getChildCount();
            for(int i=0;i<num;i++){
                RadioButton radioButton=(RadioButton)radioGroup.getChildAt(i);
                String info=radioButton.getText().toString();
                if(info.equals(v)){
                    radioButton.setChecked(true);
                    break;
                }
            }
        }
        public void showBox(LinearLayout linearLayout , List<String>v){
            int num=linearLayout.getChildCount();
            for(int i=0;i<num;i++){
                CheckBox checkBox=(CheckBox)linearLayout.getChildAt(i);
                checkBox.setChecked(false);
                for(String c:v){
                    if(checkBox.getText().toString().equals(c)){
                        checkBox.setChecked(true);
                        break;
                    }
                }
            }
        }
        @Override
        public void onClick(View view) {
            if(view.getId()==R.id.exit1){
                finish();
            }
        }
    }
    
    

    到这里,我们的AndroidStudent端的项目设计就完成了,接下来,我们就该进行服务器端的讲解了

    二、eclisp-Tomcat端的步骤如下所示:

    对于eclisp中的Tomcat的布置,大家可以参照一下网上的博客进行服务器端的Tomcat端进行相应的配置
    Tomcat在eclisp上面的配置参考教程
    (一)、创建我们需要的数据库

    1、用户名和密码的保存:

    列名数据类型
    noint
    usernamevarchar(30)
    passwordvarchar(30)

    2、学生信息列表的创建:

    列名数据类型
    noint
    namevarchar(30)
    ageint
    sexvarchar(5)
    majorvarchar(30)

    (二)、创建学生信息类和用户名类对应android端的学生信息
    1、学生类的java代码如下:

    package cqjtu.edu.studentadmin.entity;
    public class Student {
    	private int no;
    	private String name;
    	private String sex;
    	private int age;
    	private String major;
    	public Student(){}
    	public Student(int no,String name,String sex,int age,String major){
    		this.no=no;
    		this.name=name;
    		this.sex=sex;
    		this.age=age;
    		this.major=major;
    	}
    	public int getNo() {
    		return no;
    	}
    	public void setNo(int no) {
    		this.no = no;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getSex() {
    		return sex;
    	}
    	public void setSex(String sex) {
    		this.sex = sex;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public String getMajor() {
    		return major;
    	}
    	public void setMajor(String major) {
    		this.major = major;
    	}
    }
    

    2、用户名类的java代码如下:

    package cqjtu.edu.studentadmin.entity;
    public class User {
    	private int no;
    	private String userName;
    	private String password;
    	public int getNo() {
    		return no;
    	}
    	public void setNo(int no) {
    		this.no = no;
    	}
    	public String getUserName() {
    		return userName;
    	}
    	public void setUserName(String userName) {
    		this.userName = userName;
    	}
    	public String getPassword() {
    		return password;
    	}
    	public void setPassword(String password) {
    		this.password = password;
    	}
    }
    

    (三)、让服务器端与SqlServer数据库进行连接匹配
    1、创建一个java类DatabaseOperation进行对数据库的连接,代码如下所示:

    package cqjtu.edu.studentadmin.dao;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    import cqjtu.edu.studentadmin.entity.Course;
    import cqjtu.edu.studentadmin.entity.Grade;
    import cqjtu.edu.studentadmin.entity.Student;
    public class DatabaseOperation {
    	public static Connection getConn() {
    		String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
    		String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=javaWeb;";
    		String userName="sa";
    		String userPwd="*******";//这里填写自己的数据库连接的密码
    		try
    		{
    		    Class.forName(driverName);
    		    Connection dbConn=DriverManager.getConnection(dbURL,userName,userPwd);
    		    return dbConn;
    		 }
    		 catch(ClassNotFoundException e)
    		 {
    			  e.printStackTrace();
    		 } 
    		 catch(SQLException e) {
    			  e.printStackTrace();
    		 }
    		 return null;
    	}
        /*
         * 用户登录验证
         */
        public boolean findUser(String name,String password){	
        	Connection conn=getConn();
    		String sql="select * from user1 where username=? and password=?";
    		PreparedStatement pst=null;
    		try {
    			pst=conn.prepareStatement(sql);
    			pst.setString(1, name);
    			pst.setString(2, password);
    			ResultSet results=pst.executeQuery();
    			while(results.next()) {
    				return true;
    			}		
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}finally {
    			try {
    				pst.close();
    				conn.close();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			
    		}
        	return false;   	 
        }
        /*
         * 学生信息查询 
         */
        public List<Student> findStuInfo(String key){
    		List<Student> students=new ArrayList<Student>();
    		Connection conn=getConn();
    		String sql = "select * from student where name like '%"+key+"%' or no like '%"+key+"%'";
    		try {
    			PreparedStatement pst=conn.prepareStatement(sql);
    			ResultSet results=pst.executeQuery();
    			while(results.next()){
    				int no=results.getInt("no");
    				String name=results.getString("name");
    				String sex=results.getString("sex");
    				int age=results.getInt("age");
    				String major=results.getString("major");
    				Student s=new Student(no,name,sex,age,major);
    				students.add(s);
    			}
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return students;	
    	}
        /*
         * 删除学生信息
         */
        public int deleteGradeInfo(int no,int no1){
        	int i=0;
        	Connection con=getConn();
        	String sql="delete from grade where sno=? and cno=?";
        	try {
    			PreparedStatement pst=con.prepareStatement(sql);
    			pst.setInt(1,no);
    			pst.setInt(2,no1);
    			i=pst.executeUpdate();
    			pst.close();
    			con.close();
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
        	return i;
        }
        /*
         * 插入学生信息
         */
        public int insertStuInfo(Student s){
    		if(s==null) return 0;
    		Connection con=getConn();
    		String sql="insert into student(name,sex,age,major) values(?,?,?,?)";
    		try {
    			PreparedStatement pst=con.prepareStatement(sql);
    			pst.setString(1, s.getName());
    			pst.setString(2, s.getSex());
    			pst.setInt(3, s.getAge());
    			pst.setString(4, s.getMajor());
    			int i=pst.executeUpdate();
    			pst.close();
    			con.close();
    			return i;
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    			return 0;
    			
    		}
    	}
        /*
         * 编辑学生信息
         */
        public int updateStudent(Student s){
    		int i=0;
    		Connection con=getConn();
    		String sql="update student set name='"+s.getName()+"',sex='"+s.getSex()+"',age="+s.getAge()+",major='"+s.getMajor()+"'where"
    				+ " no="+s.getNo();
    		try {
    			PreparedStatement pst=con.prepareStatement(sql);
    			i=pst.executeUpdate();
    			pst.close();
    			con.close();
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return i;
    	}
    }
    

    (四)、对服务器学生信息实现和数据库学生信息同步的增、删、改、查!
    1、首先创建一个学生信息的接口类,StudentOperation,实现学生信息的一系列操作的函数接口,代码如下所示:

    package cqjtu.edu.studentadmin.service;
    import java.util.List;
    import cqjtu.edu.studentadmin.entity.Student;
    public interface StudentOperation {
    	public abstract List<Student> searchStudent(String key);
    	public abstract int  deleteStudent(int no);
    	public abstract int  insertStudent(Student s);
    	public abstract int  updateStudent(Student s);
    }
    

    增加学生信息public abstract int insertStudent(Student s);
    删除学生信息public abstract int deleteStudent(int no);
    修改学生信息public abstract int updateStudent(Student s);
    查找学生信息public abstract List<Student> searchStudent(String key);
    2、创建有一个学生信息接口函数的实现类StudentOperationImp,为接口StudentOperation完成函数的实现,java代码如下:

    package cqjtu.edu.studentadmin.service;
    import java.util.List;
    import cqjtu.edu.studentadmin.dao.DatabaseOperation;
    import cqjtu.edu.studentadmin.entity.Student;
    public class StudentOperationImp implements StudentOperation {
    	DatabaseOperation dbOp = new DatabaseOperation();
    	@Override
    	public List<Student> searchStudent(String key) {
    		// TODO Auto-generated method stub
    		return dbOp.findStuInfo(key);
    	}
    	@Override
    	public int deleteStudent(int no) {
    		int i = dbOp.deleteStuInfo(no);
    		return i;
    	}
    	@Override
    	public int insertStudent(Student s) {
    		int i = dbOp.insertStuInfo(s);
    		return i;
    	}
    	@Override
    	public int updateStudent(Student s) {
    		int i=dbOp.updateStudent(s);
    		return i;
    	}
    }
    

    以上中返回(return)的函数在数据库连接的函数中可以找到。
    (五)、创建学生信息的servlet服务和用户信息的servlet服务,用来实现前端和后端的相互访问
    1、新建一个servlet名为LoginServlet,进行用户的登录数据获取代码如下:

    package cqjtu.edu.jsp.servlet;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.alibaba.fastjson.JSONObject;
    import cqjtu.edu.studentadmin.service.LoginService;
    public class LoginServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
        LoginService loginService=new LoginService();
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		response.setContentType("text/html;charset=utf-8");
    		//
    		response.setCharacterEncoding("UTF-8");
    		request.setCharacterEncoding("UTF-8");
    		String username=request.getParameter("userName");
    		String password=request.getParameter("password");
    		JSONObject json = new JSONObject(); 
    		if(loginService.loginCheck(username, password)) {
    			json.put("code", 1);
    		}else {
    			json.put("code", 0);
    		}
    		PrintWriter pw=response.getWriter();
    		pw.print(json);
    		pw.close();
    	}
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
    		doGet(request,resp);
    	}
    }
    

    这里response.setCharacterEncoding("UTF-8")request.setCharacterEncoding("UTF-8")这两句代码很重要,一个是保证传过去的数据不会发生乱码、另一个是保证从前端传回来的数据不会发生乱码、任何一个发生都会导致学生信息查找失败或者用户登录失败。
    2、新建一个servlet名为StudentInsertServlet,进行学生信息插入,java代码如下:

    package cqjtu.edu.jsp.servlet;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.alibaba.fastjson.JSONObject;
    import com.mysql.jdbc.StringUtils;
    import cqjtu.edu.studentadmin.entity.Student;
    import cqjtu.edu.studentadmin.service.StudentOperationImp;
    /**
     * 学生信息保存
     */
    @WebServlet("/StudentInsertServlet")
    public class StudentInsertServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    	StudentOperationImp stuOper = new StudentOperationImp();
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		response.setContentType("text/html;charset=utf-8");
    		response.setCharacterEncoding("UTF-8");
    		request.setCharacterEncoding("UTF-8");
    		String name=request.getParameter("name");
    		String age=request.getParameter("age");
    		String no=request.getParameter("no");
    		String sex=request.getParameter("sex");
    		String major=request.getParameter("major");
    		int i=0 ;
    		if(StringUtils.isNullOrEmpty(no)) {//如果有No说明是编辑,没有说明是新增
    			Student s=new Student(0,name,sex,Integer.parseInt(age),major);
    			i=stuOper.insertStudent(s);
    		}else {
    			Student s=new Student(Integer.parseInt(no),name,sex,Integer.parseInt(age),major);
    			i=stuOper.updateStudent(s);
    		}
    		JSONObject json = new JSONObject();
    		json.put("code", i);
    		PrintWriter pw=response.getWriter();
    		pw.print(json);
    		pw.close();
    	}
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
    		doGet(request,resp);
    	}
    }
    
    

    3、新建一个servlet名为StudentQuery,进行学生信息的查询,java代码如下:

    package cqjtu.edu.jsp.servlet;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.List;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.alibaba.fastjson.JSONObject;
    import cqjtu.edu.studentadmin.entity.Student;
    import cqjtu.edu.studentadmin.service.StudentOperationImp;
    
    /**
     * Servlet implementation class StudentQuery
     */
    @WebServlet("/StudentQuery")
    public class StudentQuery extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    	StudentOperationImp stuOper = new StudentOperationImp();
    	/**
    	 * 学生信息查询
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		response.setContentType("text/html;charset=utf-8");//防止页面出现中文乱码,要放在PrintWriter前面
    		response.setCharacterEncoding("UTF-8");
    		request.setCharacterEncoding("UTF-8");
    		String key = request.getParameter("key");
    		JSONObject json = new JSONObject();
    		List<Student> students=stuOper.searchStudent(key);
    		json.put("students", students);
    		PrintWriter pw = response.getWriter();
    		pw.print(json);
    		pw.close();
    	}
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
    		doGet(request,resp);
    	}
    }
    
    

    4、新建一个servlet名为StudentDelServlet,进行学生信息的删除,java代码如下:

    package cqjtu.edu.jsp.servlet;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.alibaba.fastjson.JSONObject;
    import cqjtu.edu.studentadmin.service.StudentOperationImp;
    
    /**
     * Servlet implementation class StudentDelServlet
     */
    @WebServlet("/StudentDelServlet")
    public class StudentDelServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    	StudentOperationImp stuOper = new StudentOperationImp();   
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		response.setContentType("text/html;charset=utf-8");
    		//
    		response.setCharacterEncoding("UTF-8");
    		request.setCharacterEncoding("UTF-8");
    		String no = request.getParameter("no");
    		int i=stuOper.deleteStudent(Integer.parseInt(no));
    		JSONObject json = new JSONObject();
    		json.put("code", i);
    		PrintWriter pw = response.getWriter();
    		pw.print(json);
    		pw.close();
    	}
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
    		doGet(request,resp);
    	}
    }
    
    

    (六)、在创建的web项目中找到web.xml文件,将里面添加代码为我们上面创建的一系列servlet
    1、web.xml中的代码如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
      <display-name>JSPStudy</display-name>
      <servlet>
        <servlet-name>loginServlet</servlet-name>
        <servlet-class>cqjtu.edu.jsp.servlet.LoginServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>loginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
      </servlet-mapping>
      <servlet>
        <servlet-name>studentQuery</servlet-name>
        <servlet-class>cqjtu.edu.jsp.servlet.StudentQuery</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>studentQuery</servlet-name>
        <url-pattern>/studentQuery</url-pattern>
      </servlet-mapping>
      <servlet>
        <servlet-name>studentDelServlet</servlet-name>
        <servlet-class>cqjtu.edu.jsp.servlet.StudentDelServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>studentDelServlet</servlet-name>
        <url-pattern>/studentDelServlet</url-pattern>
      </servlet-mapping>
      <servlet>
        <servlet-name>studentInsertServlet</servlet-name>
        <servlet-class>cqjtu.edu.jsp.servlet.StudentInsertServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>studentInsertServlet</servlet-name>
        <url-pattern>/studentInsertServlet</url-pattern>
      </servlet-mapping>
      <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>cqjtu.edu.jsp.servlet.MyServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/MyServlet</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    

    2、创建我们的登录界面login.jsp,html文件代码如下:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="stylesheet"
    	href="<%=request.getContextPath()%>/resource/bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet"
    	href="<%=request.getContextPath()%>/resource/dist/css/AdminLTE.min.css">
    <link rel="stylesheet"
    	href="<%=request.getContextPath()%>/temp/login/logincss/myLogin.css">
    <title>登录</title>
    </head>
    <body class="hold-transition login-page">
    	<div class="login-box">
    		<div class="login-logo">
    			<h1>
    				学生课程管理系统<b>Admin</b>student
    			</h1>
    		</div>
    		<!-- /.login-logo -->
    		<div class="login-box-body">
    			<div class="form-group has-feedback">
    				<input type="text" class="form-control" placeholder="username"
    					id="userName"> <span
    					class="glyphicon glyphicon-envelope form-control-feedback"></span>
    			</div>
    			<div class="form-group has-feedback">
    				<input type="password" class="form-control" placeholder="Password"
    					id="password"> <span
    					class="glyphicon glyphicon-lock form-control-feedback"></span>
    			</div>
    			<div class="col-xs-12">
    				<label id="error" style="color: red"></label>
    			</div>
    			<div class="row">
    				<div class="col-xs-6">
    					<button type="button" id="loginBtn"
    						class="btn btn-primary btn-block btn-flat">登录</button>
    				</div>
    				<!-- /.col -->
    				<div class="col-xs-6">
    					<button type="reset" class="btn btn-primary btn-block btn-flat">重置</button>
    				</div>
    				<!-- /.col -->
    			</div>
    		</div>
    		<!-- /.login-box-body -->
    	</div>
    	<!-- /.login-box -->
    	<!-- jQuery 2.1.4 -->
    	<script
    		src="<%=request.getContextPath()%>/resource/jQuery/jQuery-2.1.4.min.js"></script>
    	<!-- Bootstrap 3.3.5 -->
    	<script
    		src="<%=request.getContextPath()%>/resource/bootstrap/js/bootstrap.min.js"></script>
    	<script type="text/javascript">
    		$('#loginBtn').on('click',function(){
    			var userName=$('#userName').val();
    			var password=$('#password').val();
    			var url="<%=request.getContextPath()%>/login"
    			var data = {
    				"userName" : userName,
    				"password" : password
    			}
    			$.ajax({
    				type : "post",
    				url : url,
    				dataType : "json",
    				data:data,
    				success : function(data) {
                        if(data.code==1){
                        	window.location ='<%=request.getContextPath()%>/temp/student/student.jsp';
    					} else {
    						$('#error').html('用户名或密码错误');
    					}
                    }
    		   })
    	})
    	</script>
    </body>
    </html>
    

    登录界面的效果如下所示:
    在这里插入图片描述
    3、创建我们的学生信息界面student.jsp,html文件代码如下:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="stylesheet"
    	href="<%=request.getContextPath()%>/resource/bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet"
    	href="<%=request.getContextPath()%>/resource/dist/css/AdminLTE.min.css">
    <link rel="stylesheet"
    	href="<%=request.getContextPath()%>/resource/dist/css/skins/_all-skins.min.css">
    <link rel="stylesheet"
    	href="<%=request.getContextPath()%>/resource/font-awesome-4.4.0/css/font-awesome.min.css">
    <link rel="stylesheet"
    	href="<%=request.getContextPath()%>/resource/datatables/dataTables.bootstrap.css">
    <link rel="stylesheet"
    	href="<%=request.getContextPath()%>/resource/mycss/mystlye.css">
    <style type="text/css">
    table {
          text-align:center; /*设置水平居中*/
          vertical-align:middle;/*设置垂直居中*/
          font-size: 12px;
    }
    th {
          text-align:center; /*设置水平居中*/
          vertical-align:middle;/*设置垂直居中*/
          font-size: 14px;
    }
    </style>
    <title>学生信息管理</title>
    </head>
    <body class="hold-transition skin-yellow layout-top-nav">
    	<div class="wrapper">
    		<div class="main-header">
    			<div class="navbar navbar-static-top">
    				<div class="navbar-header">
    					<a href="#" class="navbar-brand"><b>Admin</b>课程管理</a>
    				</div>
    				<!--顶部导航栏菜单按钮-->
    				<div class="collapse navbar-collapse pull-left" id="navbar-collapse">
    					<ul class="nav navbar-nav">
    						<li class="active"><a href="#" id="studenshow">学生信息 <span
    								class="sr-only">(current)</span></a></li>
    						<li class="dropdown"><a href="course.jsp">课程信息 <span 
    								class="sr-only">(current)</span></a></li>
    						<li class="dropdown"><a href="grade.jsp">成绩管理 <span 
    						class="sr-only">(current)</span></a></li>
    					</ul>
    
    
    				</div>
    				<!-- /.navbar-collapse -->
    				<!--顶部导航栏右侧的-->
    			</div>
    		</div>
    		<div class="content-wrapper">
    			<div class="content" style="min-height: 560px">
    				<div class="box-header with-border">
    					<i class="fa fa-th-list"></i>
    					<h4 class="box-title">学生管理</h4>
    				</div>
    				<div class="box-body">
    					<div class="box-header with-border">
    						<button type="button" name="add"
    							class="btn btn-info pull-left addBtn">
    							<i class="fa fa-plus-circle"></i>添加
    						</button>
    						<button type="button" name="cancel" id="cancel-btn"
    							class="btn btn-info pull-left resetBtn" title="刷新">
    							<i class="fa fa-refresh"></i>刷新
    						</button>
    						<div class="form-inline pull-right">
    							<button type="button" name="search" id="search-btn"
    								class="btn btn-default pull-right searchBtn" title="查询">
    								<i class="fa fa-search"></i>
    							</button>
    							<input type="text"
    								class="form-control pull-right name-search position-search"
    								id="keyword" placeholder="姓名" />
    						</div>
    					</div>
    					<table width="100%" id="dataTable" class="table" >
    						<thead>
    							<tr>
    								<th width="10%">序号</th>
    								<th width="10%">学号</th>
    								<th width="15%">姓名</th>
    								<th width="15%">年龄</th>
    								<th width="15%">性别</th>
    								<th width="15%">专业</th>
    								<th width="20%">操作</th>
    							</tr>
    						</thead>
    						<tbody id="stuInfoList">
    						</tbody>
    					</table>
    				</div>
    			</div>
    
    		</div>
    		<div class="main-footer">
    			<div class="pull-right hidden-xs">
    				<strong>Copyright &copy; 2016-2017 <a href="#">重庆交通大学</a></strong>
    			</div>
    			<b>Version</b> 1.0.0
    
    		</div>
    		<!-- 学生信息弹窗 -->
    	<div class="modal" id="studentModal">
    		<div class="modal-dialog" role="dialog">
    			<div class="modal-content">
    				<form id="userEditForm">
    					<div class="modal-header">
    						<button type="button" class="close" data-dismiss="modal"
    							aria-label="Close">
    							<span aria-hidden="true">&times;</span>
    						</button>
    						<h4 class="modal-title">
    							<strong>学生信息</strong>
    						</h4>
    					</div>
    						<div class="modal-body">
    							<input type="hidden" name="no" id="no" />
    							<div class="form-horizontal">
    								<div class="row">
    									<div class="form-group">
    										<label class="col-sm-2 control-label">姓名</label>
    										<div class="col-sm-4">
    											<div class="col-md-10">
    												<input class="form-control" type="text" name="name"
    													id="name" />
    											</div>
    											<div class="col-md-2">
    												<span style="color: #F00; fontsize: 30px">*</span>
    											</div>
    										</div>
    										<label class="col-sm-2 control-label">年龄</label>
    										<div class="col-sm-4">
    											<div class="col-md-10">
    												<input class="form-control" type="text" name="age" id="age" />
    											</div>
    										</div>
    									</div>
    									<div class="form-group">
    										<label class="col-sm-2 control-label">专业</label>
    										<div class="col-sm-4">
    											<div class="col-md-10">
    												<select style="width: 100%" class="form-control"
    													name="major" id="major">
    													<option>物联网工程</option>
    													<option>计算机技术</option>
    													<option>电子信息工程</option>
    												</select>
    											</div>
    											<div class="col-md-2">
    												<span style="color: #F00; fontsize: 30px">*</span>
    											</div>
    										</div>
    										<label class="col-sm-2 control-label">性别</label>
    										<div class="col-sm-4">
    											<div class="col-md-6">
    												<input class="radioIterm" type="radio" name="sex" id="sex1"
    													value="male" checked="checked" /></div>
    											<div class="col-md-6">
    												<input class="radioIterm" type="radio" name="sex" id="sex2"
    													value="female" /></div>
    										</div>
    									</div>
    
    								</div>
    							</div>
    						</div>
    					<div class="modal-footer">
    							<button type="button" class="btn btn-primary saveBtn">保存</button>
    							<button type="button" class="btn btn-default"
    								data-dismiss="modal">返回</button>
    					</div>
    				</form>
    			</div>
    
    		</div>
    	</div> 
    	<!-- 学生信息弹窗 -->
    	</div>
    	
    
    	<!-- jQuery 2.1.4 -->
    	<script
    		src="<%=request.getContextPath()%>/resource/jQuery/jQuery-2.1.4.min.js"></script>
    	<!-- Bootstrap 3.3.5 -->
    	<script
    		src="<%=request.getContextPath()%>/resource/bootstrap/js/bootstrap.min.js"></script>
    		
    	<script type="text/javascript">
    	    //加载页面自动获得所有学生信息
    		jQuery(document).ready(function() {
    			findStudent("");
    		})
    		//打开增加学生信息的弹窗
    		$('.addBtn').on('click',function(){
    			jQuery("#no").val('');
    			jQuery("#name").val('');
    			jQuery("#age").val('');
    			jQuery('#sex').prop("checked", true);//默认选中文
    			jQuery("#major").val('');
    			jQuery("#studentModal").modal('show');
    		});
    		//保存学生信息
    		$('.saveBtn').on('click',function(){
    			saveStudent();
    		});
    		//查询学生信息
    	    $('.searchBtn').on('click',function(){
    	    	var key=$('#keyword').val();
    	    	findStudent(key);	
    	    })
    	    //刷新表格
    	    $('.resetBtn').on('click',function(){
    	    	findStudent("");	
    	    })
    	    ///保存学生信息
    		function saveStudent(){
    			var url='<%=request.getContextPath()%>/StudentInsertServlet';
    			var no = $('#no').val();
    			var name = $('#name').val();
    			var age = $('#age').val();
    
    			确定选择的性别
    			var sex;
    			var option = jQuery('input:radio[name="sex"]:checked').val();
    			if (option == "male") {
    				sex = '男';
    			}
    			if (option == "female") {
    				sex = '女';
    			}
    			///获得专业
    			var major = $('#major').val();
    			///传到后台保存的JSON数据
    			var data = {
    				'no' : no,
    				'name' : name,
    				'age' : age,
    				'sex' : sex,
    				'major' : major
    			}
    			$.ajax({
    				type : "post",
    				url : url,
    				dataType : "json",
    				data:data,
    				success : function(data) {
    					if (data.code == 1) {
    						findStudent('');
    						jQuery("#studentModal").modal('hide');
    					} else {
    						alert('保存失败')
    					}
    				}
    			})
    		}
    		//查找学生信息
    		function findStudent(key){
    			var url='<%=request.getContextPath()%>/StudentQuery?key='+key;
    			var t1=document.getElementById("dataTable");
    			$.ajax({
    				type : "get",
    				url : url,
    				dataType : "json",
    				contentType: "application/x-www-form-urlencoded; charset=utf-8",
    				success : function(data) {//根据返回的数据画出表格
                        if(data!=null){
                        	/*加载表格前先删除除第一行的所有行 */
    			            var rows=t1.rows;
                        	for(var i=rows.length-1;i>0;i--){
                        		rows[i].remove();
                        	}
                        	for(var i=0;i<data.students.length;i++){
                        		var row=document.createElement('tr');
                        		row.innerHTML="<td>"+(i+1)+"</td>"+"<td>"
                        		+ data.students[i].no
    							+ "</td>"
    							+ "<td>"
    							+ data.students[i].name
    							+ "</td>"
    							+ "<td>"
    							+ data.students[i].age
    							+ "</td>"
    							+ "<td>"
    							+ data.students[i].sex
    							+ "</td>"
    							+ "<td>"
    							+ data.students[i].major
    							+ "</td>"
                        		+"<td><button class='btn btn-sm btn-default delBtn' οnclick='deleteStudent(this)' value='"+data.students[i].no+"'>删除</button>"
                        		+"<button class='btn btn-sm btn-default editBtn' οnclick='editStudent(this)' value='"+(i+1)+"'>修改</button></td>";
                        		t1.appendChild(row);
                        	}
                        	
    					} 
                    }
    		   })
    		}
    		//编辑学生信息
    		function editStudent(d) {
    			jQuery("#studentModal").modal('show');
    			var i = d.value;
    			var table = document.getElementById("dataTable");
    			var rows = table.rows;
    			var no = rows[i].cells[1].innerHTML;
    			var name = rows[i].cells[2].innerHTML;
    			var age = rows[i].cells[3].innerHTML;
    			var sex=rows[i].cells[4].innerHTML;
    			var major=rows[i].cells[5].innerHTML;
    			$('#no').val(no);
    			$('#name').val(name);
    			$('#age').val(age);
    			单选按钮显示性别
    			var sex = rows[i].cells[4].innerHTML;
    			if (sex == "男") {
    				jQuery("#sex1").prop('checked', true);
    			}
    			if (sex == "女") {
    				jQuery("#sex2").prop('checked', true);
    			}
    			///下拉框显示学生的专业
    			showSelectOption('#major', selectValue);
    		}
    		//删除学生信息
    		function deleteStudent(d){
    			if(!confirm("是否删除该学生信息")) return;
    			var no=d.value
    			var url='<%=request.getContextPath()%>/StudentDelServlet?no='+ no;
    			$.ajax({
    				type : "get",
    				url : url,
    				dataType : "json",
    				success : function(data) {
    					if (data.code == 1) {
    						var row = d.parentNode.parentNode;//得到当前元素父节点的父节点(tr)
    						row.parentNode.removeChild(row);//删除当前行
    					} else {
    						alert("学生有选课信息不能删除!")
    					}
    				}
    			})
    		}
    	</script>
    </body>
    </html>
    

    学习信息界面的效果如下所示:
    在这里插入图片描述
    到这里,我们的服务器端的学生信息的相关操作我们也全部介绍完成。这个项目我们值得注意的是,大家一定要保证手机端的网络和电脑的网络处在同一局域网中,所以大家最好用手机开热点吧,然后电脑连接手机的热点进行此项目的操作。感谢大家收看林君的博客,往后我会持续发布相关的博客,包括我们如何处理某java中的某些错误,谢谢大家!

    展开全文
  • git是版本控制工具github是一个网站,git可以把项目上传至这个网站1:先下载git,并且安装,一般默认即可,安装成功可以点击电脑右键出现2:生成id_rsa.pub, 配置账号和邮箱点击电脑左键,出现上图,点击Git Base ...

    git是版本控制工具

    github是一个网站,git可以把项目上传至这个网站

    1:先下载git,并且安装,一般默认即可,安装成功可以点击电脑右键出现

    0644459778d63ef8234ee79022b08a7e.png

    2:生成id_rsa.pub, 配置账号和邮箱

    点击电脑左键,出现上图,点击Git Base Here出现

    97f6a583c4cc498d963ca9785c620542.png

    输入ssh-keygen -t rsa -C 你的邮箱

    点击enter,一路enter;

    ae7d8d47da38116ca29f75aa80902ef3.png

    这样就生成了id_rsa.pub(默认地址C:\Users\Administrator\.ssh),

    输入:ssh -T git@github.com 查看是否成功

    552063639e3743b6534814f9fba4aee7.png

    输入:git config --global user.name "你的名字"

    输入:git config --global user.email "你的邮箱"

    打开androidstudio的settings-Version Control -Git

    7be067da338cf9240f30da0ba7f21c01.png

    打开androidstudio的settings-Version Control -GitHub

    58058bc051fb024c14767b4a83dd9497.png

    用记事本打开你的id_rsa.pub

    5e747c2e53826de0ead49b3e9327e6cb.png

    复制内容进入github的官网,登录

    打开setting

    e377cdc5c48eb88ee3d4bc6632e2f6c9.png

    c9f6bd093f0c091ab8dbde4993e5ad60.png

    点击Add SSH key 就可以了。

    试一下:

    b3cc704e584a12f6dd845fb87b632a3d.png

    出现这个:

    39c0e012a6b6861eed52edd8ee5e7686.png

    成功androidstudio右上角提示

    Pycharm配置Git和Github

    安装Git(安装过程略) 注册Github(注册过程略) Pycharm配置 Github配置 进入Pycharm后点File——Settings,进入设置页面,依次展开Version Control ...

    【IDEA】本地新建Maven项目&plus;配置Git和GitHub&plus;代码上传和拉取到GitHub&plus;其他IDEA和GitHub实战

    一.本地新建Maven项目并启动成功 1. 按照IDEA提供的模板,构建一个maven webapp的模板项目. 一路Next,到最后的finish.如下图. 2. 新建Tomcat,启动刚建立的项目 ...

    为Xcode配置Git和Github

    Xcode.Git和Github是三个伟大的编程工具.本文记录一下如何在Xcode中使用Git作为源代码控制工具,以及如何将本地的Git仓库和远程Github上的仓库集成起来. 1. 如何为新建的Xc ...

    初次配置git与github出现push不了的问题

    ssh: connect to host gmail.com port 22: No route to host fatal: Could not read from remote repositor ...

    新电脑配置 git 同步github账户

    1.下载安装git 2.初始化 仓库文件夹 git init 3.生成公钥ssh-keygen -t rsa -C "youremail@example.com"4.github ...

    图文详解 &colon; 什么是版本控制&quest;Eclipse配置SVN和IDEA配置GIT教程

    前言 虽然在工作中, VCS已然配置妥当, 我们敲好的业务只需要Commit&push提交就好, 但是不妨碍我们了解什么是版本控制, 为什么要使用这类工具? ps.最近项目里的小伙伴想在自己家 ...

    AndroidStudio中利用git下载github或者git&period;oschina的代码时报错:repository test has failed解决方法

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 微博:http://weibo.com/mcxiaobing AndroidS ...

    git与github安装、配置、pull、push

    操作系统是Ubuntu 16.04 LTS 64bit 1 安装git (1)安装 sudo apt-get install git-core (2)一些全局变量的初始化 在本地建立一个文件夹,然后做 ...

    配置与使用 Git与Github

    Git与Github的注册.配置及使用方法在网上有详细的教程,不做总结. 这里主要总结我在Git.Github的配置及使用过程中遇到的问题.如下: (1) Git与Github的关系.两者都是版本管理 ...

    随机推荐

    【WP开发】正确理解页面缓存

    注:本文内容面向Runtime App. 在新建项目后,细心观察,你会发现在App类中有以下代码: // TODO: 将此值更改为适合您的应用程序的缓存大小 rootFrame.CacheSize = ...

    Java-基础练习1

    1.      Java为什么能跨平台运行?请简述原理. 因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码.然后不同的硬件平台上安装有不同的Java虚拟机(J ...

    经典SQL语句大全&lpar;网络资源共享&rpar;

    下列语句部分是Mssql语句,不可以在access中使用.  SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)  DML—数据操纵语言(SELECT,DELET ...

    解决xcode打开时loading假死的问题

    症状如下: 点击打开xcode后,就一直会看到loading,但是CPU消耗很高,基本上就是死了(动弹不得),通过活动监测器看到xcode显示为“未响应” 以为是安装程序的问题,结果选中xcode拉到 ...

    jq siblings&lpar;&rpar;的强大之处

    在事件处理的方法里 经常遇到自己做什么效果 其他节点就做反之效果 如果用判断 可处理 但代码太啰嗦不够简单 siblings()就可以解决这一切的麻烦 意思就是 除啦我之外的其他兄弟节点 这样可以做2 ...

    jquery 固定导航

    网页代码:

    & ...

    Linux-Shell编程之数组操作

    源码 #!/bin/bash str="Array - Demo Shell"; echo ${#str} #求字符串長度 #定義 arr=('a' 'b' 'c' 'd' 'e' ...

    JDB与迭代

    要求 1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功能 2 m,n 要通过命令行传入 3 提交测试运行截图(至少三张:正常如c(3,2).异常 ...

    WPF防止界面卡死并显示加载中效果

    原文:WPF防止界面卡死并显示加载中效果 网上貌似没有完整的WPF正在加载的例子,所以自己写了一个,希望能帮到有需要的同学 前台:

    展开全文
  • Android StudioTomcat 交互案例(新)

    千次阅读 2020-08-05 22:08:41
    参考androidtomcat数据交互 移动端输入两个数,点击按钮,在web端计算结果并返回,最后在页面弹出 Web端: web项目名:WebProject_war 只写了个Servlet进行逻辑的运算,Servlet名为:Servlet package ...

    首先默认已经装了Tomcat了,这方面的教程网上一大堆。

    github地址

    两数求和

    参考android与tomcat数据交互所写

    移动端输入两个数,点击按钮,在web端计算结果并返回,最后在页面弹出
    在这里插入图片描述
    Web端:

    在这里插入图片描述

    web项目名:WebProject_war

    只写了个Servlet进行逻辑的运算,Servlet名为:Servlet

    package com.Servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class Servlet
     */
    @WebServlet("/Servlet")
    public class Servlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public Servlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		 // TODO Auto-generated method stub
            //避免使用super.doPost(request,response)
    		
            PrintWriter out = response.getWriter();
            
            String n1 = request.getParameter("n1").trim();
            
            String n2 = request.getParameter("n2").trim();
            
            if(n1!=null && n2 != null && !"".equals(n1) && !"".equals(n2)) {
            	int a = Integer.parseInt(n1);
            	
            	int b = Integer.parseInt(n2);
            	
            	out.print(Integer.toString(a+b));
                out.flush();
                out.close();
            }
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		doGet(request, response);
    	}
    
    }
    
    

    接着导出改项目的war包,不管是IDEA还是Eclipse导出War包的博客有很多,这里不在讲了。
    导出后,将war包放在tomcat根目录下的webapps文件夹下。并且在根目录的bin文件夹中点击startup.bat启动tomcat。

    移动端:
    新建项目TomcatTest

    编写一个简单的页面,有两个输入框和一个按钮。

    activtiy_main.xml 代码

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:padding="10dp"
        android:orientation="vertical">
    
        <EditText
            android:id="@+id/shuju1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="input n1"/>
    
        <EditText
            android:id="@+id/shuju2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="input n2"/>
    
        <Button
            android:id="@+id/sum"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAllCaps="false"
            android:text="Sum"/>
    
    </LinearLayout>
    

    然后是MainActivity.java的代码:

    package com.example.tomcattest;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.os.Looper;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.ProtocolException;
    import java.net.URL;
    
    public class MainActivity extends AppCompatActivity {
    
        private EditText shuju1;
        private EditText shuju2;
    
        String n1,n2;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Button button = (Button) findViewById(R.id.sum);
            shuju1 = (EditText) findViewById(R.id.shuju1);
            shuju2 = (EditText) findViewById(R.id.shuju2);
    
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    try {
    //                    Log.d("MainActivity","Start");
                        final String URL="http://10.0.2.2:8080/WebProject_war/Servlet";//根据自己的项目需要修改
    
                        new Thread(new Runnable() {
                            public void run()
                            {
                                String msg = "";
    
                                n1 = shuju1.getText().toString();//获取输入框的值
                                n2 = shuju2.getText().toString();
    
                                try {
    
    //                                Log.d("MainActivity","Continue");
                                    URL url = new URL(URL);//生成一个URL实例,指向我们刚才设定的地址URL
    
                                    /*
                                    openConnection()方法只是创建了一个HttpURLConnection实例,
                                       并不是真正连接,在连接之前可以设置一些属性
                                     */
                                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    
                                    conn.setRequestMethod("POST"); //设置请求方式为post
    
                                    conn.setReadTimeout(5000);//设置超时信息
                                    conn.setConnectTimeout(5000);//设置超时信息
    
                                    conn.setDoInput(true);//设置输入流,允许输入
                                    conn.setDoOutput(true);//设置输出流,允许输出
                                    conn.setUseCaches(false);//设置POST请求方式不能够使用缓存
    
                                    /*
                                    定义我们要传给servlet的参数,格式好像一定要xxx=xxx,代表键值对,
                                      如果有多组,要加一个&,                                                                                         //如“cmd1=version&cmd2=value”
                                     */
                                    String data = "n1=" + n1 + "&n2=" + n2;
    
    //                                System.out.println("shuju" +" " +  n1 +" "+n2);
    
                                    /*
                                    获取输出流,其实在这之前还应该有一个操作:conn.connect();
                                      意思为建立HttpURLConnection连接,只不过//getOutputStream()方法会隐含
                                         进行连接,所以不调用connect()也可以建立连接
                                     */
                                    OutputStream out = conn.getOutputStream();
    
                                    //把data里的数据以字节的形式写入out流中
                                    out.write(data.getBytes());
    
                                    //刷新,将数据缓冲区中的数据全部输出,并清空缓冲区
                                    out.flush();
    
                                    //关闭输出流并释放与流相关的资源
                                    out.close();
    
                                    /*
                                    这里是将conn.getInputStream中的数据包装在字符流的缓冲流reader中
                                    这里值得一说的是:无论是post还是get,http请求实际上直到HttpURLConnection
                                       的getInputStream()这个函数
                                    里面才正式发出去,同时getInputStream返回的值就是servlet返回的数据
                                     */
                                    BufferedReader reader = new BufferedReader(new InputStreamReader(
                                            conn.getInputStream()));
                                    String line = null;
                                    if ((line = reader.readLine()) != null) {
                                        /*
                                        如果数据比较多的话要把if换成while,循环体代码也要小改一下,
                                        由于我当时只是测试,就没改
                                         */
                                        msg = line;
                                    }
                                    Looper.prepare();//为了在子线程中使用Toast
    
                                    Toast.makeText(MainActivity.this, "The answer is " +
                                            msg, Toast.LENGTH_SHORT).show();
    
                                    Looper.loop();
    
                                    conn.disconnect();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            }
    
                        }).start();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }
    

    最后在AndroidManifest.xml中声明网页权限,并且允许使用未加密网络

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.tomcattest">
    
        <uses-permission android:name="android.permission.INTERNET"/>
    
        <application
         	 ....
            android:usesCleartextTraffic="true">
          	 ....
        </application>
    
    </manifest>
    

    关于URL="http://10.0.2.2:8080/WebProject_war/Servlet"中链接的写法,就是你的ip:端口/项目名/访问文件

      在一般的JavaWeb程序开发中,我们通常使用localhost或者127.0.0.1来访问本机的Web服务,但是如果我们在Android模拟器中也采用同样的地址来访问,Android模拟器将无法正常访问到我们的服务,这是为什么呢?
      我们可以这样来理解:Android的底层是Linux kernel,包括Android本身就是一个操作系统,因此,这时我们在模拟器的浏览器中输入的localhost或127.0.0.1所代表的是Android模拟器(Android虚拟机),而不是你的电脑,明白了吗?这就是为什么你在模拟器中使用localhost时会报“Web
    page not available”的原因。
      那到底要如何才能访问到本地电脑上的Web应用呢?在Android中,默认将我们本地电脑的地址映射为10.0.2.2,因此,只需要将原先的localhost或者127.0.0.1换成10.0.2.2,就可以在模拟器上访问本地计算机上的Web资源了。

    这样,一个简单的求和计算机就生成了。

    账户登录与注册

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    数据库用的MySQL ,数据库名为login,表名为user_table,字段如上图所示,其实这里演示只需要user和pwd两个属性就够了。

    web后端:
    用Eclipse写的
    项目名为LoginTest,结构如下
    在这里插入图片描述
    这里主要是访问LoginCheckServlet,里面实现登录和注册的逻辑,而具体实现在Dao下。

    接着导出改项目的war包,不管是IDEA还是Eclipse导出War包的博客有很多,这里不在讲了。
    导出后,将war包放在tomcat根目录下的webapps文件夹下。并且在根目录的bin文件夹中点击startup.bat启动tomcat。

    代码如有需要,去github自取。

    android前端:
    项目名LoginTest
    页面两个输入框两个按钮,activity_main.xml代码如下

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="13dp"
        android:orientation="vertical">
    
        <EditText
            android:id="@+id/admin"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="账户"/>
    
        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="密码"
            android:inputType="textPassword"/>
    
        <Button
            android:id="@+id/regist"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAllCaps="false"
            android:text="注册"/>
    
        <Button
            android:id="@+id/login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAllCaps="false"
            android:text="登录"/>
    
    
    </LinearLayout>
    

    然后在MainActivity.java中实现具体逻辑

    package com.example.logintest;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.os.Looper;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    
        private EditText admin;
        private EditText password;
        private Button login;
        private Button regist;
    
        final String URL_LOGIN ="http://10.0.2.2:8080/LoginTest/loginCheckServlet";//根据自己的项目需要修改
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            admin = (EditText)findViewById(R.id.admin);
            password = (EditText) findViewById(R.id.password);
            login = (Button) findViewById(R.id.login);
            regist = (Button) findViewById(R.id.regist);
    
            login.setOnClickListener(this);
            regist.setOnClickListener(this);
    
        }
    
        @Override
        public void onClick(View view) {
            switch (view.getId()){
                case R.id.login:
                    Log.d("Main","Start");
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            String ad = admin.getText().toString();
                            String pw = password.getText().toString();
                            String flag = "";
    
                            try {
                                Log.d("Main","Continue");
                                URL url =new URL(URL_LOGIN);
    
                                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    
                                conn.setRequestMethod("POST"); //设置请求方式为post
    
                                conn.setReadTimeout(5000);//设置超时信息
                                conn.setConnectTimeout(5000);//设置超时信息
    
                                conn.setDoInput(true);//设置输入流,允许输入
                                conn.setDoOutput(true);//设置输出流,允许输出
                                conn.setUseCaches(false);//设置POST请求方式不能够使用缓存
    
                                String data = "admin=" + ad + "&password=" + pw + "&flag=login";
    
                                OutputStream out = conn.getOutputStream();
    
                                out.write(data.getBytes());
    
                                out.flush();
    
                                out.close();
    
                                BufferedReader reader = new BufferedReader(new InputStreamReader(
                                        conn.getInputStream()));
                                String line = null;
                                if ((line = reader.readLine()) != null) {
                                     /*
                                       如果数据比较多的话要把if换成while,循环体代码也要小改一下,
                                        由于我当时只是测试,就没改
                                      */
                                     flag = line;
    
                                }
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            String msg = "";
                            if(flag.equals("true")) msg = "登录成功";
                            else msg = "失败";
    
                            Log.d("Main",msg);
                            Looper.prepare();
                            Toast.makeText(MainActivity.this, msg,
                                    Toast.LENGTH_SHORT).show();
                            Looper.loop();
                        }
                    }).start();
    
                    break;
                case R.id.regist:
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            String ad = admin.getText().toString();
                            String pw = password.getText().toString();
                            String flag = "";
    
                            try {
                                URL url =new URL(URL_LOGIN);
    
                                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    
                                conn.setRequestMethod("POST"); //设置请求方式为post
    
                                conn.setReadTimeout(5000);//设置超时信息
                                conn.setConnectTimeout(5000);//设置超时信息
    
                                conn.setDoInput(true);//设置输入流,允许输入
                                conn.setDoOutput(true);//设置输出流,允许输出
                                conn.setUseCaches(false);//设置POST请求方式不能够使用缓存
    
                                String data = "admin=" + ad + "&password=" + pw + "&flag=regist";
    
                                OutputStream out = conn.getOutputStream();
    
                                out.write(data.getBytes());
    
                                out.flush();
    
                                out.close();
    
                                BufferedReader reader = new BufferedReader(new InputStreamReader(
                                        conn.getInputStream()));
                                String line = null;
                                if ((line = reader.readLine()) != null) {
                                     /*
                                       如果数据比较多的话要把if换成while,循环体代码也要小改一下,
                                        由于我当时只是测试,就没改
                                      */
                                    flag = line;
    
                                }
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            String msg = "";
                            if(flag.equals("true")) msg = "注册成功";
                            else msg = "注册失败";
    
                            Looper.prepare();
                            Toast.makeText(MainActivity.this, msg,
                                    Toast.LENGTH_SHORT).show();
                            Looper.loop();
                        }
                    }).start();
    
                    break;
                default:
    
    
            }
        }
    }
    

    最后在AndroidManifest.xml中声明网页权限,并且允许使用未加密网络

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.tomcattest">
    
        <uses-permission android:name="android.permission.INTERNET"/>
    
        <application
         	 ....
            android:usesCleartextTraffic="true">
          	 ....
        </application>
    
    </manifest>
    

    关于URL="http://10.0.2.2:8080/WebProject_war/Servlet"中链接的写法,就是你的ip:端口/项目名/访问文件

      在一般的JavaWeb程序开发中,我们通常使用localhost或者127.0.0.1来访问本机的Web服务,但是如果我们在Android模拟器中也采用同样的地址来访问,Android模拟器将无法正常访问到我们的服务,这是为什么呢?
      我们可以这样来理解:Android的底层是Linux kernel,包括Android本身就是一个操作系统,因此,这时我们在模拟器的浏览器中输入的localhost或127.0.0.1所代表的是Android模拟器(Android虚拟机),而不是你的电脑,明白了吗?这就是为什么你在模拟器中使用localhost时会报“Web
    page not available”的原因。
      那到底要如何才能访问到本地电脑上的Web应用呢?在Android中,默认将我们本地电脑的地址映射为10.0.2.2,因此,只需要将原先的localhost或者127.0.0.1换成10.0.2.2,就可以在模拟器上访问本地计算机上的Web资源了。

    展开全文
  • Mac 下Android Studio配置Gradle版本

    千次阅读 2017-04-01 22:37:35
    mac下配置Android studio中的Gradle版本

    Mac系统Android Studio中Gradle版本的配置

     

    首先说明一点,在Android Studio中Project下的build.gradle配置的是Gradle插件的版本插件的版本插件的版本(相信你看出来了,我说了三遍),如下:

    Gradle版本并不是一个东西,你感受下“Gradle版本”和“Gradle插件版本”两者的区别,就像Android Studio 中Genemotion插件版本和Genemotion应用的版本的区别是一样的,下面是它们支持的对应关系,网上找的,如下:

    但是如果你没有相应的Gradle版本,要从网上拉去,很慢的,怎么办呢,可以先下载好zip包,网址如下(希望可以发URL):

    https://services.gradle.org/distributions/

    迅雷下载,倍儿快!

    以下是截图:

    以下是文字,方便拷贝:

    distributionBase=GRADLE_USER_HOME
    distributionPath
    =wrapper/dists
    zipStoreBase
    =GRADLE_USER_HOME
    zipStorePath
    =wrapper/dists
    distributionUrl
    =http\://192.168.1.3:8080/gradle-3.4.1-all.zip

    你可能发现这IP很眼熟啊,没错打开Tomcat服务器,下的非常快!!!

    Tomcat怎么弄自己搞!!!

     

    以下是Mac环境变量配置(为啥背景也是绿色的呢):

    GRADLE_HOME=/Applications/Android' 'Studio.app/Contents/gradle/gradle-3.4.1
    export GRADLE_HOME
    
    export PATH=$PATH:$GRADLE_HOME/bin
    
    GRADLE_USER_HOME=/Users/yezi/.gradle/
    export GRADLE_USER_HOME

     

    步骤是打开终端,输入、执行(按回车执行)以下命令:

    open.bash_profile

    会打开一个文本文件,根据自己实际情况,参照上面的进行配置,完了以后在终端执行以下命令:

    source.bash_profile

    环境变量中的GRADLE_HOME=/Applications/Android''Studio.app/Contents/gradle/gradle-3.4.1
    是有空格的,用英文单引号,引号中添加一个空格就OK了。

    如何查看有没有配置好呢,运行如下命令:

    echo$GRADLE_USER_HOME

    结果如下:

    有人可能会问,这么屌屌的终端配色怎么搞的,在刚才配置环境变量的文件中添加这三行就OK了:

    export CLICOLOR=1
    export LSCOLORS=gxfxaxdxcxegedabagacad
    export PS1='\[\e[32;1m\]\d\t \[\e[32;1m\]\u@\h\[\033[01;31m\] \W\$\#:\[\e[35;1m\]'

     

    在Android Studio中配置Gradle版本(此处应该说三遍),如下(截图已尽量能显示出设置或文件位置,相信你能找得到):

    好像以上都没卵用,下面才是最关键的(你要把zip文件解压到指定位置)

     

     

    差不多就到这了,同步一下,感受一下速度吧!!!




    展开全文
  • 昨天打开项目的时候,突然出现了以上图片的错误。出现的原因是,我前天清理桌面的时候,把tomcat安装包给清除了,项目找不到servlet.api。重新配置Window-&gt;Preferences-&...Androidstudio配置 ...
  • Android中我们时常会与服务器打交道,为了方便测试代码,我们有必要搭建本地的服务器,其实搭建本地的Tomcat服务器也是很简单: Tomcat的下载 环境配置 Eclipse中新建Web工程 一、 Tomcat的下载 在Tomcat官网...
  • 由于内网无法连接到外部网络,在使用Gradle编译Android Studio项目时就会面临一些问题:1.Gradle安装文件无法下载2.Gradle Android插件无法下载3.项目依赖文件无法下载苦心人天不负,通过摸索,找到了一些解决方法,...
  • 1.首先确保环境变量都配置好了。 2.网上搜了一大堆最后还是不管用 3.这是之前的配置,并不好使 下边是好用的配置,把403的提示用户都加上了。//username 用户名 password密码 可以修改
  • androidTomcat安装和配置

    千次阅读 2019-04-08 18:11:07
    前提,jdk已配置 其次,下载Tomcat 官网:http://tomcat.apache.org/ 我下载的是Tomcat 7.0.93 点击Download,出现下面页面 点击第一个zip下载解压 在解压后的文件夹里找到并双击bin文件,找到startup....
  • 在模块化开发中尽可能满足以下要求: 1、添加新模块必须简单(通常会经常发生的) 2、维护模块配置必须简单 所以简化gradle配置文件是很有必要的,通过如下方式可以省略module中gradle大量代码
  •  (1)本篇文章主要解决android studio配置的一些问题,有些内容为网络收集,但都经过亲自操作,均为可行,可信,再此特别感谢那些无私付出的大牛们。 (2)在编写此文时,本人学习android 开发也有些时日,但效果不...
  • apply plugin: 'com.android.application'//说明module的类型,...为库android {compileSdkVersion 22//编译的SDK版本buildToolsVersion "22.0.1"//编译的Tools版本defaultConfig {//默认配置a...
  • Android服务器——TomCat服务器的搭建

    万次阅读 多人点赞 2016-01-24 22:58:00
    Android服务器——TomCat服务器的搭建 作为一个开发人员,当然是需要自己调试一些程序的,这个时候本地的服务器就十分方便了,一般都会使用TomCat或者IIS服务器,IIS就比较简单了,其实tomcat也是很简单的,接下来...
  • Linux多线程系列-2-条件变量的使用(线程安全... linux下使用如下变量和函数 //条件变量 pthread_cond_t int pthread_cond_init (pt ...Java Android HTTP实现总结Java Android HTTP实现总结 Http(Hypertext Transfe...
  • 四.Myeclispe配置tomcat Windows->preferences->myeclispe-severs->tomcat->tomcat x.0(看你下的版本)。 第一个Tomcat home directory 你的tomcat路径,其余不用动,将上方disable变为enable。 展开tomcat x.0 ...
  • 于是各种查阅资料,百度之后实现了一个简单的demo(由于本篇不是关于即时通讯的所以就不贴代码了),服务端代码能正常的在本地运行(在android studio中运行一个带有main函数的类),在同一局域网的客户端可以访问到...
  • 文章目录准备工作AndroidStudio虚拟设备连接本机服务器自己手机连接本机服务器 准备工作 我们在安装了Tomcat之后,一般都能做到在浏览器输入localhost:8080看到这样的界面: 那如果我们想在客户端连接到自己电脑上...
  • 目前有个任务需要修改java的服务端接口代码(tomcat )和修改android程序,不论怎么了,开发工具配置这工作都必须要做的。本人选用了IntelliJ IDEA & Android Studio(在IntelliJ框架下开发的)。先从IntelliJ ...
  • 由于内网无法连接到外部网络,在使用Gradle编译Android Studio项目时就会面临一些问题: 1.Gradle安装文件无法下载 2.Gradle Android插件无法下载 3.项目依赖文件无法下载 苦心人天不负,通过摸索,找到了一些...
  • Android Studio实现多媒体播放器

    千次阅读 多人点赞 2020-06-23 19:55:04
    本次项目综合了Android几乎所有知识,可以让大家熟练掌握Android程序开发的基本技术,涉及Android 基础知识、UI界面、数据存储、四大组件、网络编程、高级编程、多媒体播放器、适配器配置等。大家熟练掌握可以对以后...
  • 方案二:将tomcat或jetty等java web服务器的源码改造,并将class文件转译成android能直接运行的dex格式文件(运行在Dalvik VM上)。 注意,方案二,自己去改造服务器源码,对于一般人显然不现实,但是jetty官方...
  • 写了个简单的程序测试 从android 提交 数据到 web 上的mysql 数据库 总不成功.其实问题不在于程序在于部署.! 1.Tomcat 8的坑 如何激活服务器.实际上就是环境变量的设置的问题.为了避免, CATALINA_BASE 与 CATALINA_...
  • Android Studio安装

    2017-10-09 10:13:49
    Android Studio是谷歌官方支持的继承开发环境使用java编程java标准版本基于java5-java8 使用java高级框架java编程学习java基础课程学习 java进阶课程学习开发Android Apps为Android开发者新手而设计 Eclipse+ADT...
  • 开发工具Android ADT和Android Studio

    千次阅读 2016-08-18 20:44:18
    不管是使用Eclipse ADT还是Android Studio进行开发,都需要配置环境变量。首先,我们了解一下需要配置的环境变量及其作用。 PATH环境变量:作用是指定命令(javac/java/javadoc等)搜索路径,在命令行下面执行命令如...
  • 1.编译Andorid 工程的时候,有时候出现gradle 报下面的错误。 ...Error:(1,0)Cause:... Error:(1, 0) Cause: com/android/build/gradle/A...
  • https://blog.csdn.net/qq_33658730/article/details/78547789 win10下Android Studio和SDK下载、安装和环境变量配置http://yanmin99.com/ android-0基础从入门到精通环境变量ANDROID_HOMEE:\Program Files (x86)\...
  • 目录:1、gradle的概念2、gradle配置jar包,和libs文件夹导入jar包的区别3、签名打包:(1)Studio(2)命令行(3)gradle wrapper的原理4、BuildConfig的使用5、简单介绍module中build.gradle文件参数含义一、gradle的...
  • Android Studio连接云服务器数据库

    千次阅读 2020-04-16 22:35:21
    Android Studio连接云服务器数据库写在开始1.Navicat连接云服务器数据库2.MyEclipse开发服务端servlet的相关步骤Android Studio端代码编写 写在开始 这篇教程用于记录一下我的一次Android Studio连接数据库的过程。...
  • Android studio 目录结构 简介
  • android studio 可以用bmob做服务器端吗?我下载的是android studio,大家给我说一说,谢谢

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,646
精华内容 658
热门标签
关键字:

androidstudio配置tomcat